{"version":3,"sources":["common/CommonUtil.js","common/components/ModalComponent.js","rate-wizard/RateWizardConstants.js","common/redux/reducers/loader.js","common/redux/reducers/auth.js","common/redux/reducers/rateWizard.js","common/redux/reducers/index.js","common/redux/store.js","common/services/common-service.js","common/components/NumericInput.js","common/Constants.js","rate-wizard/services/rate-wizard-service.js","common/redux/actions/rate-wizard/validation.js","rate-wizard/components/BuildRatePlan.js","common/redux/actions/rate-wizard/controls.js","rate-wizard/components/Controls/MarketingMessages.js","rate-wizard/components/Controls/RateCategories.js","rate-wizard/components/Controls/RateParents.js","rate-wizard/RateWizardUtil.js","rate-wizard/components/Controls/ChildRates.js","rate-wizard/components/Controls.js","rate-wizard/components/Restrictions.js","common/redux/actions/rate-wizard/contracts.js","rate-wizard/components/Contracts.js","common/redux/actions/rate-wizard/channels.js","rate-wizard/components/Channels/ChannelsUtils.js","rate-wizard/components/Channels/SellRateViaCheckboxes.js","rate-wizard/components/Channels/DisabledGDSSelectBox.js","rate-wizard/components/Channels/MiscCheckboxes.js","rate-wizard/components/Channels/GDSChannelListItem.js","rate-wizard/components/Channels/GDSChannelsListTables.js","rate-wizard/components/Channels/GDSBuilderForm.js","rate-wizard/components/Channels/index.js","rate-wizard/components/Parameters.js","common/redux/actions/rate-wizard/parameters.js","rate-wizard/components/RateLock.js","rate-wizard/components/PropertyPublish.js","rate-wizard/components/Completion.js","rate-wizard/components/Status.js","rate-wizard/components/RateInfo.js","rate-wizard/components/RatesEditableTable.js","common/redux/actions/rate-wizard/rates.js","rate-wizard/components/RatesDisplayTable.js","rate-wizard/components/Rates.js","rate-wizard/components/RoomOptionSelect.js","rate-wizard/components/RoomTypes.js","common/redux/actions/rate-wizard/index.js","common/redux/actions/rate-wizard/roomTypes.js","common/redux/actions/index.js","PageNotFound.js","PrivateRoute.js","App.js","serviceWorker.js","index.js","common/redux/actionTypes.js","common/redux/actions/rate-wizard/policies.js"],"names":["getLabelMapFromResponse","response","keyAsValueFlag","labelMap","label","forEach","key","value","$","name","_","getPolicyOptions","nullLabel","options","types","policy","map","code","dispval","unshift","NULL_LONG","filter","policyOption","extractRatesAndItems","isRates","parentIncluded","ratesItems","folder","push","extractFolder","folderValue","itemid","folderValAry","split","length","splice","join","folderLabel","currency","toString","children","subFolder","tokens","acctid","extractParentRoomTypes","roomTypes","parentRoomTypes","roomType","parent","extractChannels","channels","extractChannelFolder","isBranch","id","getLabelOrTextField","onChangeHandler","isReadOnly","isTextArea","maxLength","type","style","fontSize","onChange","getLabelOrSelect","valueObj","getLabelOrCheckbox","isChecked","checked","escapeNewLineCharacters","str","replace","getCodeTypesFromResponse","valuesToBeIgnored","indexOf","codevalue","shortdesc","getRateIndexOptionsFromResponse","RateIndexOptions","rateIndexOption","RateIndexOption","option","rateid","shortDesc","buildSelectedChildRateIndexOptions","childRateList","childShortDescRateList","selectedChildRatesList","selectedChildRatesShortDescList","i","getDisplayedNumberAmount","amount","isPercentage","displayValue","UNDEFINED_VALUE","Number","Math","round","getTextField","isMandatory","isInvalid","validationMessage","labelColumnWidth","textColumnWidth","widthProp","MANDATORY_SYMBOL","className","labelColumnSize","textColumnSize","row","sm","xs","md","lg","xl","invalid","genericFieldContainer","field","columnSize","Fragment","tabIndex","autoComplete","opacity","width","height","position","buildDataObjectFromFormData","formData","dataObject","addScrollEffectToHeaderWithBody","dataTableElement","theads","ReactDOM","getElementsByClassName","tbody","addEventListener","item","scrollLeft","isDisplayErrorPopupMsg","errorCode","errorMessage","config","params","servicename","includes","modifyInterceptedResponse","interceptedResponse","extractChildAgeRanges","childAgeRanges","childAgeRangeXML","account","preferences","preference","parser","DOMParser","undefined","doc","parseFromString","getElementsByTagName","age","range","getAttribute","low","high","isValidEmail","email","match","isValidPhoneNumber","phoneNumber","isValidCreditCardExpiration","ccExpMonth","ccExpYear","arrival","arrivalDate","Date","arrivalMonth","getMonth","arrivalYear","getFullYear","getDatesBetweenDates","startDate","endDate","dates","theDate","setDate","getDate","convertDateFormat","dateFormat","regEx","replacerMap","matched","selectElementContents","element","document","createRange","selectNodeContents","sel","window","getSelection","removeAllRanges","addRange","ModalComponent","props","toggle","setState","isOpen","state","this","backdrop","size","zIndex","header","render","footer","React","Component","ROOM_OPTION_SELECT_ALL","ROOM_OPTION_SELECT_SOME","FILTERED_RATE_ITEMS","RATE_WIZARD_LABEL_FILE","DEFAULT_MENU_INDEX","GDS_GALILEO_CHANNELS","GDS_CHANNELS","GDS_CHANNELS_MAP","GDS_CHANNELS_CODES","digitToWordMap","1","2","3","4","5","6","7","8","9","10","REQUIRED_CONTRACT_RATE_CATEGORIES","MAX_ADULTS_NUMBER","CALCULATION_AMOUNT_MAXLENGTH","ROUNDING_NEAREST_MAXLENGTH","ROUNDING_DECIMAL_MAXLENGTH","GALILEO_RATECODE_MAXLENGTH","OTHER_GDS_RATECODE_MAXLENGTH","GDS_RATECODE_LENGTH_ERROR","GALILEO_RATECODE_LENGTH_ERROR","IBE_CHANNEL","PMS_CHANNEL","IBE_ID","PMS_ID","initialState","loadingCount","token","username","rateWizardData","userPreferences","accountPreferences","dateDisplayFormat","dateTimeDisplayFormat","dateInputFormat","dateTimeInputFormat","itemsTreeNodes","selectedItems","itemsTreeExpanded","itemsTreeDisabled","selectedRoomOption","rateWizardConstants","rateWizardPaths","selectedMenuIndex","seasonalStartDate","seasonalEndDate","guaranteePolicyOptions","selectedGuaranteePolicy","cancelPolicyOptions","selectedCancelPolicy","ratesData","itemsMap","itemsOrder","dowMap","Sun","Constants","Mon","Tue","Wed","Thu","Fri","Sat","rateItems","rateItemsDisplay","rateCategoryMap","validatationErrorObject","requiresContract","useContractDescription","gdsRateCategory","selectedContract","isGenericRateSelected","savedContracts","selectedPolicy","policyOptions","commCalcMethodOptions","rateCalcMethodOptions","strikeThruCalcMethodOptions","rateIndexOptions","currencies","parametersTableData","channelsData","isGDSSelected","isIBESelected","isPMSSelected","combineReducers","loader","action","START_DATA_LOAD","END_DATA_LOAD","auth","SAVE_AUTH_INFO","rateWizard","Object","assign","startsWith","LOAD","policyType","UPDATE","LOAD_RATE_WIZARD_DATA","LOAD_PREFERENCES","isUser","get","LOAD_ITEMS_TREE","CHANGE_SELECTED_ROOM_OPTION","CHANGE_SELECTED_ITEMS","CHANGE_EXPANDED_ITEMS","LOAD_RATE_WIZARD_LABELS","CHANGE_SELECTED_MENU_INDEX","CHANGE_SEASONAL_START_DATE","CHANGE_SEASONAL_END_DATE","LOAD_GUARANTEE_SELECT","UPDATE_GUARANTEE_POLICY","LOAD_CANCEL_SELECT","UPDATE_CANCEL_POLICY","UPDATE_RATES_DATA","UPDATE_RATE_ITEMS","rateWizardRateItems","DELETE_RATE_REQUEST","UPDATE_DOW_MAP","LOAD_RATE_CATEGORIES","LOAD_COMM_CALC_METHOD","LOAD_RATE_CALC_METHOD","LOAD_STRIKE_CALC_METHOD","LOAD_RATE_INDEX_OPTIONS","LOAD_RATE_ACCESS_CODES","rateAccessCodes","SET_RATE_WIZARD_VALIDATION_ERROR","CLEAR_RATE_WIZARD_VALIDATION_ERROR","TOGGLE_REQUIRES_CONTRACT_FLAG","TOGGLE_USE_CONTRACT_DESCRIPTION_FLAG","UPDATE_RATE_WIZARD_DATA","LOAD_CURRENCIES","UPDATE_PARAMETERS_TABLE_DATA","TOGGLE_PARAMETERS_STATUS","param","index","active","LOAD_CHANNELS_DATA","payload","TOGGLE_GDS_CHECKBOX","TOGGLE_IBE_CHECKBOX","TOGGLE_PMS_CHECKBOX","store","createStore","rootReducer","applyMiddleware","thunk","url","ignoreCommonParams","axios","then","post","json","ignoreCommonFormData","urlEncodedRequest","FormData","currentState","getState","set","appendCommonFormData","qs","CommonUtil","getAuthToken","password","bodyFormData","getLabels","file","language","keyasvalue","getPolicies","acctId","getCodeTypes","codeType","getRates","ratePrimary","rootName","isMultiType","inherit_selection","item_group_id","account_id","rate_is_primary_type","channelid","multi_select","root_name","multi_type","getRatesParent","rate_id","getBarRatesParent","bar_rate","getRateIndexOptions","rate_index","multipleRequestHandler","requestsArray","all","spread","responses","catch","errors","getPropertyInformation","getChannels","includeChildren","parentID","includechildren","parentid","getRateCategories","getCurrencies","require","getCalendarCalculationMethods","getPreferences","tableName","tablename","tableid","getRateSeasons","NumericInput","_props","integerOnly","pattern","event","target","validity","valid","isNaN","NOTIFICATION_PATH","RESTATUS_PATH","ITEM_WIZARD_PATH","RATE_WIZARD_PATH","MASS_UPDATE_PATH","SELECT_AIRPORTS_PATH","UPDATE_AIRPORTS_PATH","RATE_CALENDAR_PATH","RATE_ITEM_SEQUENCING_PATH","RESERVATION_PATH","RESTAURANT_PATH","MEETING_ROOMS_PATH","ATTRACTONS_PATH","PAGE_NOT_FOUND","WEBSERVICE_BASE_URL","process","NOTIFICATION_DISPLAY_BASE_URL","LOGIN_URL","LABEL_WS_BASE_URL","AIRPORTS_BASE_URL","DATE_FORMAT","DISPLAY_DATE_FORMAT","DATE_FORMAT_2","DATE_TIME_FORMAT","TIME_FORMAT_24_HR","MONTH_DATE_YEAR_FORMAT","DISPLAY_DATE_TIME_24_HR_FORMAT","DOW_PATTERN","DEFAULT_PAGE_SIZE","DEFAULT_RATE_ID","DEFAULT_TIMEOUT","REFRESH_INTERVAL_BEFORE_TIMEOUT","GET_CHANNEL_FILTER_RESTATUS_TYPES","NOTIFICATIONS_LABEL_FILE","RESTATUS_LABEL_FILE","ITEM_WIZARD_LABEL_FILE","MASS_UPDATE_LABEL_FILE","RATE_SEQUENCING_LABEL_FILE","GUARANTEE_POLICY_TYPE","CANCEL_POLICY_TYPE","MEAL_PLAN_POLICY_TYPE","COMMISSION_POLICY_TYPE","SELLRULE_DEFAULT_VALUE","GDS_FIELD_MAX_LENGTH","RATE_NAME_MAX_LENGTH","RATE_DESCRIPTION_MAX_LENGTH","YES","NO","OPEN","EMPTY","ZERO","checkModel","ALL","SUNDAY_DOW","MONDAY_DOW","TUESDAY_DOW","WEDNESDAY_DOW","THURSDAY_DOW","FRIDAY_DOW","SATURDAY_DOW","dayList","monthsList","SECTION_HEADER","text","GET_ROW","control","fieldLength","GET_ROW_2","labelLength","labelClassNames","NEW_LINE_SYMBOL","ENTER_SYMBOL","VIRTUAL_CALCULATION_METHODS","BASED_ON_CALCULATION_METHODS","STANDALONE_CALCULATION_METHOD","DATE_TIME_FORMAT_TOKEN_REPLACER_MAP","D","Y","A","DATE_TIME_FORMAT_TOKEN_REPLACER_REG_EXP","DISCARD_WARN","getRateAccessCodes","rateId","iscontract","contractID","parseInt","formdata","append","commonService","getSubchannels","parentchannel","validateRoomCode","roomCodes","detailvaluelist","setValidationError","errorObject","clearValidationError","BuildRatePlan","getLangOptionObj","selectedValue","languageOptions","find","onLanguageChange","isPropertyLevel","loadLabelsAndPaths","onRateWizardDataChange","stateName","newValue","rateData","updateRateWizardData","dateStr","timeStr","date","moment","toDate","preventNavigationIfInvalid","onInterfaceDescriptionChange","interfaceLongDesc","interfaceDescriptionLine1","interfaceDescriptionLine2","interfaceDescriptionLine3","handleDateChange","stateValue","isActiveDate","selectedDate","selectedDateStr","isValid","format","minEndDate","clone","startOf","add","endDateStateName","isBefore","selectedTimeStr","timeStateName","lines","minSellEndDate","minSellBeginDate","subtract","minActiveEndDate","minActiveBeginDate","labelsMap","selectedLang","class","longDesc","rows","interfaceShortDesc","selected","beginSellDate","beginSellTime","isClearable","minDate","timeInputLabel","showTimeInput","endSellDate","endSellTime","disabled","activeBeginDate","activeEndDate","selectedOption","notifyYN","connect","dispatch","fileName","validationErrorObject","loadCommCalcMethodSelect","commonUtil","loadStrikeThruCalcMethodSelect","loadRateIndexOptionsSelect","MarketingMessages","handleDialogClose","onItemChanged","messageIDs","marketingMessageIDs","onSetButtonClick","updatedMessageIDs","search","substring","handleDialogSet","selectedMessageIDs","overflowY","striped","bordered","data","it","description","color","onClick","RateCategories","rateCategoryCodes","updatedRateCategoryCodes","selectedRateCategoryCodes","RateParent","onItemClicked","ratesChecked","ratesExpanded","treeNodes","items","child","recursiveExtractParentRateFoldersOnly","rateWizardUtil","overflowX","nodes","noCascade","expanded","ChildRates","selectedChildRates","onMoveRightClick","rateItemsMoveRight","updatedSelectedItems","updatedRateIndexOptions","childRateIndexOptions","movedElement","isLeftActive","onMoveLeftClick","rateItemsMoveLeft","isRightActive","onMoveAllLeftClick","selectedElement","onItemLeftClicked","onItemRightClicked","selectedChildRateIndexOptions","border","background","outline","marginLeft","align","Controls","loadPolicy","loadPolicies","getPolicyDropDown","updateSelectedPolicy","keyMap","policyKey","policyValue","onCalculationMethodChange","isNewCreatedRate","calculationMethod","sellYN","isCommissionPolicyEnabled","commissionCalculationMethod","isCommissionAmountEnabled","isCommissionPercentageEnabled","isAddingAmountSelected","isSubtractingAmountSelected","isPercentageSelected","isBaseOnRateSelected","isBaseOnBarSelected","isChildRateVisible","onChangeCommissionCalcMethod","commissionAmount","selectedCalcMethods","onAmountChange","isCommission","displayedAmount","emittedAmount","number","numberWithDot","displayedCommissionAmount","displayedCalculationAmount","onRoundingChange","isRoundToDecimal","updatedAmount","intNumber","onMarketingMessagesClick","rateWizardService","marketingMessages","marketing_messages","marketing_message","message","isMarketingMessageDisplayed","onChildRatesClick","isChildRatesDisplayed","onRateCategoriesClick","isRateCategoriesDisplayed","onChooseParentClick","CommonService","rateParentTree","isChooseParentDisplayed","handleMarMessageDialogClose","handleRateCategoriesDialogClose","handleChooseParentsDialogClose","handleChildRatesDialogClose","handleMarketingMessagesSet","selectedMarketingMessageIDs","handleRateCategoriesSet","handleChooseParentSet","selectedCalculationRateID","handleChildRatesSet","updatedList","updatedShortDescList","calculationAmount","barFilter","calculationRateID","loadCommCalcMethod","loadStrikeThruCalcMethod","loadRateIndexOptions","loadRateCalcMethod","disableComponent","enableComponent","strikethroughCalcMethod","currencyCode","roundingSuffix","roundingFactor","isNewRate","selectedCommCalcMethod","selectedRateCalcMethod","selectedstrikethruCalcMethod","selectedCurrencyCode","selectedParentRatesLabel","addonType","rateID","mealPlanIncludedYN","mealPlanAddedYN","autoChooseFirstItemYN","calculationCalendarYN","barYN","RateParents","selectedParentID","Restrictions","toggleRequiresContractFlag","toggleUseContractDescriptionFlag","Contracts","handleOptionChange","genericYN","areContractsEnabled","validateUsedRateConversionCodes","rateConversionCodes","contract_id","isErrorRaised","rateCodeGenerateFromContract","conversionCodeParam","acctID","takencode","Validation","duplicatedCodes","toast","error","duplicatedRateConversionCodes","hasValidRateConversionCodes","contractsWithValidRateConversionCodes","getChannelAccessCodes","accessCode","contractRateConversionCodes","codeValidated","accessCodes","ac","rateConversionCode","rateAccessCode","acCode","accesscode","saveContract","contractRateConversionCodesMap","userId","contracts","contract","warning","savedContract","inactive_yn","mod_user_id","contractObject","contractRateConversionCodeMap","channelAccessCodes","channelsTableData","savedContractsRateConversionCodesMap","contractRateConversionCodesItem","contractsChanged","setRateCategory","alternateRateCategories","ifRateCategoryID","rateCategoriesList","rateCategory","activeContracts","secureRule","isChannelsDataReady","setContract","toggleContract","savedContractRateConversionCodesItem","gds","voice","bookingengine","pms","contractItem","ct","gdsRateCategoryOption","rateCategoryOptions","category","contractOptions","columns","Header","accessor","Cell","original","info","e","getSellRateViaClass","inline","for","isDisabled","showPagination","minRows","wizardData","toggleFlag","flagName","getChannelsData","interfaceRateCodeParams","channelcode","categorycode","roomCodesParams","itemidlist","lItemID","channelCodesParams","request1","err","Promise","resolve","request2","request3","request4","request5","getChannelsInformation","Array","IFRateCode","roomCodeMap","RoomCodes","rawArray","roomCode","channelId","itemId","detailValue","detailvalue","tempSet","Set","reduce","roomCodesMap","uniqueRoomCodeValue","has","processRoomCodes","channelsMap","Channels","channel","channelName","channelname","channelCode","iBEPMSChannelPreference","RateWizardConstants","toggleGDSCheckbox","toggleIBECheckbox","togglePMSCheckbox","modifyChannelFilterData","_channelFilters","channel_id","channelAdded","channelFilters_temp","detail_type","rateCodes","detail_type_name","detail_method","rateCodeMap","channelRateCodesMap","selectedChannel","rateCode","channelFilter","acct_id","table_name","table_id","detail_name","detail_value","begin_date","end_date","short_desc","long_desc","display_short_desc","display_long_desc","extended_long_desc","formCheckboxElements","GDSChannelCheckbox","channelFilters","listChannels","updateChannelFilters","from","channelFiltersArray","OtherChannelCheckbox","pmsChannel","ibeChannel","ibepmsChannel","impactedChannels","AlternateRatesModal","toggle1","aRateCategories","onSave","useState","setAlternateRateCategories","newObj","selectedCategories","selectedGdsRateCategory","selectedAlternateRateCategories","yieldableYN","OverrideRPCModal","tableData","onSaveOverride","roomArray","selectedRateCode","changeRateCode","displayOrderValue","changeDisplayOrder","toUpperCase","GDSChannelListItem","gdsChecked","ibeChecked","pmsChecked","exclusionFilter","conversionChannel","isGDSChannel","isIBEChannel","isPMSChannel","parametersWizardColumns","getParametersWizardColumns","pageSize","validateGDSChannelsRateCodes","gdsChannelsData","isValidConversionsGalileo","isValidConversions3char","filteredChannels","channelData","limittedRateCodeLength","allChannels","pmschannel","ibechannel","channelExist","channel_detail_id","cf","existingRateAccessCodes","inactivatedContractsRateCodes","contractEntry","ratecode","validSelectedItems","room","rooms","roomItem","bookingCode","getChannelsTableData","updateChannelsTableData","selectedChannelIndex","existingChannel","updateChannelFiltersTemp","GDSBuilderForm","isGdsChecked","some","selectedGDSRateCategory","tempCategory","isIBEChecked","isPMSChecked","keys","Parameters","showParametersWizard","parametersWizardVisible","beginDate","parameterName","selectedIndex","onCancel","mandatoryMissingField","parametersRow","toDateString","updateParametersTableData","editChannelParameters","toggleStatus","toggleActiveStatus","handleChannelNameChange","nativeEvent","trim","displayMainBody","whiteSpace","parameterOptions","parameterWizard","channelNameOptions","aria-hidden","parameterTable","getChannelOptions","codetype","getParameterNames","RateLock","PropertyPublish","selectedRateGroup","cancelPolicyValue","guaranteePolicyValue","gtdPolicyID","cancelPolicyID","displayShortDesc","commissionCalculationMethodName","requestXml","saveRateWizard","formatRateWizardToXML","res","success","setTimeout","getElementById","contentWindow","openNode","Status","RateInfo","handleChange","updateParentState","handleStartDateChange","eState","updateSeasonalStartDate","updateSeasonalEndDate","selectedItemsObj","loadRatesData","handleEndDateChange","handleDaySelect","clonedDowMap","JSON","parse","stringify","updateDowMap","daysOfTheWeek","selectedRateCategory","rate","dow","paddingLeft","paddingRight","openToDate","updateSelectedGuaranteePolicy","updateSelectedCancelPolicy","RatesEditableTable","renderEditable","cellInfo","cellContent","column","backgroundColor","contentEditable","suppressContentEditableWarning","onFocus","onBlur","innerHTML","updateRatesData","dangerouslySetInnerHTML","__html","occupancyCount","extraColumns","ref","itemIdList","Requests","request","roomtype","oneadult","rate_one","twoadults","rate_two","threeadults","rate_three","fouradults","rate_four","fiveadults","rate_five","sixadults","rate_six","sevenadults","rate_seven","eightadults","rate_eight","nineadults","rate_nine","tenadults","rate_ten","extraadult","extra_adult","onechild","extra_child","RatesDisplayTable","Rates","getOccupancyCount","maxQuantityPerRateRequest","maxOcc","maxQuantity","maxOccupancy","min","saveRateItems","updateRateItems","clearRatesData","loadGuaranteePolicies","loadCancelPolicies","isSame","confirmMessage","yesHandler","modifiedRatesData","dayName","newRateItemsDisplay","singleRateData","newRateItemElement","itemID","day1","day2","day3","day4","day5","day6","day7","extraAdultCharge","extraChildCharge","rateRequests","sun","mon","tue","wed","thu","fri","sat","guarantee","cancel","startdate","enddate","concat","isStandardRate","rateRequest","lAcctID","removeYN","calMethod","deleteRateRequest","updatedRateItems","rateItem","pop","RoomOptionSelect","roomOptionOnChange","roomOptionSelectChanged","RoomTypes","partialPayload","lItemGroupID","lRateID","lPromotionID","szAllowSaleYN","rateItemsMap","originalRateItems","lRateItemID","rateItemsArray","updatedRateWizardData","updateSelectedItems","currentTarget","changeSelectedRoomOption","getRoomTypesTree","getChildrenNodes","node","childItems","checkBoxTreeOnCheck","targetNode","checkBoxTreeOnExpand","updateExpandedItems","orgRateItems","onCheck","onExpand","getParsedRateWizardData","RatePlan","Rate","ChannelFilter","channelFilterObj","getObjectWithField","parsedRateData","RateItem","parsedContractsData","orgChannelFilters","orgContracts","getParsedPreferences","getObjectsWithTypeAndValue","object","objectWithAttr","objectArr","parsedObject","Map","extractItems","isRateParentTree","showCheckbox","getAllItemValues","values","buildItemsMap","buildRateCategoryMap","getRateWizardPaths","component","Completion","buildRateAccessCodesMap","buildRateAccessCodesMapForContract","accesscodes","buildCurrenciesMap","shortDescription","result","allResults","channelNamesMap","returnValue","getFormattedDataForObject","attrs","calculationMaximum","calculationMinimum","formattedRateData","formattedRateItems","requestItem","latestChannelFilters","updatedChannelFilters","otherChannels","channelMapItem","builtChannelFilters","conversionChannels","filteredChannel","conversionChannels_org","filteredChannel_org","newChannel","inactivatedContracts","isInactivated","contractIDs","conversionChannel_org","formattedChannelFilters","updatedContracts","formattedContracts","jsontoxml","escape","loadRateWizardData","sessionuserid","loadPreferences","setLabelsMapAndPaths","changeSelectedMenuIndex","indexToSelect","loadRateCategories","loadRateAccessCodes","loadCurrencies","rateIsPrimaryType","isChainLevel","chain_level","loadItemsTree","loginInterval","extractedItems","login","saveAuthInfoAndSetInterval","interval","parameters","parameter","parseFloat","setInterval","PageNotFound","cellpadding","cellspacing","valign","noshade","face","generateToken","location","Route","renderProps","RateWizard","lazy","NotificationForm","RestatusForm","ItemWizard","MassUpdate","SelectAirports","UpdateAirports","RateCalendar","RateSequencing","InternetBookingEngine","Restaurant","MeetingRooms","Attractions","parseString","FontAwesome","App","hideLoader","Loader","basename","fluid","Suspense","fallback","moduleLoading","Switch","exact","path","_Loader","interceptors","use","startLoading","isError","endLoading","reject","isLoading","spin","textShadow","Boolean","hostname","querySelector","classList","navigator","serviceWorker","ready","registration","unregister","loadGuaranteeSelect","loadCancelSelect","loadSelect"],"mappings":"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","file":"static/js/main.ec6e2373.chunk.js","sourcesContent":["/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { Col, FormGroup, FormFeedback, Input, Label } from \"reactstrap\";\nimport React from \"react\";\nimport Select from \"react-select\";\nimport { NULL_LONG, UNDEFINED_VALUE } from \"./Constants\";\nimport * as ReactDOM from \"react-dom\";\n\nexport function getLabelMapFromResponse(response, keyAsValueFlag) {\n let labelMap = {};\n\n if (response.label) {\n if (keyAsValueFlag) {\n response.label.forEach(label => {\n labelMap[label.key] = label.value;\n });\n } else {\n response.label.forEach(label => {\n labelMap[label.$.name] = label._;\n });\n }\n }\n\n return labelMap;\n}\n\nexport function getPolicyOptions(response, nullLabel) {\n let options = response.types[0].policy.map(policy => {\n return {\n value: policy.code[0],\n label: policy.dispval[0]\n };\n });\n\n options.unshift({ value: NULL_LONG, label: nullLabel });\n options = options.filter(policyOption => policyOption.label !== null);\n\n return options;\n}\n\n/*\n Function to extract rates and items from the RatesAndRateItems webservice call\n @param - parsed response from RatesAndRateItemsXML webservice call, rates or items tree\n and if parent is included\n @return - a map of items for the checkboxtree\n */\nexport function extractRatesAndItems(response, isRates, parentIncluded) {\n let ratesItems = [];\n response.folder.forEach(folder => {\n ratesItems.push(extractFolder(folder.$.acctid, folder, isRates, parentIncluded));\n });\n\n return ratesItems;\n}\n\n// Get ids of room types which have children using recursive\nexport function extractParentRoomTypes(roomTypes) {\n let parentRoomTypes = [];\n roomTypes.forEach(roomType => {\n if (roomType.children && roomType.children.length > 0) {\n parentRoomTypes.push(roomType.value);\n let parentNodes = extractParentRoomTypes(roomType.children);\n parentNodes.forEach(parent => parentRoomTypes.push(parent));\n }\n });\n\n return parentRoomTypes;\n}\n\nexport function extractChannels(response) {\n let channels = [];\n response.folder.forEach(folder => {\n channels.push(extractChannelFolder(folder));\n });\n\n return channels;\n}\n\nfunction extractChannelFolder(folder) {\n let folderValue = folder.$.itemid ? folder.$.itemid : \"\";\n let folderLabel = folder.label[0];\n let children = [];\n if (folder.folder) {\n folder.folder.forEach(subFolder => {\n children.push(extractChannelFolder(subFolder));\n });\n }\n if (children.length === 0) {\n if (folder.$.isBranch === \"true\") {\n return { id: folderValue, name: folderLabel, children: [] };\n }\n return { id: folderValue, name: folderLabel };\n }\n return { id: folderValue, name: folderLabel, children: children };\n}\n\n/*\n Function to create the map for checkboxtree\n - recursively called to create a map\n - value in format ::, is only ever 3 entries long. \n If items tree and parent included, the value will be in format ::\n - map looks like: {value:\"value\",\"label\":\"label\",children:array of more value/labels}\n - example:\n {\n value: \"value\",\n label: \"label\",\n children:\n [\n {\n label: \"label\",\n value: \"value\",\n children: []\n },\n {\n label: \"label\",\n value: \"value\",\n children:\n [\n label: \"label\",\n value: \"value\",\n children: []\n ]\n }\n ]\n }\n */\nfunction extractFolder(value, folder, isRates, parentIncluded) {\n let folderValue = folder.$.itemid ? folder.$.itemid + \":\" + value : value;\n let folderValAry = folderValue.split(\":\");\n if (folderValAry.length > 3) {\n folderValAry.splice(2, 1);\n folderValue = folderValAry.join(\":\");\n }\n let folderLabel = folder.currency ? folder.label + \"(\" + folder.currency + \")\" : folder.label.toString();\n let children = [];\n if (folder.folder) {\n folder.folder.forEach(subFolder => {\n children.push(extractFolder(folderValue, subFolder, isRates, parentIncluded));\n });\n }\n if (children.length === 0) {\n // RVNG-6306: swap itemid and parentid if items is checked\n if (!isRates && parentIncluded) {\n let tokens = folderValue.split(\":\");\n if (tokens.length > 2) {\n [tokens[0], tokens[1]] = [tokens[1], tokens[0]];\n folderValue = tokens.join(\":\");\n }\n }\n return { value: folderValue, label: folderLabel };\n }\n return { value: folderValue, label: folderLabel, children: children };\n}\n\nexport function getLabelOrTextField(value, onChangeHandler, isReadOnly, isTextArea, maxLength) {\n if (isReadOnly) {\n return ;\n } else {\n let type = isTextArea ? \"textarea\" : \"text\";\n return ;\n }\n}\n\nexport function getLabelOrSelect(valueObj, onChangeHandler, options, isReadOnly) {\n if (isReadOnly) {\n return ;\n } else {\n return ;\n }\n}\n\nexport function escapeNewLineCharacters(str) {\n return (\"\" + str).replace(/\\r/g, \" \").replace(/\\n/g, \" \");\n}\n\nexport function getCodeTypesFromResponse(response, valuesToBeIgnored, nullLabel) {\n let options = [];\n response.types[0].type.forEach(type => {\n if (!valuesToBeIgnored || (valuesToBeIgnored && valuesToBeIgnored.indexOf(type.codevalue[0]) === -1)) {\n options.push({ value: type.codevalue[0], label: type.shortdesc[0] });\n }\n });\n if (nullLabel) {\n options.unshift({ value: NULL_LONG, label: nullLabel });\n }\n return options;\n}\n\nexport function getRateIndexOptionsFromResponse(response) {\n let options = [];\n response.RateIndexOptions &&\n response.RateIndexOptions.forEach(rateIndexOption => {\n rateIndexOption.RateIndexOption.forEach(option => {\n options.push({ rateid: option.rateid[0], shortDesc: option.shortdesc[0] });\n });\n });\n\n return options;\n}\n\nexport function buildSelectedChildRateIndexOptions(childRateList, childShortDescRateList) {\n let options = [];\n let selectedChildRatesList = [];\n let selectedChildRatesShortDescList = [];\n\n if (!childRateList || !childShortDescRateList) return options;\n\n if (childRateList.length > 0) {\n selectedChildRatesList = childRateList.split(\",\");\n }\n\n if (childShortDescRateList.length > 0) {\n selectedChildRatesShortDescList = childShortDescRateList.split(\",\");\n }\n\n for (var i = 0; i < selectedChildRatesList.length; i++) {\n if (selectedChildRatesShortDescList[i]) {\n options.push({ rateid: selectedChildRatesList[i], shortDesc: selectedChildRatesShortDescList[i] });\n }\n }\n\n return options;\n}\n\nexport function getDisplayedNumberAmount(amount, isPercentage) {\n let displayValue = amount;\n\n if (amount === UNDEFINED_VALUE) {\n // Display 0 as default value\n displayValue = 0;\n }\n\n // RVNG-6795: convert float to integer if need (.i.e. 26.0 -> 26 but keep 26.1 as 26.1)\n displayValue = Number(displayValue);\n\n if (isPercentage && amount) {\n // RVNG-6795: Avoid rounding issue where 1.11*100 = 111 can become 111.00000000000001\n displayValue = Math.round(displayValue * 100 * 1000000) / 1000000;\n }\n\n return displayValue;\n}\n\nexport function getTextField(\n label,\n value,\n onChangeHandler,\n isMandatory,\n isInvalid,\n validationMessage,\n maxLength,\n labelColumnWidth,\n textColumnWidth,\n widthProp\n) {\n const MANDATORY_SYMBOL = *;\n const defaultValidationMessage = \"Field is required\";\n let labelColumnSize = labelColumnWidth ? labelColumnWidth : 4;\n let textColumnSize = textColumnWidth ? textColumnWidth : 8;\n return (\n \n \n \n \n {validationMessage ? validationMessage : defaultValidationMessage}\n \n \n );\n}\n\nexport function genericFieldContainer(\n label,\n field,\n isMandatory,\n isInvalid,\n columnSize,\n validationMessage,\n labelColumnWidth,\n widthProp\n) {\n const MANDATORY_SYMBOL = *;\n let labelColumnSize = labelColumnWidth ? labelColumnWidth : 4;\n let textColumnSize = columnSize ? columnSize : 8;\n const defaultValidationMessage = \"Field is required\";\n return (\n \n \n \n {field}\n {isMandatory && (\n \n \n {validationMessage ? validationMessage : defaultValidationMessage}\n \n )}\n \n \n );\n}\n\nexport function buildDataObjectFromFormData(formData) {\n var dataObject = {};\n formData.forEach((value, key) => {\n dataObject[key] = value;\n });\n return dataObject;\n}\n\nexport function addScrollEffectToHeaderWithBody(dataTableElement) {\n let theads = ReactDOM.findDOMNode(dataTableElement).getElementsByClassName(\"rt-thead\");\n let tbody = ReactDOM.findDOMNode(dataTableElement).getElementsByClassName(\"rt-tbody\")[0];\n tbody.addEventListener(\"scroll\", () => {\n for (let i = 0; i < theads.length; i++) {\n theads.item(i).scrollLeft = tbody.scrollLeft;\n }\n });\n}\n\nexport const isDisplayErrorPopupMsg = ({ errorCode, errorMessage, response }) => {\n // Specific fix for RVNG-6823\n if (errorCode === \"NOT-FOUND\" && errorMessage === \"No policy found.\") {\n return false;\n } else if (errorCode === \"SQL-ERROR\") {\n // SQL ERROR Messages should not be displayed as a pop-up.\n return false;\n }\n if (response?.config?.params?.servicename === \"gcXMLGetApplicationData\") {\n return false;\n }\n if (response?.config?.params?.servicename?.includes(\"gcXMLGetCalendar\")) {\n return false;\n }\n return true;\n};\n\nexport const modifyInterceptedResponse = (response, interceptedResponse) => {\n if (response?.config?.params?.servicename?.includes(\"gcXMLGetApplicationData\")) {\n return \"No Data Found\";\n }\n return interceptedResponse;\n};\n\nexport const extractChildAgeRanges = response => {\n const childAgeRangeXML = response.account[0].preferences[0].preference.filter(preference => {\n return preference.$.type === \"CHILD_AGE_RANGE_XML\";\n });\n\n let parser = new DOMParser();\n\n let childAgeRanges;\n if (childAgeRangeXML[0]._ !== undefined) {\n let doc = parser.parseFromString(childAgeRangeXML[0]._, \"application/xml\");\n childAgeRanges = [...doc.getElementsByTagName(\"age\")].map(age => {\n return {\n range: age.getAttribute(\"range\"),\n low: age.getAttribute(\"low\"),\n high: age.getAttribute(\"high\")\n };\n });\n }\n return childAgeRanges;\n};\n\nexport const isValidEmail = email => {\n let mailFormat = /^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,15})$/;\n if (email.match(mailFormat)) {\n return true;\n }\n return false;\n};\n\nexport const isValidPhoneNumber = phoneNumber => {\n let phoneNumberFormat = /^[+]?[\\s./0-9]*[(]?[0-9]{1,4}[)]?[-\\s./0-9]*$/;\n if (phoneNumber.match(phoneNumberFormat)) {\n return true;\n }\n return false;\n};\n\n// The expiry date should be from the month of the arrival onwards\nexport const isValidCreditCardExpiration = (ccExpMonth, ccExpYear, arrival) => {\n let arrivalDate = new Date(arrival);\n let arrivalMonth = arrivalDate.getMonth() + 1; // month is zero based\n let arrivalYear = arrivalDate.getFullYear();\n if ((arrivalMonth <= ccExpMonth && arrivalYear === ccExpYear) || arrivalYear < ccExpYear) {\n return true;\n }\n return false;\n};\n\nexport const getDatesBetweenDates = (startDate, endDate) => {\n let dates = [];\n //to avoid modifying the original date\n const theDate = new Date(startDate);\n while (theDate < endDate) {\n dates = [...dates, new Date(theDate)];\n theDate.setDate(theDate.getDate() + 1);\n }\n return dates;\n};\n\nexport const convertDateFormat = (dateFormat, regEx, replacerMap) => {\n let modifiedDateFormat = dateFormat;\n return modifiedDateFormat.replace(regEx, matched => replacerMap[matched]);\n};\n\nexport const selectElementContents = (element) => {\n var range = document.createRange();\n range.selectNodeContents(element);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n};","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from \"react\";\nimport { Modal, ModalBody, ModalFooter, ModalHeader, Container } from \"reactstrap\";\n\nexport class ModalComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = { isOpen: false };\n }\n\n toggle = () => {\n this.setState({ isOpen: !this.state.isOpen });\n };\n\n render() {\n return (\n \n \n {this.props.header}\n \n {this.props.render(this.toggle)}\n \n {this.props.footer}\n \n \n );\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\n// RoomTypes constants\nexport const ROOM_OPTION_SELECT_ALL = \"all\";\nexport const ROOM_OPTION_SELECT_SOME = \"selected\";\n\nexport const FILTERED_RATE_ITEMS = [\"0\", \"-999\"];\n\nexport const RATE_WIZARD_LABEL_FILE = \"flex_ratewizard.txt\";\n\nexport const DEFAULT_MENU_INDEX = 2; // default menu index for Rate Wizard\n\nexport const GDS_GALILEO_CHANNELS = 5;\nexport const GDS_CHANNELS = [190, 184, 5, 4, 6];\nexport const GDS_CHANNELS_MAP = {\"ADS\": 190, \"Amadeus\": 184, \"Galileo\": 5, \"Sabre\": 4, \"Worldspan\": 6};\n//\"ADS\", \"GALILEO\", \"WORLDSPAN\", \"AMADEUS\", \"EAP\", \"SABRE\"\nexport const GDS_CHANNELS_CODES = [\"WB\", \"UA\", \"1P\", \"1A\", \"EAP\", \"AA\"];\n\nexport const digitToWordMap = { 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten'};\n// rate categories need contract associated\nexport const REQUIRED_CONTRACT_RATE_CATEGORIES = ['NEG', 'CNS'];\n\nexport const MAX_ADULTS_NUMBER = 10;\nexport const CALCULATION_AMOUNT_MAXLENGTH = 4;\nexport const ROUNDING_NEAREST_MAXLENGTH = 2;\nexport const ROUNDING_DECIMAL_MAXLENGTH = 3;\nexport const GALILEO_RATECODE_MAXLENGTH = 4;\nexport const OTHER_GDS_RATECODE_MAXLENGTH = 3;\n\nexport const GDS_RATECODE_LENGTH_ERROR = \"Rate conversion codes for ADS, Amadeus, Worldspan and Sabre must contain 3 characters. \" +\n\t\t\t\"Codes that do not meet this criteria will render the rate invalid. Click on �Override RPC� to update the code for a channel.\";\n\t\t\nexport const GALILEO_RATECODE_LENGTH_ERROR = \"Rate conversion codes for Galileo must contain up to 4 characters. \" +\n\t\t\t\"Codes that do not meet this criteria will render the rate invalid. Click on �Override RPC� to update the code for a channel.\";\nexport const IBE_CHANNEL = \"HOTEL_CHANNEL_IBE\";\nexport const PMS_CHANNEL = \"HOTEL_CHANNEL_PMS\";\nexport const IBE_ID = 3;\nexport const PMS_ID = 186;","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { START_DATA_LOAD, END_DATA_LOAD } from \"../actionTypes\";\n\nconst initialState = {\n loadingCount: 0\n};\n\n//Reducer for managing the data for loader.\nexport default function(state = initialState, action) {\n switch (action.type) {\n case START_DATA_LOAD:\n return { loadingCount: state.loadingCount + 1 };\n\n case END_DATA_LOAD:\n return { loadingCount: state.loadingCount - 1 };\n\n default:\n return state;\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { SAVE_AUTH_INFO } from \"../actionTypes\";\n\nconst initialState = {\n token: \"\",\n username: \"\"\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case SAVE_AUTH_INFO:\n return { username: action.username, token: action.token };\n\n default:\n return state;\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport * as rateWizardConstants from \"../../../rate-wizard/RateWizardConstants\";\nimport * as Constants from \"../../../common/Constants\";\n\nimport {\n LOAD_RATE_WIZARD_DATA,\n UPDATE_RATE_WIZARD_DATA,\n LOAD_PREFERENCES,\n LOAD_ITEMS_TREE,\n CHANGE_SELECTED_ROOM_OPTION,\n CHANGE_SELECTED_ITEMS,\n CHANGE_EXPANDED_ITEMS,\n LOAD_RATE_WIZARD_LABELS,\n CHANGE_SELECTED_MENU_INDEX,\n CHANGE_SEASONAL_START_DATE,\n CHANGE_SEASONAL_END_DATE,\n LOAD_GUARANTEE_SELECT,\n UPDATE_GUARANTEE_POLICY,\n LOAD_CANCEL_SELECT,\n UPDATE_CANCEL_POLICY,\n UPDATE_RATES_DATA,\n UPDATE_RATE_ITEMS,\n UPDATE_DOW_MAP,\n LOAD_RATE_CATEGORIES,\n LOAD_RATE_ACCESS_CODES,\n SET_RATE_WIZARD_VALIDATION_ERROR,\n CLEAR_RATE_WIZARD_VALIDATION_ERROR,\n TOGGLE_REQUIRES_CONTRACT_FLAG,\n TOGGLE_USE_CONTRACT_DESCRIPTION_FLAG,\n LOAD_COMM_CALC_METHOD,\n LOAD_RATE_CALC_METHOD,\n LOAD_STRIKE_CALC_METHOD,\n LOAD_RATE_INDEX_OPTIONS,\n LOAD,\n UPDATE,\n LOAD_CURRENCIES,\n UPDATE_PARAMETERS_TABLE_DATA,\n TOGGLE_PARAMETERS_STATUS,\n LOAD_CHANNELS_DATA,\n DELETE_RATE_REQUEST,\n TOGGLE_GDS_CHECKBOX,\n TOGGLE_IBE_CHECKBOX,\n TOGGLE_PMS_CHECKBOX\n} from \"../actionTypes\";\nimport { convertDateFormat } from \"../../CommonUtil\";\n\nconst initialState = {\n rateWizardData: \"\",\n userPreferences: \"\",\n accountPreferences: \"\",\n dateDisplayFormat: \"\",\n dateTimeDisplayFormat: \"\",\n dateInputFormat: \"\",\n dateTimeInputFormat: \"\",\n itemsTreeNodes: [],\n selectedItems: [],\n itemsTreeExpanded: [],\n itemsTreeDisabled: false,\n selectedRoomOption: rateWizardConstants.ROOM_OPTION_SELECT_SOME,\n labelMap: {},\n rateWizardPaths: [],\n selectedMenuIndex: 0,\n seasonalStartDate: null,\n seasonalEndDate: null,\n guaranteePolicyOptions: [],\n selectedGuaranteePolicy: null,\n cancelPolicyOptions: [],\n selectedCancelPolicy: null,\n ratesData: [],\n itemsMap: {},\n itemsOrder: [],\n dowMap: {\n Sun: Constants.YES,\n Mon: Constants.YES,\n Tue: Constants.YES,\n Wed: Constants.YES,\n Thu: Constants.YES,\n Fri: Constants.YES,\n Sat: Constants.YES\n },\n rateItems: {},\n rateItemsDisplay: [],\n rateCategoryMap: {},\n validatationErrorObject: \"\",\n requiresContract: false,\n useContractDescription: false,\n gdsRateCategory: \"\",\n selectedContract: \"\",\n isGenericRateSelected: \"no\",\n savedContracts: [],\n selectedPolicy: {},\n policyOptions: {},\n commCalcMethodOptions: [],\n rateCalcMethodOptions: [],\n strikeThruCalcMethodOptions: [],\n rateIndexOptions: [],\n currencies: [],\n parametersTableData: [],\n channelsData: {},\n isGDSSelected: true,\n isIBESelected: true,\n isPMSSelected: true\n};\n\nexport default function(state = initialState, action) {\n let selectedPolicy = Object.assign({}, state.selectedPolicy);\n let policyOptions = Object.assign({}, state.policyOptions, state.cancelPolicyOptions);\n\n if (action.type.startsWith(LOAD)) {\n // in case a policy is loaded\n policyOptions[action.policyType] = action.policyOptions;\n selectedPolicy[action.policyType] = action.selectedPolicy;\n return Object.assign({}, state, {\n policyOptions: policyOptions,\n selectedPolicy: selectedPolicy\n });\n } else if (action.type.startsWith(UPDATE)) {\n // In case a policy is updated\n selectedPolicy[action.policyType] = action.selectedPolicy;\n return Object.assign({}, state, {\n selectedPolicy: selectedPolicy\n });\n } else {\n switch (action.type) {\n case LOAD_RATE_WIZARD_DATA:\n return { ...state, rateWizardData: action.response };\n\n case LOAD_PREFERENCES:\n return action.isUser\n ? {\n ...state,\n userPreferences: action.response,\n dateDisplayFormat:\n action.response && action.response.get(\"DEF_DATE_FORMAT\")\n ? action.response.get(\"DEF_DATE_FORMAT\")\n : Constants.DISPLAY_DATE_FORMAT,\n dateTimeDisplayFormat:\n action.response && action.response.get(\"DEF_DATETIME_FORMAT\")\n ? action.response.get(\"DEF_DATETIME_FORMAT\")\n : Constants.DISPLAY_DATE_TIME_24_HR_FORMAT,\n dateInputFormat: convertDateFormat(\n action.response && action.response.get(\"DEF_IPT_DATE_FMT\")\n ? action.response.get(\"DEF_IPT_DATE_FMT\")\n : Constants.DATE_FORMAT,\n Constants.DATE_TIME_FORMAT_TOKEN_REPLACER_REG_EXP,\n Constants.DATE_TIME_FORMAT_TOKEN_REPLACER_MAP\n ),\n dateTimeInputFormat: convertDateFormat(\n action.response && action.response.get(\"DEF_IPT_DATETIME_FMT\")\n ? action.response.get(\"DEF_IPT_DATETIME_FMT\")\n : Constants.DATE_TIME_FORMAT,\n Constants.DATE_TIME_FORMAT_TOKEN_REPLACER_REG_EXP,\n Constants.DATE_TIME_FORMAT_TOKEN_REPLACER_MAP\n )\n }\n : { ...state, accountPreferences: action.response };\n case LOAD_ITEMS_TREE:\n return Object.assign({}, state, {\n itemsTreeNodes: action.itemsTreeNodes,\n itemsMap: action.itemsMap,\n itemsOrder: action.itemsOrder,\n itemsTreeDisabled: action.itemsTreeDisabled\n });\n case CHANGE_SELECTED_ROOM_OPTION:\n return Object.assign({}, state, {\n selectedRoomOption: action.selectedRoomOption\n });\n case CHANGE_SELECTED_ITEMS:\n return Object.assign({}, state, {\n selectedItems: action.selectedItems\n });\n case CHANGE_EXPANDED_ITEMS:\n return Object.assign({}, state, {\n itemsTreeExpanded: action.itemsTreeExpanded\n });\n case LOAD_RATE_WIZARD_LABELS:\n return Object.assign({}, state, {\n labelMap: action.labelMap,\n rateWizardPaths: action.rateWizardPaths\n });\n case CHANGE_SELECTED_MENU_INDEX:\n return Object.assign({}, state, {\n selectedMenuIndex: action.selectedMenuIndex\n });\n case CHANGE_SEASONAL_START_DATE:\n return Object.assign({}, state, {\n seasonalStartDate: action.seasonalStartDate\n });\n case CHANGE_SEASONAL_END_DATE:\n return Object.assign({}, state, {\n seasonalEndDate: action.seasonalEndDate\n });\n case LOAD_GUARANTEE_SELECT:\n return Object.assign({}, state, {\n guaranteePolicyOptions: action.guaranteePolicyOptions,\n selectedGuaranteePolicy: action.selectedGuaranteePolicy\n });\n case UPDATE_GUARANTEE_POLICY:\n return Object.assign({}, state, {\n selectedGuaranteePolicy: action.selectedGuaranteePolicy\n });\n case LOAD_CANCEL_SELECT:\n return Object.assign({}, state, {\n cancelPolicyOptions: action.cancelPolicyOptions,\n selectedCancelPolicy: action.selectedCancelPolicy\n });\n case UPDATE_CANCEL_POLICY:\n return Object.assign({}, state, {\n selectedCancelPolicy: action.selectedCancelPolicy\n });\n case UPDATE_RATES_DATA:\n return Object.assign({}, state, {\n ratesData: action.ratesData\n });\n case UPDATE_RATE_ITEMS:\n return Object.assign({}, state, {\n rateItems: action.rateItems,\n rateItemsDisplay: action.rateItemsDisplay,\n rateWizardData: { ...state.rateWizardData, ...{ rateItems: action.rateWizardRateItems } }\n });\n case DELETE_RATE_REQUEST:\n return Object.assign({}, state, {\n rateWizardData: { ...state.rateWizardData, ...{ rateItems: action.rateWizardRateItems } }\n });\n case UPDATE_DOW_MAP:\n return Object.assign({}, state, {\n dowMap: action.dowMap\n });\n case LOAD_RATE_CATEGORIES:\n return Object.assign({}, state, {\n rateCategoryMap: action.rateCategoryMap\n });\n case LOAD_COMM_CALC_METHOD:\n return {\n ...state,\n commCalcMethodOptions: action.commCalcMethodOptions\n };\n case LOAD_RATE_CALC_METHOD:\n return {\n ...state,\n rateCalcMethodOptions: action.rateCalcMethodOptions\n };\n case LOAD_STRIKE_CALC_METHOD:\n return {\n ...state,\n strikeThruCalcMethodOptions: action.strikeThruCalcMethodOptions\n };\n case LOAD_RATE_INDEX_OPTIONS:\n return {\n ...state,\n rateIndexOptions: action.rateIndexOptions\n };\n case LOAD_RATE_ACCESS_CODES:\n return Object.assign({}, state, {\n rateAccessCodes: action.rateAccessCodes\n });\n case SET_RATE_WIZARD_VALIDATION_ERROR:\n return Object.assign({}, state, {\n validatationErrorObject: action.validatationErrorObject\n });\n case CLEAR_RATE_WIZARD_VALIDATION_ERROR:\n return Object.assign({}, state, {\n validatationErrorObject: \"\"\n });\n case TOGGLE_REQUIRES_CONTRACT_FLAG:\n return Object.assign({}, state, {\n requiresContract: !state.requiresContract\n });\n case TOGGLE_USE_CONTRACT_DESCRIPTION_FLAG:\n return Object.assign({}, state, {\n useContractDescription: !state.useContractDescription\n });\n case UPDATE_RATE_WIZARD_DATA:\n let rateWizardData = Object.assign({}, state.rateWizardData, action.rateWizardData);\n return { ...state, rateWizardData: rateWizardData };\n\n case LOAD_CURRENCIES:\n return { ...state, currencies: action.currencies };\n\n case UPDATE_PARAMETERS_TABLE_DATA:\n return Object.assign({}, state, { parametersTableData: action.parametersTableData });\n case TOGGLE_PARAMETERS_STATUS:\n let parametersTableData = state.parametersTableData.map((param, index) => {\n if (index !== action.index) {\n return param;\n }\n return Object.assign({}, param, { active: !param.active });\n });\n return Object.assign({}, state, { parametersTableData });\n case LOAD_CHANNELS_DATA:\n return Object.assign({}, state, { channelsData: action.payload });\n case TOGGLE_GDS_CHECKBOX:\n return Object.assign({}, state, { isGDSSelected: action.isGDSSelected });\n case TOGGLE_IBE_CHECKBOX:\n return Object.assign({}, state, { isIBESelected: action.isIBESelected });\n case TOGGLE_PMS_CHECKBOX:\n return Object.assign({}, state, { isPMSSelected: action.isPMSSelected });\n default:\n return state;\n }\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { combineReducers } from \"redux\";\nimport loader from \"./loader\";\nimport auth from \"./auth\";\nimport rateWizard from \"./rateWizard\";\n\nexport default combineReducers({ loader, auth, rateWizard });\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { createStore, applyMiddleware } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport rootReducer from \"./reducers\";\n\nconst store = createStore(rootReducer, applyMiddleware(thunk));\n\nexport default store;\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport axios from \"axios\";\nimport * as Constants from \"../Constants\";\nimport store from \"../redux/store\";\nimport * as qs from \"query-string\";\nimport * as CommonUtil from \"../CommonUtil\";\n\nrequire(\"formdata-polyfill\");\n\nfunction appendCommonFormData(formData) {\n let currentState = store.getState();\n formData.set(\"username\", currentState.auth.username);\n formData.set(\"token\", currentState.auth.token);\n return formData;\n}\n\nexport function get(url, params, ignoreCommonParams) {\n return axios.get(url, { params: params }).then(response => {\n return response;\n });\n}\n\nexport function post(url, params, json, ignoreCommonFormData, urlEncodedRequest) {\n let formData = json ? json : new FormData();\n if (!ignoreCommonFormData) {\n appendCommonFormData(formData);\n }\n\n // Sending the result of qs.stringify will set the content type to application/x-www-form-urlencoded instead of multipart/form-data\n // In RVNG the character encoding is not taken into account when retrieving the parameters of a multipart/form-data request\n return axios\n .post(url, urlEncodedRequest ? qs.stringify(CommonUtil.buildDataObjectFromFormData(formData)) : formData, { params: params })\n .then(response => {\n return response;\n });\n}\n\nexport function put(url, params, json) {\n return axios.put(url, json, { params: params }).then(response => {\n return response;\n });\n}\n\nexport function getAuthToken(username, password) {\n let bodyFormData = new FormData();\n bodyFormData.set(\"username\", username);\n bodyFormData.set(\"password\", password);\n\n return post(Constants.LOGIN_URL, {}, bodyFormData, true);\n}\n\nexport function getLabels(file, keyAsValueFlag, language) {\n let url = Constants.LABEL_WS_BASE_URL;\n\n let params = {\n file: file,\n keyasvalue: keyAsValueFlag,\n language: language\n };\n\n return post(url, params, null);\n}\n\n// TODO: add language support\nexport function getPolicies(acctId, policyType) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = {\n servicename: \"gcXMLGetPolicy\",\n acctid: acctId,\n policy: policyType\n };\n\n return post(url, params);\n}\n\nexport function getCodeTypes(codeType) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLGetCodeType\" };\n let formData = new FormData();\n formData.set(\"codetype\", codeType);\n return post(url, params, formData);\n}\n\nexport function getRates(ratePrimary, acctId, rootName, isMultiType) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = {\n servicename: \"gcXMLRatesAndRateItems\",\n inherit_selection: \"Y\",\n acctid: acctId,\n item_group_id: 1,\n account_id: acctId,\n rate_is_primary_type: ratePrimary ? \"Y\" : \"N\",\n channelid: 0,\n multi_select: \"Y\",\n root_name: rootName,\n multi_type: isMultiType ? \"Y\" : \"N\"\n };\n\n return post(url, params, null);\n}\n\nexport function getRatesParent(acctId, rateid) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = {\n servicename: \"gcXMLGetWizardTree\",\n acctid: acctId,\n rate_id: rateid,\n item_group_id: 1,\n multi_type: \"N\",\n rate_is_primary_type: \"Y\",\n multi_select: \"N\",\n inherit_selection: \"N\",\n channelid: 0,\n root_name: \"Room Types\"\n };\n\n return post(url, params, null);\n}\n\nexport function getBarRatesParent(acctId, rateid) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = {\n servicename: \"gcXMLGetWizardTree\",\n bar_rate: \"Y\",\n rate_is_primary_type: \"Y\",\n item_group_id: 1,\n inherit_selection: \"N\",\n multi_type: \"N\",\n multi_select: \"N\",\n channelid: 0,\n acctid: acctId,\n rate_id: rateid,\n root_name: \"Rates\"\n };\n\n return post(url, params, null);\n}\n\nexport function getRateIndexOptions(acctId, rateid) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = {\n servicename: \"gcXMLGetWizardTree\",\n acctid: acctId,\n item_group_id: 1,\n multi_type: \"N\",\n rate_is_primary_type: \"Y\",\n multi_select: \"N\",\n inherit_selection: \"N\",\n rate_id: rateid,\n channelid: 0,\n rate_index: \"Y\",\n root_name: \"Room Types\"\n };\n\n return post(url, params, null);\n}\n\n/*\n** Use to fire multiple requests. \nEach request should be an axios method.\nconst requestOne = axios.get(url1);\nconst requestTwo = axios.get(url2);\nconst requestThree = axios.get(url3);\naxios.all([requestOne, requestTwo, requestThree]).then(axios.spread((...responses) => {\n const responseOne = responses[0]\n const responseTwo = responses[1]\n const responesThree = responses[2]\n // use/access the results \n})).catch(errors => {\n // react on errors.\n})\n*/\nexport function multipleRequestHandler(requestsArray) {\n return axios\n .all(requestsArray)\n .then(\n axios.spread((...responses) => {\n return responses;\n })\n )\n .catch(errors => {\n return errors;\n });\n}\n\nexport function getPropertyInformation(acctId) {\n let url = Constants.WEBSERVICE_BASE_URL;\n\n let params = {\n servicename: \"gcXMLPropertyInformation\",\n acctid: acctId\n };\n\n return post(url, params);\n}\n\nexport function getChannels(acctid, includeChildren, parentID) {\n let url = Constants.WEBSERVICE_BASE_URL;\n\n let params = {\n servicename: \"gcXMLGetChannels\",\n acctid,\n includechildren: includeChildren ? \"Y\" : \"N\",\n parentid: parentID ? parentID : \"\"\n };\n\n return post(url, params);\n}\n\nexport function getRateCategories() {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLGetRateCategories\" };\n return post(url, params);\n}\n\nexport function getCurrencies() {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLCurrencies\" };\n return post(url, params);\n}\n\nexport const getCalendarCalculationMethods = acctId => {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLGetCalendarCalculationMethodList\", acctId };\n return post(url, params);\n};\n\nexport function getPreferences(isUser, id) {\n let tableName = isUser ? \"USER\" : \"ACCOUNT\";\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLPreferences\", tablename: tableName, tableid: id };\n return post(url, params);\n}\n\nexport function getRateSeasons(acctid) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLGetCalendarSeasons\", acctid: acctid };\n return post(url, params);\n}","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\n/**\n * A simple component which only allows positive numeric values (integer and decimals). \n * The reason for implementing this component is because doesn't work properly across browsers\n */\n\nimport React from \"react\";\n\nconst NumericInput = (_props) => {\n let { onChange , integerOnly, ...props} = _props;\n \n return (\n {\n if(integerOnly) {\n if(event.target.validity.valid && !isNaN(event.target.value)) {\n onChange(event.target.value);\n }\n }\n else {\n //NOTE: handle the case for edge case i/p of just \".\"\n if(event.target.value.length === 1 && event.target.value === '.') {\n onChange(event.target.value);\n }\n if(!isNaN(event.target.value)) {\n onChange(event.target.value);\n }\n }\n }} \n {...props}\n />\n )\n }\n\n export default NumericInput;\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from \"react\";\nimport { Col, FormGroup, Label } from \"reactstrap\";\n\nexport const NOTIFICATION_PATH = \"/notification\";\nexport const RESTATUS_PATH = \"/restatus\";\nexport const ITEM_WIZARD_PATH = \"/item-wizard\";\nexport const RATE_WIZARD_PATH = \"/rate-wizard\";\nexport const MASS_UPDATE_PATH = \"/mass-update\";\nexport const SELECT_AIRPORTS_PATH = \"/select-airports\";\nexport const UPDATE_AIRPORTS_PATH = \"/update-airports\";\nexport const RATE_CALENDAR_PATH = \"/rate-calendar\";\nexport const RATE_ITEM_SEQUENCING_PATH = \"/rate-sequencing\";\nexport const RESERVATION_PATH = \"/reservation\";\nexport const RESTAURANT_PATH = \"/restaurant\";\nexport const MEETING_ROOMS_PATH = \"/meeting-rooms\";\nexport const ATTRACTONS_PATH = \"/attractions\";\nexport const PAGE_NOT_FOUND = \"*\";\n\n//Url to fetch data\nexport const WEBSERVICE_BASE_URL = process.env.REACT_APP_URL + \"webapi.jsp?\";\nexport const NOTIFICATION_DISPLAY_BASE_URL = process.env.REACT_APP_URL + \"notification_display.jsp\";\nexport const LOGIN_URL = process.env.REACT_APP_URL + \"webapilogin.jsp\";\nexport const LABEL_WS_BASE_URL = process.env.REACT_APP_URL + \"xml_gcLabel.jsp?\";\nexport const AIRPORTS_BASE_URL = process.env.REACT_APP_URL + \"xml_ps_mgr_airports.jsp?\";\n\nexport const DATE_FORMAT = \"MM/dd/yyyy\";\nexport const DISPLAY_DATE_FORMAT = \"MM/DD/YYYY\";\nexport const DATE_FORMAT_2 = \"MM/DD/YY\";\nexport const DATE_TIME_FORMAT = \"MM/dd/yyyy hh:mm a\";\nexport const TIME_FORMAT_24_HR = \"HH:mm\";\nexport const MONTH_DATE_YEAR_FORMAT = \"MMMM DD, yyyy\";\nexport const DISPLAY_DATE_TIME_24_HR_FORMAT = \"MM/DD/YYYY HH:mm\";\nexport const DOW_PATTERN = \"YYYYYYY\";\n\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const DEFAULT_RATE_ID = 1;\nexport const DEFAULT_TIMEOUT = 900000;\nexport const REFRESH_INTERVAL_BEFORE_TIMEOUT = 360000;\n\nexport const GET_CHANNEL_FILTER_RESTATUS_TYPES = \"RE_RATE_INDEX_AMT,RESTATUS_INV,RESTATUS_SELLRULE,RESTATUS_RATE_AMT\";\n\nexport const NOTIFICATIONS_LABEL_FILE = \"flex_notifications.txt\";\nexport const RESTATUS_LABEL_FILE = \"restatus_module.txt\";\nexport const ITEM_WIZARD_LABEL_FILE = \"item_wizard.txt\";\n\nexport const MASS_UPDATE_LABEL_FILE = \"flex_massupdate.txt\";\nexport const RATE_WIZARD_LABEL_FILE = \"flex_ratewizard.txt\";\nexport const RATE_SEQUENCING_LABEL_FILE = \"flex_ratestrategy.txt\";\n\nexport const GUARANTEE_POLICY_TYPE = \"GUARANTEE\";\nexport const CANCEL_POLICY_TYPE = \"CANCEL\";\nexport const MEAL_PLAN_POLICY_TYPE = \"MEAL_PLAN\";\nexport const COMMISSION_POLICY_TYPE = \"COMMISSION\";\nexport const RATE_ADJ_POLICY_TYPE = \"RATEADJ\";\nexport const YIELD_POLICY_TYPE = \"YIELD\";\nexport const FEE_POLICY_TYPE = \"FEE\";\nexport const DISCOUNT_POLICY_TYPE = \"DISCOUNT\";\nexport const SELLRULE_DEFAULT_VALUE = \"Remove All\";\n\nexport const GDS_FIELD_MAX_LENGTH = 47;\nexport const RATE_NAME_MAX_LENGTH = 30;\nexport const RATE_DESCRIPTION_MAX_LENGTH = 90;\n\nexport const YES = \"Y\";\nexport const NO = \"N\";\nexport const OPEN = \"OPEN\";\n\nexport const NULL_LONG = \"-999\";\nexport const UNDEFINED_VALUE = \"-99999.99\";\n\nexport const EMPTY = \"\";\nexport const ZERO = 0;\nexport const checkModel = \"all\";\n\nexport const ALL = \"all\";\n\nexport const SUNDAY_DOW = \"Sun\";\nexport const MONDAY_DOW = \"Mon\";\nexport const TUESDAY_DOW = \"Tue\";\nexport const WEDNESDAY_DOW = \"Wed\";\nexport const THURSDAY_DOW = \"Thu\";\nexport const FRIDAY_DOW = \"Fri\";\nexport const SATURDAY_DOW = \"Sat\";\n\nexport const dayList = [SUNDAY_DOW, MONDAY_DOW, TUESDAY_DOW, WEDNESDAY_DOW, THURSDAY_DOW, FRIDAY_DOW, SATURDAY_DOW];\nexport const monthsList = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\n//Ui constants\nexport const MANDATORY_SYMBOL = *;\nexport const SECTION_HEADER = text =>
{text}
;\nexport const GET_ROW = (label, control, isMandatory, fieldLength = 7) => {\n return (\n \n \n \n \n {control}\n \n );\n};\n\nexport const GET_ROW_2 = (label, control, isMandatory, labelLength = 5, labelClassNames = \"\", fieldLength = 7) => {\n return (\n \n \n \n \n {control}\n \n );\n};\n\nexport const NEW_LINE_SYMBOL = \"\\r\\n\";\nexport const ENTER_SYMBOL = \"\\n\";\n\nexport const VIRTUAL_CALCULATION_METHODS = [\n \"BASED_ON_BAR_ADD\",\n \"BASED_ON_BAR_SUB\",\n \"BASED_ON_BAR_PCT\",\n \"RATE_INDEX\",\n \"BAR_INDEX\",\n \"DBAR_INDEX\"\n];\n\nexport const BASED_ON_CALCULATION_METHODS = [\"BASED_ON_ADD\", \"BASED_ON_SUB\", \"BASED_ON_PCT\", \"BASED_ON_PCT_EXCLUDE\"];\n\nexport const STANDALONE_CALCULATION_METHOD = \"CALENDAR\";\n\n// There are 4 tokens that cause most of the confusion:\n// D and DD that represent the day of a year (1, 2, ..., 365, 366) are often confused with d and dd that represent the day of a month (1, 2, ..., 31).\n// YY and YYYY that represent the local week-numbering year (44, 01, 00, 17) are often confused with yy and yyyy that represent the calendar year.\nexport const DATE_TIME_FORMAT_TOKEN_REPLACER_MAP = {\n D: \"d\",\n Y: \"y\",\n A: \"a\"\n};\n\nexport const DATE_TIME_FORMAT_TOKEN_REPLACER_REG_EXP = /D|Y|A/g;\n\nexport const DISCARD_WARN = \"Publishing will discard unsaved changes. Do you wish to continue?\";\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\nimport * as Constants from \"../../common/Constants\";\nimport * as commonService from \"../../common/services/common-service\";\n\nexport function getRateWizardData(rateId, userId) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLGetRateWizard\", rateid: rateId, sessionuserid: userId };\n return commonService.post(url, params);\n}\n\nexport function getCodeTypes(isCommissionCalcMethod) {\n let codeType = isCommissionCalcMethod ? \"COMM_CALC_METHOD\" : \"STRIKETHRU_CALC_MTHD\";\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLGetCodeType\", codetype: codeType };\n return commonService.post(url, params);\n}\n\n//TODO Remove. To be called with root_name: Room Types from Room trypes screen\nexport function getRoomTypesTree(acctId, rateIsPrimaryType, rateId, isChainLevel, rootName) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = {\n servicename: \"gcXMLGetWizardTree\",\n acctid: acctId,\n item_group_id: \"1\",\n multi_type: \"N\",\n multi_select: \"N\",\n rate_is_primary_type: rateIsPrimaryType ? \"Y\" : \"N\",\n inherit_selection: \"N\"\n };\n if (isChainLevel) {\n params.chain_level = \"Y\";\n }\n if (rootName) {\n params.root_name = rootName;\n }\n if (rateId) {\n params.rate_id = rateId;\n }\n return commonService.post(url, params);\n}\n\nexport function getMarketingMessages(rateId) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLGetRateMarketingMessages\", rateid: rateId };\n return commonService.post(url, params);\n}\n\nexport function getRateAmounts(itemIdList, date, rateId, acctId) {\n let params = {\n servicename: \"gcXMLGetRateRequests\"\n };\n\n let formdata = new FormData();\n formdata.append(\"itemidlist\", itemIdList);\n formdata.append(\"date\", date);\n formdata.append(\"rateid\", rateId);\n formdata.append(\"acctid\", acctId);\n\n return commonService.post(Constants.WEBSERVICE_BASE_URL, params, formdata);\n}\n\nexport function getRateAccessCodes(acctId, rateId, iscontract, contractID) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let acctid = parseInt(acctId);\n let rateid = parseInt(rateId);\n let params = { servicename: \"gcXMLGetAccessCode\" };\n let formdata = new FormData();\n formdata.append(\"acctid\", acctid);\n formdata.append(\"rateid\", rateid);\n formdata.append(\"iscontract\", iscontract);\n if (contractID) {\n formdata.append(\"contractid\", contractID);\n }\n return commonService.post(url, params, formdata);\n}\n\nexport function getParameterNames() {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params1 = { servicename: \"gcXMLGetCodeType\", codetype: \"CHANNEL_ITEM_PARAM\" };\n let params2 = { servicename: \"gcXMLGetCodeType\", codetype: \"CHAN_RATEITEM_PARAM\" };\n const request1 = commonService.post(url, params1);\n const request2 = commonService.post(url, params2);\n return commonService.multipleRequestHandler([request1, request2]);\n}\n\nexport function getChannelsInformation(interfaceRateCodeParams, roomCodesParams, channelCodesParams) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let request1 = commonService.post(url, interfaceRateCodeParams).catch(err => new Promise(resolve => resolve(err)));\n let request2 = commonService.post(url, roomCodesParams);\n let request3 = commonService.post(url, channelCodesParams);\n let request4 = commonService.getPreferences(false,channelCodesParams.acctid);\n let request5 = commonService.post(url,getSubchannels());\n return commonService.multipleRequestHandler([request1, request2, request3, request4,request5]);\n}\n\n const getSubchannels = () => {\n let params = { servicename: \"gcXmlGetSubChannels\", parentchannel: \"SUPPLY\" };\n return params;\n };\n\nexport function validateRoomCode(acctid, rateid, roomCodes) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = {\n servicename: \"gcXMLValidateConversionCodes\",\n acctid,\n detailvaluelist: roomCodes,\n channelid: 0,\n tablename: \"RATE\",\n rateid\n };\n return commonService.post(url, params);\n}\n\nexport function saveRateWizard(requestXml) {\n let url = Constants.WEBSERVICE_BASE_URL;\n let params = { servicename: \"gcXMLSetRateWizard\" };\n let formData = new FormData();\n formData.set(\"xml\", requestXml);\n return commonService.post(url, params, formData, false, true);\n}\n","import { \n CLEAR_RATE_WIZARD_VALIDATION_ERROR,\n SET_RATE_WIZARD_VALIDATION_ERROR\n\n} from '../../actionTypes';\n\nexport const setValidationError = (errorObject) => ({\n type: SET_RATE_WIZARD_VALIDATION_ERROR,\n validatationErrorObject : errorObject\n});\n\nexport const clearValidationError = () => ({\n type: CLEAR_RATE_WIZARD_VALIDATION_ERROR\n})","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Form } from \"reactstrap\";\nimport * as Constants from \"../../common/Constants\";\nimport * as CommonUtil from \"../../common/CommonUtil\";\nimport { updateRateWizardData } from \"../../common/redux/actions/rate-wizard/index\";\nimport { loadLabelsAndPaths } from \"../../common/redux/actions/index.js\";\nimport { setValidationError, clearValidationError } from \"../../common/redux/actions/rate-wizard/validation\";\nimport DatePicker from \"react-datepicker\";\nimport moment from \"moment\";\nimport \"./react-datepicker.scss\";\n\nexport class BuildRatePlan extends React.Component {\n constructor(props) {\n super(props);\n let lines = props.rateWizardData.rateData.interfaceLongDesc\n ? props.rateWizardData.rateData.interfaceLongDesc.split(Constants.NEW_LINE_SYMBOL)\n : \"\";\n this.languageOptions = [{ value: \"en-US\", label: \"English\" }, { value: \"es-ES\", label: \"Espanol\" }];\n this.state = {\n minSellEndDate: moment().toDate(),\n minSellBeginDate: moment()\n .subtract(1, \"day\")\n .toDate(),\n minActiveEndDate: moment().toDate(),\n minActiveBeginDate: moment()\n .subtract(1, \"day\")\n .toDate(),\n interfaceDescriptionLine1: lines && lines[0] ? lines[0] : \"\",\n interfaceDescriptionLine2: lines && lines[1] ? lines[1] : \"\",\n interfaceDescriptionLine3: lines && lines[2] ? lines[2] : \"\"\n };\n }\n\n getLangOptionObj = selectedValue => {\n return this.languageOptions.find(element => element.value === selectedValue);\n };\n\n onLanguageChange = (language, isPropertyLevel) => {\n // Need to update global labelMap and Paths used for other screens\n this.props.loadLabelsAndPaths(Constants.RATE_WIZARD_LABEL_FILE, isPropertyLevel, language);\n this.onRateWizardDataChange(\"language\", language);\n };\n\n onRateWizardDataChange = (stateName, newValue) => {\n let rateWizardData = this.props.rateWizardData;\n rateWizardData.rateData[stateName] = newValue;\n this.props.updateRateWizardData(rateWizardData);\n };\n\n getDate = (dateStr, timeStr) => {\n let date = null;\n if (dateStr) {\n if (timeStr) {\n dateStr = dateStr + \" \" + timeStr;\n }\n date = moment(dateStr, Constants.DISPLAY_DATE_TIME_24_HR_FORMAT).toDate();\n }\n return date;\n };\n\n preventNavigationIfInvalid = value => {\n if (!value) {\n this.props.setValidationError({\n type: \"toast\",\n errorMessage: \"Mandatory Fields are empty or not valid\"\n });\n } else {\n this.props.clearValidationError();\n }\n };\n\n onInterfaceDescriptionChange = (stateName, value) => {\n let currentState = this.state;\n currentState[stateName] = value;\n this.setState(currentState);\n //updating interfaceLongDesc\n let interfaceLongDesc = \"\";\n if (this.state.interfaceDescriptionLine1) {\n interfaceLongDesc = interfaceLongDesc + this.state.interfaceDescriptionLine1;\n }\n if (this.state.interfaceDescriptionLine2) {\n interfaceLongDesc = interfaceLongDesc + Constants.NEW_LINE_SYMBOL;\n interfaceLongDesc = interfaceLongDesc + this.state.interfaceDescriptionLine2;\n }\n if (this.state.interfaceDescriptionLine3) {\n interfaceLongDesc = interfaceLongDesc + Constants.NEW_LINE_SYMBOL;\n interfaceLongDesc = interfaceLongDesc + this.state.interfaceDescriptionLine3;\n }\n this.onRateWizardDataChange(\"interfaceLongDesc\", interfaceLongDesc);\n };\n\n handleDateChange = (stateName, stateValue, isActiveDate) => {\n let selectedDate = moment(stateValue, Constants.DATE_FORMAT);\n let selectedDateStr = selectedDate.isValid() ? selectedDate.format(Constants.DISPLAY_DATE_FORMAT) : null;\n let currentState = this.state;\n if (stateName.includes(\"egin\")) {\n let minEndDate = selectedDate\n .clone()\n .startOf(\"day\")\n .add(1, \"days\")\n .toDate();\n currentState[isActiveDate ? \"minActiveEndDate\" : \"minSellEndDate\"] = minEndDate;\n\n let ratesData = this.props.rateWizardData.rateData;\n let endDateStateName = isActiveDate ? \"activeEndDate\" : \"endSellDate\";\n if (ratesData[endDateStateName]) {\n let endDate = moment(ratesData[endDateStateName], Constants.DISPLAY_DATE_FORMAT);\n if (endDate.isBefore(selectedDate) || stateValue === null) {\n this.onRateWizardDataChange(endDateStateName, selectedDateStr);\n if (!isActiveDate) {\n //Clearing the time.\n this.onRateWizardDataChange(\"endSellTime\", \"\");\n }\n }\n }\n }\n this.setState(currentState);\n //The state value has time info as well\n if (!isActiveDate) {\n let selectedTimeStr = selectedDate.isValid() ? selectedDate.format(Constants.TIME_FORMAT_24_HR) : \"\";\n let timeStateName = stateName.includes(\"egin\") ? \"beginSellTime\" : \"endSellTime\";\n this.onRateWizardDataChange(timeStateName, selectedTimeStr);\n }\n this.onRateWizardDataChange(stateName, selectedDateStr);\n };\n\n render() {\n let { rateData } = this.props.rateWizardData;\n let { labelsMap, isPropertyLevel } = this.props;\n let selectedLang = rateData.language ? rateData.language : this.languageOptions[0].value;\n return (\n \n {/*Build Rate Plan screen */}\n {Constants.SECTION_HEADER(labelsMap[\"Build Rate Plan:\"] ? labelsMap[\"Build Rate Plan:\"] : \"Build Rate Plan:\")}\n
\n {CommonUtil.getTextField(\n labelsMap[\"Rate Name:\"] ? labelsMap[\"Rate Name:\"] : \"Rate Name:\",\n rateData.shortDesc,\n event => {\n let value = event.target.value;\n this.preventNavigationIfInvalid(value);\n this.onRateWizardDataChange(\"shortDesc\", value);\n },\n true,\n !rateData.shortDesc,\n \"\",\n Constants.RATE_NAME_MAX_LENGTH\n )}\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Rate Description:\"] ? labelsMap[\"Rate Description:\"] : \"Rate Description:\",\n {\n let value = event.target.value;\n this.preventNavigationIfInvalid(value);\n this.onRateWizardDataChange(\"longDesc\", value);\n }}\n maxLength={Constants.RATE_DESCRIPTION_MAX_LENGTH}\n rows=\"3\"\n />,\n true,\n !rateData.longDesc,\n \"8\"\n )}\n {CommonUtil.getTextField(\n labelsMap[\"GDS/Interface Rate Name:\"] ? labelsMap[\"GDS/Interface Rate Name:\"] : \"GDS/Interface Rate Name:\",\n rateData.interfaceShortDesc,\n event => {\n let value = event.target.value;\n this.preventNavigationIfInvalid(value);\n this.onRateWizardDataChange(\"interfaceShortDesc\", value);\n },\n true,\n !rateData.interfaceShortDesc,\n \"\",\n Constants.RATE_NAME_MAX_LENGTH\n )}\n\n {CommonUtil.getTextField(\n labelsMap[\"GDS/Interface Description:\"] ? labelsMap[\"GDS/Interface Description:\"] : \"GDS/Interface Description:\",\n this.state.interfaceDescriptionLine1,\n event => {\n let value = event.target.value;\n this.preventNavigationIfInvalid(value);\n this.onInterfaceDescriptionChange(\"interfaceDescriptionLine1\", value);\n },\n true,\n !this.state.interfaceDescriptionLine1,\n \"\",\n Constants.RATE_NAME_MAX_LENGTH\n )}\n {CommonUtil.getTextField(\n \"\",\n this.state.interfaceDescriptionLine2,\n event => {\n this.onInterfaceDescriptionChange(\"interfaceDescriptionLine2\", event.target.value);\n },\n false,\n \"\",\n \"\",\n Constants.GDS_FIELD_MAX_LENGTH\n )}\n {CommonUtil.getTextField(\n \"\",\n this.state.interfaceDescriptionLine3,\n event => {\n this.onInterfaceDescriptionChange(\"interfaceDescriptionLine3\", event.target.value);\n },\n false,\n \"\",\n \"\",\n Constants.GDS_FIELD_MAX_LENGTH\n )}\n {CommonUtil.getLabelOrTextField(\n labelsMap[\"Special characters allowed for GDS\"]\n ? labelsMap[\"Special characters allowed for GDS\"]\n : \"(Note: GDS descriptions are limited to characters A-Z, a-z, 0-9 and symbols period (.), asterisk ( *) dash ( -), comma (,) and forward slash ( /) )\",\n \"\",\n true,\n \"\",\n \"\"\n )}\n \n {Constants.SECTION_HEADER(\n labelsMap[\"Rate Plan Begin Sell & End Sell Dates:\"]\n ? labelsMap[\"Rate Plan Begin Sell & End Sell Dates:\"]\n : \"Rate Plan Begin Sell & End Sell Dates:\"\n )}\n
\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Begin Sell Date & Time:\"] ? labelsMap[\"Begin Sell Date & Time:\"] : \"Begin Sell Date & Time:\",\n {\n this.preventNavigationIfInvalid(date);\n this.handleDateChange(\"beginSellDate\", date);\n }}\n dateFormat={this.props.dateTimeInputFormat}\n isClearable={true}\n minDate={this.state.minSellBeginDate}\n timeInputLabel=\"Time:\"\n showTimeInput\n />,\n true,\n !rateData.beginSellDate\n )}\n {CommonUtil.genericFieldContainer(\n labelsMap[\"End Sell Date & Time:\"] ? labelsMap[\"End Sell Date & Time:\"] : \"End Sell Date & Time:\",\n this.handleDateChange(\"endSellDate\", date)}\n dateFormat={this.props.dateTimeInputFormat}\n isClearable={true}\n minDate={this.state.minSellEndDate}\n disabled={rateData.beginSellDate ? false : true}\n timeInputLabel=\"Time:\"\n showTimeInput\n />,\n false,\n null\n )}\n
\n {Constants.SECTION_HEADER(\n labelsMap[\"Rate Plan Active Begin & End Dates:\"]\n ? labelsMap[\"Rate Plan Active Begin & End Dates:\"]\n : \"Rate Plan Active Begin & End Dates:\"\n )}\n
\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Active Begin Date:\"] ? labelsMap[\"Active Begin Date:\"] : \"Active Begin Date:\",\n this.handleDateChange(\"activeBeginDate\", date, true)}\n dateFormat={this.props.dateInputFormat}\n isClearable={true}\n minDate={this.state.minActiveBeginDate}\n />,\n false,\n null\n )}\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Active End Date:\"] ? labelsMap[\"Active End Date:\"] : \"Active End Date:\",\n this.handleDateChange(\"activeEndDate\", date, true)}\n dateFormat={this.props.dateInputFormat}\n isClearable={true}\n minDate={this.state.minActiveEndDate}\n disabled={rateData.activeBeginDate ? false : true}\n />,\n false,\n null\n )}\n
\n {Constants.SECTION_HEADER(labelsMap[\"Language:\"] ? labelsMap[\"Language:\"] : \"Language:\")}\n
\n {CommonUtil.genericFieldContainer(\n \"\",\n CommonUtil.getLabelOrSelect(\n this.getLangOptionObj(selectedLang),\n selectedOption =>\n selectedOption.value !== selectedLang && this.onLanguageChange(selectedOption.value, isPropertyLevel),\n this.languageOptions\n ),\n false\n )}\n
\n {Constants.SECTION_HEADER(labelsMap[\"Notify GDSs:\"] ? labelsMap[\"Notify GDSs:\"] : \"Notify GDSs:\")}\n
\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Notify:\"] ? labelsMap[\"Notify:\"] : \"Notify:\",\n CommonUtil.getLabelOrCheckbox(rateData.notifyYN === \"Y\", event =>\n this.onRateWizardDataChange(\"notifyYN\", event.target.checked ? \"Y\" : \"N\", true)\n ),\n false\n )}\n
\n
\n );\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n updateRateWizardData: rateData => dispatch(updateRateWizardData(rateData)),\n loadLabelsAndPaths: (fileName, isPropertyLevel, language) => dispatch(loadLabelsAndPaths(fileName, isPropertyLevel, language)),\n setValidationError: validationErrorObject => dispatch(setValidationError(validationErrorObject)),\n clearValidationError: () => dispatch(clearValidationError())\n});\n\nconst mapStateToProps = state => {\n return {\n rateWizardData: state.rateWizard.rateWizardData,\n labelsMap: state.rateWizard.labelMap,\n dateInputFormat: state.rateWizard.dateInputFormat,\n dateTimeInputFormat: state.rateWizard.dateTimeInputFormat\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(BuildRatePlan);\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport {\n LOAD_COMM_CALC_METHOD,\n LOAD_RATE_CALC_METHOD,\n LOAD_STRIKE_CALC_METHOD,\n LOAD_RATE_INDEX_OPTIONS\n} from \"../../actionTypes\";\n\nimport * as commonService from \"../../../../common/services/common-service\";\nimport * as commonUtil from \"../../../CommonUtil\";\n\nexport function loadCommCalcMethod(nullLabel) {\n return dispatch => {\n commonService.getCodeTypes(\"COMM_CALC_METHOD\").then(response => dispatch(loadCommCalcMethodSelect(response, nullLabel)));\n };\n}\n\nexport function loadStrikeThruCalcMethod(nullLabel) {\n return dispatch => {\n commonService.getCodeTypes(\"STRIKETHRU_CALC_MTHD\").then(response => dispatch(loadStrikeThruCalcMethodSelect(response, nullLabel)));\n };\n}\n\nconst loadCommCalcMethodSelect = (response, nullLabel) => {\n let commCalcMethodOptions = commonUtil.getCodeTypesFromResponse(response, null, nullLabel);\n \n return {\n type: LOAD_COMM_CALC_METHOD,\n commCalcMethodOptions: commCalcMethodOptions\n };\n};\n\nconst loadStrikeThruCalcMethodSelect = (response, nullLabel) => {\n let strikeThruCalcMethodOptions = commonUtil.getCodeTypesFromResponse(response, null, nullLabel);\n \n return {\n type: LOAD_STRIKE_CALC_METHOD,\n strikeThruCalcMethodOptions: strikeThruCalcMethodOptions\n };\n};\n\nexport function loadRateCalcMethod() {\n // Hard-coded the list for now as implemented in Flex module. We can consider using web service later if need\n const rateCalcMethodOptions = [\n {label: \"Standalone Rate\", value: \"CALENDAR\"},\n {label: \"Based on a Rate Adding an Amount\", value: \"BASED_ON_ADD\"},\n {label: \"Based on a Rate Subtracting an Amount\", value: \"BASED_ON_SUB\"},\n {label: \"Based on a Percentage of Another Rate\", value: \"BASED_ON_PCT\"},\n {label: \"Based on a Percentage of Another Rate, Excluding Extras\", value: \"BASED_ON_PCT_EXCLUDE\"},\n {label: \"Rate Index\", value: \"RATE_INDEX\"},\n {label: \"Best Available Rate from List\", value: \"BAR_INDEX\"},\n {label: \"Dynamic Best Available Rate from List\", value: \"DBAR_INDEX\"},\n {label: \"Based on a Bar, DBar, or Rate Index rate adding an amount\", value: \"BASED_ON_BAR_ADD\"},\n {label: \"Based on a Bar, DBar, or Rate Index rate subtracting an amount\", value: \"BASED_ON_BAR_SUB\"},\n {label: \"Based on a percentage of another Bar, DBar, or Rate Index rate\", value: \"BASED_ON_BAR_PCT\"}\n ];\n return {\n type: LOAD_RATE_CALC_METHOD,\n rateCalcMethodOptions: rateCalcMethodOptions\n };\n};\n\nexport function loadRateIndexOptions(acctId, rateid) {\n return dispatch => {\n commonService.getRateIndexOptions(acctId, rateid).then(response => dispatch(loadRateIndexOptionsSelect(response)));\n };\n}\n\nconst loadRateIndexOptionsSelect = (response) => {\n let rateIndexOptions = commonUtil.getRateIndexOptionsFromResponse(response);\n \n return {\n type: LOAD_RATE_INDEX_OPTIONS,\n rateIndexOptions: rateIndexOptions\n };\n};\n","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from 'react';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap';\n\nclass MarketingMessages extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n marketingMessageIDs: props.selectedMessageIDs?props.selectedMessageIDs.split(\",\"):[]\n };\n } \n\n toggle= () => this.props.handleDialogClose(); \n\n onItemChanged = event => {\n let messageIDs = [...this.state.marketingMessageIDs];\n if (event.target.checked) {\n messageIDs.push(event.target.name);\n } else {\n messageIDs = messageIDs.filter(id => id !== event.target.name);\n }\n this.setState({marketingMessageIDs:messageIDs});\n }\n\n onSetButtonClick = () => {\n // Convert list of message IDs to string\n let updatedMessageIDs=\"\";\n this.state.marketingMessageIDs.forEach(id => {\n updatedMessageIDs = updatedMessageIDs + id + \",\";\n });\n \n if (updatedMessageIDs.search(\",\") > 0) {\n updatedMessageIDs = updatedMessageIDs.substring(0, updatedMessageIDs.length-1);\n }\n this.props.handleDialogSet(updatedMessageIDs);\n }\n \n render() {\n return ( \n \n \n \n \n
\n \n \n {this.props.data.map(item => { \n return (\n \n \n \n \n )}\n )}\n \n
\n it === item.id).length > 0): false}\n onChange={this.onItemChanged}\n />\n {item.description}
\n
\n
\n \n  \n \n \n
\n
\n );\n }\n}\n\nexport default MarketingMessages;","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from 'react';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap';\n\nclass RateCategories extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n rateCategoryCodes: props.selectedRateCategoryCodes?props.selectedRateCategoryCodes.split(\",\"):[]\n };\n } \n\n toggle= () => this.props.handleDialogClose(); \n\n onItemChanged = event => {\n let rateCategoryCodes = [...this.state.rateCategoryCodes];\n if (event.target.checked) {\n rateCategoryCodes.push(event.target.name);\n } else {\n rateCategoryCodes = rateCategoryCodes.filter(code => code !== event.target.name);\n }\n this.setState({rateCategoryCodes:rateCategoryCodes});\n }\n\n onSetButtonClick = () => {\n // Convert list of rate category codes to string\n let updatedRateCategoryCodes=\"\";\n this.state.rateCategoryCodes.forEach(code => {\n updatedRateCategoryCodes = updatedRateCategoryCodes + code + \",\";\n });\n \n if (updatedRateCategoryCodes.search(\",\") > 0) {\n updatedRateCategoryCodes = updatedRateCategoryCodes.substring(0, updatedRateCategoryCodes.length-1);\n }\n this.props.handleDialogSet(updatedRateCategoryCodes);\n }\n \n render() {\n return ( \n \n \n \n \n
\n \n \n {this.props.data.map(item => { \n return (\n \n \n \n \n )}\n )}\n \n
\n it === item.code).length > 0): false}\n onChange={this.onItemChanged}\n />\n {item.description}
\n
\n
\n \n  \n \n \n
\n
\n );\n }\n}\n\nexport default RateCategories;","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from 'react';\nimport CheckboxTree from \"react-checkbox-tree\";\nimport * as rateWizardUtil from \"../../RateWizardUtil\";\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\n\nclass RateParent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n ratesChecked:[]\n };\n } \n\n toggle= () => this.props.handleDialogClose(); \n\n onItemClicked = item => {\n this.setState({ratesChecked:item.value})\n }\n\n onSetButtonClick = () => {\n this.props.handleDialogSet(this.state.ratesChecked);\n }\n\n render() {\n let ratesExpanded = rateWizardUtil.getParentRateFolders(this.props.data);\n return ( \n \n \n \n \n
\n \n
\n
\n \n  \n \n \n
\n
\n );\n }\n}\n\nexport default RateParent;","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\nimport React from \"react\";\nimport jsontoxml from \"jsontoxml\";\nimport BuildRatePlan from \"./components/BuildRatePlan\";\nimport Controls from \"./components/Controls\";\nimport { Restrictions } from \"./components/Restrictions\";\nimport Contracts from \"./components/Contracts\";\nimport Channels from \"./components/Channels/\";\nimport Parameters from \"./components/Parameters\";\nimport { RateLock } from \"./components/RateLock\";\nimport { PropertyPublish } from \"./components/PropertyPublish\";\nimport Completion from \"./components/Completion\";\nimport { Status } from \"./components/Status\";\nimport Rates from \"./components/Rates\";\nimport RoomTypes from \"./components/RoomTypes\";\nimport { escapeNewLineCharacters } from \"../common/CommonUtil\";\nimport { GDS_CHANNELS_CODES, REQUIRED_CONTRACT_RATE_CATEGORIES } from \"./RateWizardConstants\";\nimport { NULL_LONG } from \"../common/Constants\";\n\nexport function getParsedRateWizardData(response) {\n let rateData = response.RatePlan[0].Rate[0];\n let channelFilters = [];\n rateData.ChannelFilter &&\n rateData.ChannelFilter.forEach(channelFilterObj => {\n let channelData = getObjectWithField(channelFilterObj);\n channelFilters.push(channelData);\n });\n let parsedRateData = getObjectWithField(rateData);\n let rateItems = rateData.RateItem ? rateData.RateItem.map(item => getObjectWithField(item)) : [];\n rateItems = rateItems.map(item => Object.assign({}, item, { eState: \"UPDATE\" }));\n let parsedContractsData = rateData.Contracts ? rateData.Contracts.map(contract => getObjectWithField(contract)) : [];\n // RVNG-7209: TODO: still incorrect for existing rate which having no rate item selected and all channel conversion inactivated from Channels tab\n // which should not be existing in reality\n let isNewRate = true;\n if (channelFilters.length > 0 || (parsedRateData.ifRateCategoryID !== NULL_LONG && rateItems.length > 0)) {\n isNewRate = false;\n }\n parsedRateData.isNewRate = isNewRate;\n return {\n channelFilters,\n // Store original channel filters before they maybe changed later\n orgChannelFilters: channelFilters.map(channelFilter => ({ ...channelFilter })),\n rateData: parsedRateData,\n rateItems,\n // Store original rate items before they maybe changed later\n orgRateItems: rateItems.map(rateItem => ({ ...rateItem })),\n contracts: parsedContractsData,\n // Store original contracts before they maybe changed later\n orgContracts: parsedContractsData.map(contract => ({ ...contract }))\n };\n}\n\nexport function getParsedPreferences(response) {\n let preferenceArr = response.preferences[0].preference;\n return getObjectsWithTypeAndValue(preferenceArr);\n}\n\nexport function getParsedMarketingMessages(response) {\n let preferenceArr = response.marketing_messages[0].marketing_message;\n return getObjectsWithTypeAndValue(preferenceArr);\n}\n\nfunction getObjectWithField(object) {\n let objectWithAttr = {};\n object.field.forEach(field => {\n objectWithAttr[field.$.name] = field.$.value ? field.$.value : field._;\n });\n return objectWithAttr;\n}\n\nfunction getObjectsWithTypeAndValue(objectArr) {\n let parsedObject = new Map();\n objectArr.forEach(object => parsedObject.set(object.$.type, object.$.value));\n return parsedObject;\n}\n\nexport function extractItems(response, isRateParentTree) {\n let items = [];\n response.folder.forEach(folder => {\n items.push(extractFolder(folder, isRateParentTree));\n });\n return items;\n}\n\nfunction extractFolder(folder, isRateParentTree) {\n // RVNG-6842: itemid = 0 for root node\n let folderValue = folder.$.itemid ? folder.$.itemid : \"0\";\n let folderLabel = folder.$.label.toString();\n let children = [];\n if (folder.folder) {\n folder.folder.forEach(subFolder => {\n children.push(extractFolder(subFolder, isRateParentTree));\n });\n }\n if (children.length === 0) {\n if (!isRateParentTree) {\n return { value: folderValue, label: folderLabel };\n } else {\n return { value: folderValue, label: folderLabel, showCheckbox: false };\n }\n }\n if (!isRateParentTree) {\n return { value: folderValue, label: folderLabel, children: children };\n } else {\n return { value: folderValue, label: folderLabel, showCheckbox: false, children: children };\n }\n}\n\nexport function getAllItemValues(values, items) {\n items.forEach(item => {\n values.push(item.value);\n if (item.children && item.children.length > 0) {\n values.concat(getAllItemValues(values, item.children));\n }\n });\n return values;\n}\n\n// TODO: evaluate iterative approach\nexport function buildItemsMap(itemsMap, items) {\n items.forEach(item => {\n itemsMap[item.value] = item.label;\n if (item.children && item.children.length > 0) {\n itemsMap = buildItemsMap(itemsMap, item.children);\n }\n });\n\n return itemsMap;\n}\n\nfunction recursiveExtractParentRateFoldersOnly(folder) {\n let folderValue = folder.value ? folder.value : \"\";\n let children = [];\n if (folder.children) {\n children.push(folderValue);\n folder.children.forEach(subFolder => {\n recursiveExtractParentRateFoldersOnly(subFolder).forEach(item => {\n children.push(item);\n });\n });\n }\n return children;\n}\n\nexport function getParentRateFolders(treeNodes) {\n let items = [];\n treeNodes.forEach(child => {\n recursiveExtractParentRateFoldersOnly(child).forEach(item => items.push(item));\n });\n return items;\n}\n\n// export function extractCheckedItemValues(response) {\n// let values = [];\n// response.folder.forEach(folder => {\n// values.concat(extractCheckedItemFolders(values, folder));\n// });\n// return values;\n// }\n\n// function extractCheckedItemFolders(values, folder) {\n// if (folder && folder.$ && folder.$.itemid && folder.$.state === \"checked\") {\n// values.push(folder.$.itemid);\n// }\n\n// if (folder.folder) {\n// folder.folder.forEach(subFolder => {\n// let itemValues = extractCheckedItemFolders(values, subFolder);\n// if (itemValues) {\n// values.concat(itemValues);\n// }\n// });\n// }\n// return values;\n// }\n\nexport function buildRateData(response, itemsMap) {\n let rateData = response.Requests.map(request => {\n return {\n itemid: request.itemid,\n roomtype: itemsMap[request.itemid],\n oneadult: request.rate_one,\n twoadults: request.rate_two,\n threeadults: request.rate_three,\n fouradults: request.rate_four,\n fiveadults: request.rate_five,\n sixadults: request.rate_six,\n sevenadults: request.rate_seven,\n eightadults: request.rate_eight,\n nineadults: request.rate_nine,\n tenadults: request.rate_ten,\n extraadult: request.extra_adult,\n onechild: request.extra_child\n };\n });\n\n return rateData;\n}\n\nexport function buildRateCategoryMap(response) {\n let rateCategoryMap = response.category.map(category => {\n return {\n id: category.id[0],\n description: category.shortdesc[0],\n code: category.category[0]\n };\n });\n\n return rateCategoryMap;\n}\n\nexport function buildMarketingMessagesMap(response) {\n let marketingMessagesMap = response.marketing_messages[0].marketing_message.map(message => {\n return {\n id: message.$.id,\n description: message.$.shortdesc\n };\n });\n\n return marketingMessagesMap;\n}\n\nexport const getRateWizardPaths = (isPropertyLevel, labelsMap) => {\n if (isPropertyLevel) {\n return [\n {\n label: labelsMap[\"Build Rate Plan\"] ? labelsMap[\"Build Rate Plan\"] : \"Build Rate Plan\",\n component: BuildRatePlan,\n name: \"buildrateplan\"\n },\n {\n label: labelsMap[\"Controls\"] ? labelsMap[\"Controls\"] : \"Controls\",\n component: Controls,\n name: \"controls\"\n },\n {\n label: labelsMap[\"Room Types\"] ? labelsMap[\"Room Types\"] : \"Room Types\",\n component: RoomTypes,\n name: \"roomtypes\"\n },\n {\n label: labelsMap[\"Rates\"] ? labelsMap[\"Rates\"] : \"Rates\",\n component: Rates,\n name: \"rates\"\n },\n {\n label: labelsMap[\"Contracts\"] ? labelsMap[\"Contracts\"] : \"Contracts\",\n component: Contracts,\n name: \"contracts\"\n },\n {\n label: labelsMap[\"Channels\"] ? labelsMap[\"Channels\"] : \"Channels\",\n component: Channels,\n name: \"channels\"\n },\n {\n label: labelsMap[\"Completion\"] ? labelsMap[\"Completion\"] : \"Completion\",\n component: Completion,\n name: \"completion\"\n }\n ];\n } else {\n return [\n {\n label: labelsMap[\"Build Rate Plan\"] ? labelsMap[\"Build Rate Plan\"] : \"Build Rate Plan\",\n component: BuildRatePlan,\n name: \"buildrateplan\"\n },\n {\n label: labelsMap[\"Controls:\"] ? labelsMap[\"Controls:\"] : \"Controls\",\n component: Controls,\n name: \"controls\"\n },\n {\n label: labelsMap[\"Restrictions\"] ? labelsMap[\"Restrictions\"] : \"Restrictions\",\n component: Restrictions,\n name: \"restrictions\"\n },\n {\n label: labelsMap[\"Contracts\"] ? labelsMap[\"Contracts\"] : \"Contracts\",\n component: Contracts,\n name: \"contracts\"\n },\n {\n label: labelsMap[\"Channels\"] ? labelsMap[\"Channels\"] : \"Channels\",\n component: Channels,\n name: \"channels\"\n },\n {\n label: labelsMap[\"Parameters\"] ? labelsMap[\"Parameters\"] : \"Parameters\",\n component: Parameters,\n name: \"parameters\"\n },\n {\n label: labelsMap[\"Rate Lock\"] ? labelsMap[\"Rate Lock\"] : \"Rate Lock\",\n component: RateLock,\n name: \"ratelock\"\n },\n {\n label: labelsMap[\"Property Publish\"] ? labelsMap[\"Property Publish\"] : \"Property Publish\",\n component: PropertyPublish,\n name: \"propertypublish\"\n },\n {\n label: labelsMap[\"Completion\"] ? labelsMap[\"Completion\"] : \"Completion\",\n component: Completion,\n name: \"completion\"\n },\n {\n label: labelsMap[\"Status\"] ? labelsMap[\"Status\"] : \"Status\",\n component: Status,\n name: \"status\"\n }\n ];\n }\n};\n\nexport const buildRateAccessCodesMap = response => {\n if (!response.contracts) return [];\n return response.contracts.map(contract => {\n return {\n description: contract.dispval[0],\n code: contract.code[0],\n accesscode: contract.accesscode[0],\n inactive_yn: contract.inactive_yn[0]\n };\n });\n};\n\nexport const buildRateAccessCodesMapForContract = response => {\n if (!response.accesscodes) return [];\n return response.accesscodes.map(channel => {\n return {\n channelid: channel.channelid[0],\n channelname: channel.channelname[0],\n accesscode: channel.accesscode[0]\n };\n });\n};\n\nexport const buildCurrenciesMap = response => {\n //NOTE: there is plenty of currency related information in this call apart from the ones being used below\n return response.currencies[0].currency.map(currency => {\n let {\n $: { code },\n shortDescription\n } = currency;\n return {\n value: code,\n label: shortDescription[0] + \" \" + code\n };\n });\n};\n\nexport const getChannelOptions = result => {\n const allResults = result.folder[0].folder[0].folder;\n let channelNamesMap = {};\n function extractItems(response) {\n let items;\n if (response.folder) {\n items = response.folder.map(folder => extractFolder(folder));\n } else {\n channelNamesMap[response.$.itemid] = response.label.toString();\n items = (\n \n );\n }\n return items;\n }\n\n function extractFolder(folder) {\n let itemid = folder.$.itemid ? folder.$.itemid : folder.label.toString();\n let folderLabel = folder.label.toString();\n channelNamesMap[itemid] = folderLabel;\n let children = [];\n let returnValue;\n if (folder.folder) {\n children = folder.folder.map(subFolder => extractFolder(subFolder));\n returnValue = (\n \n \n {children}\n \n );\n } else {\n returnValue = (\n \n );\n }\n return returnValue;\n }\n const channelNameOptions = allResults.map((result, index) => {\n channelNamesMap[result.$.itemid] = result.label.toString();\n return (\n \n {result.folder && result.folder.length > 0 && (\n \n )}\n {extractItems(result)}\n \n );\n });\n return { channelNameOptions, channelNamesMap };\n};\n\nconst getFormattedDataForObject = (object, name) => {\n return Object.keys(object).map(key => {\n return {\n name: name,\n children: Object.keys(object[key]).map(child => {\n return {\n name: \"field\",\n attrs: {\n name: child,\n value: object[key][child]\n }\n };\n })\n };\n });\n};\n\n// RVNG-6778: Rate Wizard: GDS description not getting updated\nconst updateChannelFilters = (rateWizardData, channelsMap, rateAccessCodes, userId) => {\n const { rateData, channelFilters, orgChannelFilters } = rateWizardData;\n // Update interface description information for channels\n let updatedChannelFilters = [...channelFilters];\n let otherChannels = [];\n updatedChannelFilters.forEach(channel => {\n let channelMapItem = channelsMap && channelsMap[channel.channel_id] ? channelsMap[channel.channel_id] : \"\";\n if (channelMapItem && !GDS_CHANNELS_CODES.includes(channelMapItem.channelCode)) {\n otherChannels.push(channel.channel_id);\n }\n channel.short_desc = channel.display_short_desc = rateData.interfaceShortDesc ? rateData.interfaceShortDesc \n : rateData.shortDesc ? rateData.shortDesc : \"\";\n channel.long_desc = channel.display_long_desc = rateData.interfaceLongDesc ? rateData.interfaceLongDesc\n : channel.short_desc;\n // RVNG-7068: update modified user with logged in user\n channel.mod_user_id = userId;\n channel.begin_date = rateData.activeBeginDate ? rateData.activeBeginDate : \"\";\n channel.end_date = rateData.activeEndDate ? rateData.activeEndDate : \"\";\n });\n\n // RVNG-6936 and 6978:\n // 1. New created rate: in returned builtChannelFilters will contain\n // a. Unchecked channel: a record with detail_type = \"FILTER\", detail_value= \"EXCLUDE\" and inactive_yn= \"N\"\n // b. Checked channel: records with detail_type = \"CONVERSION\", detail_name= \"CONVERSION\" and inactive_yn= \"N\"\n // 2. Existing rate: compare current/updated channel filters with original channel filters\n // a. Record with detail_type = \"CONVERSION\":\n // - If it is not existing in original channel filters and have inactive_yn= \"N\", copy it to target\n // + if its conversion code is changed and it is removed then, update the original channel: detail_type = \"\", \n // inactive_yn = \"Y\" and copy it to target\n // - If it is existing in original channel filters and have inactive_yn (or descriptions, modified user) changed\n // + if inactive_yn = \"Y\", update detail_type = \"\"\n // + copy it to target\n // b. Record with detail_type = \"FILTER\":\n // - If it is not existing in original channel filters and have inactive_yn= \"N\", copy it to target\n // - If it is existing in original channel filters and have inactive_yn changed, copy it to target\n let builtChannelFilters = [];\n rateData.channelRateCodesMap.forEach(selectedChannel => {\n // get records from current channelFilters\n let conversionChannels = updatedChannelFilters.filter(\n cf => cf.channel_id === selectedChannel.channel + \"\" && cf.detail_type === \"CONVERSION\"\n );\n let filteredChannel = updatedChannelFilters.find(\n cf => cf.channel_id === selectedChannel.channel + \"\" && cf.detail_value === \"EXCLUDE\"\n );\n // get records from original channelFilters\n let conversionChannels_org = orgChannelFilters.filter(\n cf => cf.channel_id === selectedChannel.channel + \"\" && cf.detail_type === \"CONVERSION\"\n );\n let filteredChannel_org = orgChannelFilters.find(\n cf => cf.channel_id === selectedChannel.channel + \"\" && cf.detail_value === \"EXCLUDE\"\n );\n\n if (rateData.isNewRate) {\n // With new create rate, in updatedChannelFilters, there is no record with detail_type = \"CONVERSION\"\n // record with detail_type = \"FILTER\" can existing (if that channel is filtered) or not in updatedChannelFilters\n let rateCodes = [\"EXCLUDE\"];\n let detail_type_name = \"FILTER\";\n let detail_method = \"\";\n if (!filteredChannel || filteredChannel.inactive_yn === \"Y\") {\n // RVNG-6834: Add missing gds channels (Sabre, Galileo..) to channelFilters for new created rate\n rateCodes = selectedChannel.rateCodes;\n detail_type_name = \"CONVERSION\";\n detail_method = rateData.gdsRateCategory;\n }\n rateCodes.forEach(rateCode => {\n let newChannel = {\n channel_id: selectedChannel.channel + \"\",\n acct_id: rateData.acctID,\n table_name: \"RATE\",\n table_id: rateData.rateID,\n detail_type: detail_type_name,\n detail_name: detail_type_name,\n detail_value: rateCode,\n detail_method: detail_method,\n mod_user_id: userId,\n begin_date: rateData.activeBeginDate ? rateData.activeBeginDate : \"\",\n end_date: rateData.activeEndDate ? rateData.activeEndDate : \"\",\n inactive_yn: \"N\",\n short_desc: rateData.interfaceShortDesc ? rateData.interfaceShortDesc : \"\",\n long_desc: rateData.interfaceLongDesc ? rateData.interfaceLongDesc : \"\",\n display_short_desc: rateData.interfaceShortDesc ? rateData.interfaceShortDesc : \"\",\n display_long_desc: rateData.interfaceLongDesc ? rateData.interfaceLongDesc : \"\",\n extended_long_desc: \"\"\n };\n builtChannelFilters.push(newChannel);\n });\n } else {\n // Existing rate\n let rateCodes = selectedChannel.rateCodes;\n rateCodes.forEach(rateCode => {\n let isExisting =\n updatedChannelFilters.find(\n cf =>\n cf.channel_id === selectedChannel.channel + \"\" && cf.detail_type === \"CONVERSION\" && cf.detail_value === rateCode\n ) !== undefined;\n if (!isExisting && (conversionChannels.length > 0) && (!filteredChannel || filteredChannel.inactive_yn === \"Y\")) {\n // from new added contracts\n let newChannel = {\n channel_id: selectedChannel.channel + \"\",\n acct_id: rateData.acctID,\n table_name: \"RATE\",\n table_id: rateData.rateID,\n detail_type: \"CONVERSION\",\n detail_name: \"CONVERSION\",\n detail_value: rateCode,\n detail_method: rateData.gdsRateCategory,\n mod_user_id: userId,\n begin_date: rateData.activeBeginDate ? rateData.activeBeginDate : \"\",\n end_date: rateData.activeEndDate ? rateData.activeEndDate : \"\",\n inactive_yn: \"N\",\n short_desc: rateData.interfaceShortDesc ? rateData.interfaceShortDesc : \"\",\n long_desc: rateData.interfaceLongDesc ? rateData.interfaceLongDesc : \"\",\n display_short_desc: rateData.interfaceShortDesc ? rateData.interfaceShortDesc : \"\",\n display_long_desc: rateData.interfaceLongDesc ? rateData.interfaceLongDesc : \"\",\n extended_long_desc: \"\"\n };\n builtChannelFilters.push(newChannel);\n }\n });\n\n if (conversionChannels && conversionChannels.length > 0) {\n conversionChannels.forEach(conversionChannel => {\n // RVNG-6992: Update active status of channel basing on the status of associated contracts\n // Find inactivated contracts\n let inactivatedContracts = rateData.savedContractsRateConversionCodesMap\n ? rateData.savedContractsRateConversionCodesMap.filter(contract => contract.inactive_yn === \"Y\")\n : [];\n let isInactivated = false;\n if (inactivatedContracts.length > 0) {\n // If there is inactivated contracts\n let rateCode = conversionChannel.detail_value;\n // Find contracts from the rate code\n let contractIDs = [];\n let contracts = rateData.savedContractsRateConversionCodesMap.filter(contract =>\n contract.contractRateConversionCodes.includes(rateCode)\n );\n if (contracts.length > 0) {\n // rateCode is rate conversion code\n contracts.forEach(contract => contractIDs.push(contract.contract_id));\n } else {\n contracts = rateAccessCodes.filter(contract => contract.accesscode === rateCode);\n if (contracts.length > 0) {\n // rateCode is rate access code\n contracts.forEach(contract => contractIDs.push(contract.code));\n }\n }\n\n inactivatedContracts.forEach(contract => {\n if (contractIDs.includes(contract.contract_id)) {\n isInactivated = true;\n }\n });\n\n if (isInactivated) {\n // Inactivate this channel\n conversionChannel = Object.assign({}, conversionChannel, { inactive_yn: \"Y\" });\n }\n }\n let conversionChannel_org = conversionChannels_org.find(item => item.detail_value === conversionChannel.detail_value);\n\n if (!conversionChannel_org) {\n // if it is added and active, copy it to target\n if (conversionChannel.inactive_yn === \"N\") {\n builtChannelFilters.push(conversionChannel);\n } else if (conversionChannels_org.length > 0) {\n // RVNG-7203: conversion code of this channel was changed and the channel is removed, inactivate the original one\n conversionChannels_org.forEach(channel => {\n if (channel.inactive_yn === \"N\") {\n channel.inactive_yn = \"Y\";\n channel.detail_type = \"\";\n builtChannelFilters.push(channel);\n }\n });\n }\n } else if (\n conversionChannel.inactive_yn !== conversionChannel_org.inactive_yn ||\n conversionChannel.short_desc !== conversionChannel_org.short_desc ||\n conversionChannel.long_desc !== conversionChannel_org.long_desc ||\n conversionChannel.mod_user_id !== conversionChannel_org.mod_user_id ||\n conversionChannel.begin_date !== conversionChannel_org.begin_date ||\n conversionChannel.end_date !== conversionChannel_org.end_date\n ) {\n // If it is changed active status or updated interface rate name/description or modified by another user, copy it to target\n if (conversionChannel.inactive_yn === \"Y\" && !isInactivated) {\n conversionChannel.detail_type = \"\";\n }\n builtChannelFilters.push(conversionChannel);\n }\n });\n }\n if (filteredChannel) {\n if (!filteredChannel_org) {\n if (filteredChannel.inactive_yn === \"N\") {\n builtChannelFilters.push(filteredChannel);\n }\n } else if (filteredChannel.inactive_yn !== filteredChannel_org.inactive_yn) {\n // If it is changed active status, copy it to target\n builtChannelFilters.push(filteredChannel);\n }\n }\n }\n });\n\n // Process for other channels (.i.e.non-ADS/GDS channels)\n otherChannels.forEach(channel => {\n let channelObj = builtChannelFilters.find(channelFilter => channelFilter.channel_id === channel);\n //RVNG-7269 Added below condition to avoid the duplicates of channels which are filtered.\n //Existing code specifies the if gds is unchecked in channel screen it unchecked individual channels and those are added in channel filters. \n if(channelObj === undefined){\n let filteredChannel_org = orgChannelFilters.find(cf => cf.channel_id === channel + \"\" && cf.detail_value === \"EXCLUDE\");\n let filteredChannel = updatedChannelFilters.find(cf => cf.channel_id === channel + \"\" && cf.detail_value === \"EXCLUDE\");\n if (filteredChannel) {\n if (!filteredChannel_org) {\n if (filteredChannel.inactive_yn === \"N\") {\n builtChannelFilters.push(filteredChannel);\n }\n } else if (filteredChannel.inactive_yn !== filteredChannel_org.inactive_yn) {\n // If it is changed active status, copy it to target\n builtChannelFilters.push(filteredChannel);\n }\n }\n let conversionChannel = updatedChannelFilters.find(cf => cf.channel_id === channel + \"\" && cf.detail_value === \"CONVERSION\");\n let conversionChannel_org = orgChannelFilters.find(cf => cf.channel_id === channel + \"\" && cf.detail_value === \"CONVERSION\");\n if (conversionChannel) {\n if (!conversionChannel_org) {\n if (conversionChannel.inactive_yn === \"Y\") {\n builtChannelFilters.push(conversionChannel);\n }\n } else if (conversionChannel.inactive_yn !== conversionChannel_org.inactive_yn ||\n conversionChannel.short_desc !== conversionChannel_org.short_desc ||\n conversionChannel.long_desc !== conversionChannel_org.long_desc ||\n conversionChannel.mod_user_id !== conversionChannel_org.mod_user_id ||\n conversionChannel.begin_date !== conversionChannel_org.begin_date ||\n conversionChannel.end_date !== conversionChannel_org.end_date) {\n builtChannelFilters.push(conversionChannel);\n }\n }\n }\n });\n\n return builtChannelFilters;\n};\n\nexport const formatRateWizardToXML = (rateWizardData, rateCategoryMap, channelsMap, rateAccessCodes, userId) => {\n const { rateData, rateItems, contracts, orgContracts } = rateWizardData;\n\n // Set default values for calculation method parameters;\n if (rateData.calculationMethod === undefined) {\n rateData.calculationMethod = \"CALENDAR\";\n rateData.calculationMaximum = 0;\n rateData.calculationMinimum = 0;\n }\n\n if (rateData.ifRateCategoryID !== NULL_LONG) {\n let selectedRateGroup = rateCategoryMap.find(category => category.id === rateData.ifRateCategoryID);\n rateData.gdsRateCategory = selectedRateGroup ? selectedRateGroup.code : \"\";\n }\n\n // NOTE: setRateWizard call expects only a subset of the keys present in RateData\n let formattedRateData = [\n \"itemGroupID\",\n \"acctID\",\n \"rateID\",\n \"cancelPolicyID\",\n \"gtdPolicyID\",\n \"alternateRateCategories\",\n \"barYN\",\n \"barFilter\",\n \"childRateList\",\n \"marketingMessageIDs\",\n \"yieldableYN\",\n \"allowsDirectBillYN\",\n \"chainParentRateID\",\n \"chainRatePropertyIDList\",\n \"calculationRateID\",\n \"autoChooseFirstItemYN\",\n \"parentID\",\n \"shortDesc\",\n \"interfaceShortDesc\",\n \"interfaceLongDesc\",\n \"longDesc\",\n \"calculationCalendarYN\",\n \"roundingFactor\",\n \"roundingSuffix\",\n \"notifyYN\",\n \"genericYN\",\n \"sellYN\",\n \"mealPlanIncludedYN\",\n \"mealPlanAddedYN\",\n \"mealPolicyID\",\n \"commissionAmount\",\n \"currencyCode\",\n \"ifRateCategoryID\",\n \"gdsRateCategory\",\n \"beginSellDate\",\n \"endSellDate\",\n \"beginSellTime\",\n \"endSellTime\",\n \"activeBeginDate\",\n \"activeEndDate\",\n \"commissionCalculationMethod\",\n \"calculationMethod\",\n \"strikethroughCalcMethod\",\n \"calculationMaximum\",\n \"calculationMinimum\",\n \"calculationAmount\",\n \"billingCode\",\n \"commissionPolicyID\",\n \"secureRule\"\n ].map(key => {\n return {\n name: \"field\",\n attrs: {\n name: key,\n value: rateData[key] === undefined ? \"\" : rateData[key]\n }\n };\n });\n // required keys for the setWizard call not present in the rateData chainRateYN bModified modUserID\n formattedRateData.push({ name: \"field\", attrs: { name: \"chainRateYN\", value: \"N\" } });\n formattedRateData.push({ name: \"field\", attrs: { name: \"bModified\", value: \"1\" } });\n formattedRateData.push({ name: \"field\", attrs: { name: \"modUserID\", value: userId } });\n\n let formattedRateItems = Object.keys(rateItems).map(key => {\n return {\n name: \"RateItem\",\n children: Object.keys(rateItems[key]).map(child => {\n if (child === \"rateRequests\") {\n let rateRequests = rateItems[key].rateRequests;\n return rateRequests.length > 0\n ? rateRequests.map(rateRequest => {\n return {\n name: \"RateRequest\",\n children: Object.keys(rateRequest).map(requestItem => {\n return {\n name: \"field\",\n attrs: {\n name: requestItem,\n value: rateRequest[requestItem]\n }\n };\n })\n };\n })\n : [];\n }\n return {\n name: \"field\",\n attrs: {\n name: child,\n value: rateItems[key][child]\n }\n };\n })\n };\n });\n\n let latestChannelFilters = updateChannelFilters(rateWizardData, channelsMap, rateAccessCodes, userId);\n let formattedChannelFilters = getFormattedDataForObject(latestChannelFilters, \"ChannelFilter\");\n let filteredContracts = contracts;\n \n // RVNG-6992: filter all inactive contracts and not in original contracts\n let updatedContracts = [];\n filteredContracts.forEach(contract => {\n let isExisting = orgContracts.find(ct => ct.contract_id === contract.contract_id) !== undefined;\n if (isExisting) {\n // if this contract is existing in original contracts, copy it to target\n updatedContracts.push(contract);\n } else if (contract.inactive_yn === \"N\") {\n // if this contract is not existing in original contracts, copy it to target if only it is active\n updatedContracts.push(contract);\n }\n });\n\n let formattedContracts = getFormattedDataForObject(updatedContracts, \"Contracts\");\n let result = {\n request: {\n Rate: [...formattedRateData, ...formattedRateItems, ...formattedChannelFilters, ...formattedContracts]\n }\n };\n let requestXml = jsontoxml(result, { escape: true });\n requestXml = escapeNewLineCharacters(requestXml);\n return requestXml;\n};\n//TODO: temporary function for testing setRateWizard call.\n//Remove this after RateWizard testing is done.\n/*\nexport const getXMLFile = (path, callback) => {\n let request = new XMLHttpRequest();\n request.open(\"GET\", path);\n request.setRequestHeader(\"Content-Type\", \"text/xml\");\n request.onreadystatechange = function() {\n if(request.readyState === 4 && request.status === 200) {\n console.log('request ', request);\n callback(request.responseXML);\n }\n };\n request.send();\n}\n*/\n","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from 'react';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table, Row, Col, Container } from 'reactstrap';\n\nclass ChildRates extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n childRateIndexOptions:this.props.data?[...this.props.data]:[],\n selectedChildRates:this.props.selectedChildRateIndexOptions?[...this.props.selectedChildRateIndexOptions]:[],\n rateItemsMoveLeft:\"\",\n rateItemsMoveRight:\"\",\n isLeftActive:\"\",\n isRightActive:\"\"\n };\n } \n\n toggle= () => this.props.handleDialogClose(); \n\n onSetButtonClick = () => {\n this.props.handleDialogSet(this.state.selectedChildRates);\n }\n\n onMoveRightClick = () => {\n if (!this.state.rateItemsMoveRight) return;\n let updatedSelectedItems =[...this.state.selectedChildRates];\n let updatedRateIndexOptions = [...this.state.childRateIndexOptions];\n let movedElement = updatedRateIndexOptions.filter(element => element.rateid === this.state.rateItemsMoveRight);\n if (!movedElement) return;\n\n // Add moved element to selected child rates on the right\n if (updatedSelectedItems.filter(element => element.rateid === this.state.rateItemsMoveRight).length === 0) {\n updatedSelectedItems.push(movedElement[0]);\n }\n // Remove moved element from child rate index options on the left\n updatedRateIndexOptions = updatedRateIndexOptions.filter(element => element.rateid !== this.state.rateItemsMoveRight);\n \n this.setState({selectedChildRates: updatedSelectedItems,\n childRateIndexOptions:updatedRateIndexOptions,\n rateItemsMoveRight:\"\",\n isLeftActive:\"\"});\n }\n\n onMoveLeftClick = () => {\n if (!this.state.rateItemsMoveLeft) return;\n let updatedSelectedItems =[...this.state.selectedChildRates];\n let updatedRateIndexOptions = [...this.state.childRateIndexOptions];\n let movedElement = updatedSelectedItems.filter(element => element.rateid === this.state.rateItemsMoveLeft);\n if (!movedElement) return;\n\n // Add moved element to child rate index options on the left\n if (updatedRateIndexOptions.filter(element => element.rateid === this.state.rateItemsMoveLeft).length === 0) {\n updatedRateIndexOptions.push(movedElement[0]);\n }\n \n // Remove moved element from selected child rates on the right\n updatedSelectedItems = updatedSelectedItems.filter(element => element.rateid !== this.state.rateItemsMoveLeft)\n \n this.setState({selectedChildRates: updatedSelectedItems,\n childRateIndexOptions:updatedRateIndexOptions,\n rateItemsMoveLeft:\"\",\n isRightActive:\"\"});\n }\n\n onMoveAllLeftClick = () => {\n let updatedSelectedItems =[...this.state.selectedChildRates];\n let updatedRateIndexOptions = [...this.state.childRateIndexOptions];\n if (!updatedSelectedItems) return;\n\n // Move all the elements from the right to the left\n updatedSelectedItems.forEach(selectedElement => {\n if (updatedRateIndexOptions.filter(element => element.rateid === selectedElement.rateid).length === 0) {\n updatedRateIndexOptions.push(selectedElement);\n }\n })\n this.setState({selectedChildRates: [],\n childRateIndexOptions:updatedRateIndexOptions});\n }\n\n onItemLeftClicked = (item, index) => {\n this.setState({rateItemsMoveRight: item.rateid,\n isLeftActive:index});\n }\n\n onItemRightClicked = (item, index) => {\n this.setState({rateItemsMoveLeft: item.rateid,\n isRightActive:index});\n }\n\n render() {\n const numberArr = [0,1,2,3,4,5,6,7,8,9];\n return ( \n \n \n \n \n \n \n \n Select Child Rates\n
\n \n \n {this.state.childRateIndexOptions.map((item,i) => { \n return (\n this.onItemLeftClicked(item,i)}>\n {item.shortDesc}\n )}\n )}\n \n
\n
\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n Lvl\n
\n \n \n {numberArr.map(element => {\n return ({element});\n })}\n \n
\n
\n \n \n Selected Child Rates\n
\n \n \n {this.state.selectedChildRates && this.state.selectedChildRates.map((item,i) => { \n return (\n this.onItemRightClicked(item, i)}>\n {item.shortDesc}\n )}\n )}\n \n
\n
\n \n
\n
\n
\n \n  \n \n \n
\n
\n );\n }\n}\n\nexport default ChildRates;","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nimport * as Constants from \"../../common/Constants\";\nimport {CALCULATION_AMOUNT_MAXLENGTH, ROUNDING_NEAREST_MAXLENGTH, ROUNDING_DECIMAL_MAXLENGTH} from \"../RateWizardConstants\";\nimport * as rateWizardService from \"../services/rate-wizard-service\";\nimport * as rateWizardUtil from \"../RateWizardUtil\";\nimport Select from \"react-select\";\nimport { Input, InputGroup, InputGroupAddon, Button } from \"reactstrap\";\nimport { connect } from \"react-redux\";\nimport { loadPolicies, updateSelectedPolicy } from \"../../common/redux/actions/rate-wizard/policies.js\";\nimport { setValidationError, clearValidationError } from \"../../common/redux/actions/rate-wizard/validation\";\nimport {\n loadCommCalcMethod,\n loadRateCalcMethod,\n loadStrikeThruCalcMethod,\n loadRateIndexOptions\n} from \"../../common/redux/actions/rate-wizard/controls.js\";\nimport * as CommonUtil from \"../../common/CommonUtil\";\nimport * as CommonService from \"../../common/services/common-service\";\nimport { updateRateWizardData } from \"../../common/redux/actions/rate-wizard\";\nimport MarketingMessages from \"./Controls/MarketingMessages\";\nimport RateCategories from \"./Controls/RateCategories\";\nimport RateParents from \"./Controls/RateParents\";\nimport ChildRates from \"./Controls/ChildRates\";\n\nclass Controls extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n displayedCommissionAmount: CommonUtil.getDisplayedNumberAmount(props.rateWizardData.rateData.commissionAmount, this.isCommissionPercentageEnabled()),\n displayedCalculationAmount: CommonUtil.getDisplayedNumberAmount(props.rateWizardData.rateData.calculationAmount, this.isPercentageSelected()),\n isMarketingMessageDisplayed: false,\n marketingMessages: [],\n selectedMarketingMessageIDs: props.rateWizardData.rateData.marketingMessageIDs,\n isRateCategoriesDisplayed: false, \n selectedRateCategoryCodes: props.rateWizardData.rateData.barFilter,\n isChooseParentDisplayed: false,\n selectedCalculationRateID: props.rateWizardData.rateData.calculationRateID,\n rateParentTree: \"\",\n isChildRatesDisplayed: false,\n selectedChildRateIndexOptions:[]\n };\n }\n\n componentDidMount() {\n let { loadCommCalcMethod, commCalcMethodOptions, loadStrikeThruCalcMethod, strikeThruCalcMethodOptions, loadRateIndexOptions, rateIndexOptions, loadRateCalcMethod, rateCalcMethodOptions, labelsMap } = this.props;\n\n this.loadPolicy(Constants.COMMISSION_POLICY_TYPE);\n this.loadPolicy(Constants.CANCEL_POLICY_TYPE);\n this.loadPolicy(Constants.GUARANTEE_POLICY_TYPE);\n this.loadPolicy(Constants.MEAL_PLAN_POLICY_TYPE);\n\n if (commCalcMethodOptions.length === 0) {\n loadCommCalcMethod(labelsMap[\"Use Inherited Value\"]? labelsMap[\"Use Inherited Value\"]: \"Use Inherited Value\");\n }\n \n if (rateCalcMethodOptions.length === 0) {\n loadRateCalcMethod();\n }\n\n if (strikeThruCalcMethodOptions.length === 0) {\n loadStrikeThruCalcMethod();\n }\n\n if (rateIndexOptions.length === 0) {\n loadRateIndexOptions(this.props.acctId,this.props.rateId);\n }\n\n if ((this.state.rateParentTree === \"\") && (this.state.selectedCalculationRateID !== Constants.NULL_LONG)) {\n if (this.isBaseOnBarSelected()) {\n CommonService.getBarRatesParent(this.props.acctId,this.props.rateId).then(response => {\n let rateParentTree = rateWizardUtil.extractItems(response, true);\n this.setState({rateParentTree: rateParentTree});\n });\n } else {\n CommonService.getRatesParent(this.props.acctId,this.props.rateId).then(response => {\n let rateParentTree = rateWizardUtil.extractItems(response, true); \n this.setState({rateParentTree: rateParentTree});\n });\n } \n }\n }\n\n loadPolicy = policyType => {\n let { policyOptions, acctId, labelsMap, loadPolicies } = this.props;\n if (!policyOptions[policyType] || policyOptions[policyType].length === 0) {\n loadPolicies(acctId, labelsMap[\"Use Inherited Value\"]? labelsMap[\"Use Inherited Value\"]: \"Use Inherited Value\", policyType);\n }\n };\n\n getPolicyDropDown = policyType => {\n let { policyOptions, updateSelectedPolicy, selectedPolicy, rateWizardData } = this.props;\n const { rateData } = rateWizardData;\n let keyMap = {\n [Constants.CANCEL_POLICY_TYPE]: 'cancelPolicyID',\n [Constants.GUARANTEE_POLICY_TYPE]: 'gtdPolicyID',\n [Constants.MEAL_PLAN_POLICY_TYPE]: 'mealPolicyID',\n [Constants.COMMISSION_POLICY_TYPE]: 'commissionPolicyID'\n }\n let selectedValue, onChangeHandler;\n if (keyMap[policyType] && policyOptions[policyType]) {\n selectedValue = policyOptions[policyType].find(option => option.value === rateData[keyMap[policyType]]);\n onChangeHandler = (selectedPolicy) => {\n let policyKey = keyMap[policyType];\n let policyValue = selectedPolicy.value;\n this.onChange(policyKey, policyValue);\n }\n }\n else {\n //TODO: remove this else block once all fields are being read from rateWizardData\n selectedValue = selectedPolicy[policyType];\n onChangeHandler = (selectedPolicy) => updateSelectedPolicy(selectedPolicy, policyType)\n }\n return (\n \n );\n };\n\n onChange = (stateName, newValue) => {\n let rateWizardData = this.props.rateWizardData;\n rateWizardData.rateData[stateName] = newValue;\n this.props.updateRateWizardData(rateWizardData);\n };\n\n onCalculationMethodChange = (newValue, isNewCreatedRate) => {\n let rateWizardData = this.props.rateWizardData;\n rateWizardData.rateData.calculationMethod = newValue;\n // RVNG-7072: for new created rate, if the calculation method is not virtual, have \"Rate for Sale\" autochecked\n if (isNewCreatedRate) {\n if (!Constants.VIRTUAL_CALCULATION_METHODS.includes(newValue)) {\n rateWizardData.rateData.sellYN = \"Y\";\n } else {\n rateWizardData.rateData.sellYN = \"N\";\n }\n }\n this.props.updateRateWizardData(rateWizardData);\n };\n\n isCommissionPolicyEnabled = () => {\n let { rateWizardData } = this.props;\n let { commissionCalculationMethod } = rateWizardData.rateData;\n return commissionCalculationMethod === 'POLICY';\n }\n\n isCommissionAmountEnabled = () => {\n let { rateWizardData } = this.props;\n let { commissionCalculationMethod } = rateWizardData.rateData;\n return commissionCalculationMethod === 'FLAT' || commissionCalculationMethod === 'BASED_ON_PCT';\n }\n\n isCommissionPercentageEnabled = () => {\n let { rateWizardData } = this.props;\n let { commissionCalculationMethod } = rateWizardData.rateData;\n return commissionCalculationMethod === 'BASED_ON_PCT';\n }\n\n isAddingAmountSelected = () => {\n let { rateWizardData } = this.props;\n let { calculationMethod } = rateWizardData.rateData;\n return calculationMethod === 'BASED_ON_ADD' || calculationMethod === 'BASED_ON_BAR_ADD';\n }\n\n isSubtractingAmountSelected = () => {\n let { rateWizardData } = this.props;\n let { calculationMethod } = rateWizardData.rateData;\n return calculationMethod === 'BASED_ON_SUB' || calculationMethod === 'BASED_ON_BAR_SUB';\n }\n\n isPercentageSelected = () => {\n let { rateWizardData } = this.props;\n let { calculationMethod } = rateWizardData.rateData;\n return calculationMethod === 'BASED_ON_PCT' || calculationMethod === 'BASED_ON_PCT_EXCLUDE'\n || calculationMethod === 'BASED_ON_BAR_PCT';\n }\n \n isBaseOnRateSelected = () => {\n let { rateWizardData } = this.props;\n let { calculationMethod } = rateWizardData.rateData;\n return calculationMethod === 'BASED_ON_ADD' || calculationMethod === 'BASED_ON_SUB'\n || calculationMethod === 'BASED_ON_PCT' || calculationMethod === 'BASED_ON_PCT_EXCLUDE';\n }\n\n isBaseOnBarSelected = () => {\n let { rateWizardData } = this.props;\n let { calculationMethod } = rateWizardData.rateData;\n return calculationMethod === 'BASED_ON_BAR_ADD' || calculationMethod === 'BASED_ON_BAR_SUB'\n || calculationMethod === 'BASED_ON_BAR_PCT';\n }\n\n isChildRateVisible = () => {\n let { rateWizardData } = this.props;\n let { calculationMethod } = rateWizardData.rateData;\n return calculationMethod === 'BAR_INDEX' || calculationMethod === 'DBAR_INDEX' || calculationMethod === 'RATE_INDEX';\n }\n\n onChangeCommissionCalcMethod = (option) => {\n let { rateWizardData } = this.props;\n let { commissionCalculationMethod, commissionAmount } = rateWizardData.rateData;\n if (commissionCalculationMethod === option.value) return;\n // reset values of either commissionAmount or comissionPolicy\n let selectedCalcMethods = ['FLAT', 'BASED_ON_PCT'];\n if (selectedCalcMethods.includes(option.value) && commissionAmount === Constants.UNDEFINED_VALUE) {\n this.onChange('commissionAmount', '0');\n }\n else if (!selectedCalcMethods.includes(option.value)) {\n this.onChange('commissionAmount', Constants.UNDEFINED_VALUE);\n }\n else if (commissionCalculationMethod === 'POLICY') {\n this.onChange('commissionPolicyID', Constants.NULL_LONG);\n }\n this.onChange('commissionCalculationMethod', option.value);\n this.onChange('commissionCalculationMethodName', option.label);\n }\n\n onAmountChange = (amount, isPercentage, isCommission) => {\n let displayedAmount = amount;\n let emittedAmount = amount;\n let number = amount.match(/^[0-9]+(\\.[0-9]+)?$/); \n let numberWithDot = amount.match(/^[0-9]+(\\.)$/);\n if ((number === null) && (numberWithDot === null)) {\n // If we have no match, value will be empty.\n displayedAmount = \"\";\n emittedAmount = 0;\n } else {\n // Format number (.i.e. 04 to 4 or 12. to 12 or .4 to 0.4 or 12.00 to 12) \n emittedAmount = Number(emittedAmount);\n \n if (isPercentage) {\n emittedAmount = emittedAmount/100;\n }\n }\n if (isCommission) {\n // Commission Amount\n this.onChange('commissionAmount', emittedAmount);\n this.setState({displayedCommissionAmount:displayedAmount});\n } else {\n // Calculation Amount\n this.onChange('calculationAmount', emittedAmount);\n this.setState({displayedCalculationAmount:displayedAmount});\n }\n }\n\n onRoundingChange = (amount, isRoundToDecimal) => {\n let updatedAmount = amount;\n\n let intNumber = amount.match(/^[0-9]+$/); \n let numberWithDot = amount.match(/^[0-9]+(\\.)$/);\n if ((intNumber === null) && (numberWithDot === null)) {\n // If we have no match, value will be empty.\n updatedAmount = \"\";\n }\n\n if (updatedAmount!==\"\") {\n // Format number (.i.e. 04 to 4 or 12. to 12)\n updatedAmount = Number(updatedAmount);\n }\n \n if (isRoundToDecimal) {\n // Round to Decimal\n this.onChange('roundingSuffix', updatedAmount);\n } else {\n // Round to Nearest\n this.onChange('roundingFactor', updatedAmount);\n }\n }\n\n onMarketingMessagesClick = (rateId) => {\n rateWizardService.getMarketingMessages(rateId).then(response => {\n let marketingMessages = rateWizardUtil.buildMarketingMessagesMap(response);\n this.setState({ isMarketingMessageDisplayed: true,\n marketingMessages: marketingMessages});\n }); \n }\n\n onChildRatesClick = () => {\n let rateData = this.props.rateWizardData.rateData;\n // Build selected child rate objects from childRateList and childShortDescRateList\n let childRateIndexOptions = [];\n childRateIndexOptions = CommonUtil.buildSelectedChildRateIndexOptions(rateData.childRateList, rateData.childShortDescRateList);\n this.setState({ isChildRatesDisplayed: true, selectedChildRateIndexOptions: childRateIndexOptions});\n }\n\n onRateCategoriesClick = () => {\n this.setState({ isRateCategoriesDisplayed: true });\n }\n\n onChooseParentClick = (acctId,rateId) => {\n if (this.isBaseOnBarSelected()) {\n CommonService.getBarRatesParent(acctId,rateId).then(response => {\n let rateParentTree = rateWizardUtil.extractItems(response, true);\n this.setState({ isChooseParentDisplayed: true,\n rateParentTree: rateParentTree});\n });\n } else {\n CommonService.getRatesParent(acctId,rateId).then(response => {\n let rateParentTree = rateWizardUtil.extractItems(response, true); \n this.setState({ isChooseParentDisplayed: true,\n rateParentTree: rateParentTree});\n });\n } \n }\n\n handleMarMessageDialogClose = () => {\n this.setState({ isMarketingMessageDisplayed: false });\n }\n\n handleRateCategoriesDialogClose = () => {\n this.setState({ isRateCategoriesDisplayed: false });\n }\n\n handleChooseParentsDialogClose = () => {\n this.setState({ isChooseParentDisplayed: false });\n }\n\n handleChildRatesDialogClose = () => {\n this.setState({ isChildRatesDisplayed: false });\n }\n\n handleMarketingMessagesSet = (marketingMessageIDs) => {\n this.onChange('marketingMessageIDs', marketingMessageIDs);\n this.setState({ isMarketingMessageDisplayed: false,\n selectedMarketingMessageIDs:marketingMessageIDs});\n }\n\n handleRateCategoriesSet = (rateCategoryCodes) => {\n this.onChange('barFilter', rateCategoryCodes);\n this.setState({ isRateCategoriesDisplayed: false,\n selectedRateCategoryCodes:rateCategoryCodes});\n }\n\n handleChooseParentSet = (selectedCalculationRateID) => {\n this.onChange('calculationRateID', selectedCalculationRateID);\n this.setState({ isChooseParentDisplayed: false,\n selectedCalculationRateID:selectedCalculationRateID\n });\n }\n\n handleChildRatesSet = (selectedChildRates) => {\n // Build childRateList and childShortDescRateList from selected child rate objects\n let updatedList = \"\";\n let updatedShortDescList = \"\";\n\n if (selectedChildRates) { \n selectedChildRates.forEach(element => {\n updatedList = updatedList + element.rateid + \",\";\n updatedShortDescList = updatedShortDescList + element.shortDesc + \",\";\n });\n \n if (updatedList.search(\",\") > 0) {\n updatedList = updatedList.substring(0, updatedList.length-1);\n }\n \n if (updatedShortDescList.search(\",\") > 0) {\n updatedShortDescList = updatedShortDescList.substring(0, updatedShortDescList.length-1);\n }\n }\n\n this.onChange('childRateList', updatedList);\n this.onChange('childShortDescRateList', updatedShortDescList);\n\n this.setState({ isChildRatesDisplayed: false,\n selectedChildRateIndexOptions:selectedChildRates\n });\n }\n\n render() {\n let rateData = this.props.rateWizardData.rateData;\n let {\n commCalcMethodOptions,\n rateCalcMethodOptions,\n strikeThruCalcMethodOptions,\n rateWizardData,\n currencies,\n labelsMap,\n acctId,\n rateId,\n disableComponent,\n enableComponent\n } = this.props;\n const { rateData: {\n commissionCalculationMethod,\n calculationMethod,\n strikethroughCalcMethod,\n currencyCode,\n roundingSuffix,\n roundingFactor,\n isNewRate\n } } = rateWizardData;\n let selectedCommCalcMethod = commCalcMethodOptions.find(option => option.value === commissionCalculationMethod);\n \n if (!calculationMethod) {\n this.onCalculationMethodChange(\"CALENDAR\", isNewRate);\n }\n let selectedRateCalcMethod = rateCalcMethodOptions.find(option => option.value === calculationMethod);\n let selectedstrikethruCalcMethod = strikeThruCalcMethodOptions.find(option => option.value === (strikethroughCalcMethod \n ?strikethroughCalcMethod:strikeThruCalcMethodOptions[0].value));\n let selectedCurrencyCode = currencies.find(option => option.value === currencyCode);\n let selectedParentRatesLabel = \"\";\n if (this.state.rateParentTree && this.state.selectedCalculationRateID !== Constants.NULL_LONG) {\n let itemsMap = [];\n itemsMap = rateWizardUtil.buildItemsMap(itemsMap, this.state.rateParentTree);\n selectedParentRatesLabel = (itemsMap && itemsMap[this.state.selectedCalculationRateID])?itemsMap[this.state.selectedCalculationRateID]:\"\";\n }\n\n if ((this.isPercentageSelected() || this.isAddingAmountSelected() || this.isSubtractingAmountSelected()) \n && ((this.state.selectedCalculationRateID === Constants.NULL_LONG) || (this.state.selectedCalculationRateID === \"\"))) {\n this.props.setValidationError({\n type: 'toast',\n errorMessage: \"Please choose a rate calculation parent.\"\n })\n } else {\n this.props.clearValidationError();\n }\n\n return (\n \n {Constants.SECTION_HEADER(labelsMap[\"Commission Calculation Method:\"]? labelsMap[\"Commission Calculation Method:\"]: \"Commission Calculation Method:\")}\n
\n {CommonUtil.genericFieldContainer(labelsMap[\"Currency:\"]? labelsMap[\"Currency:\"]: \"Currency:\",\n this.onChange('currencyCode', option.value)}\n />,\n false)}\n {CommonUtil.genericFieldContainer(labelsMap[\"Commission Type:\"]? labelsMap[\"Commission Type:\"]: \"Commission Type:\",\n ,\n false\n )}\n {this.isCommissionPolicyEnabled() && CommonUtil.genericFieldContainer(labelsMap[\"Commission Policy:\"]? labelsMap[\"Commission Policy:\"]: \"Commission Policy:\", this.getPolicyDropDown(Constants.COMMISSION_POLICY_TYPE), false)}\n {this.isCommissionAmountEnabled() && CommonUtil.genericFieldContainer(labelsMap[\"Commission Amount:\"]? labelsMap[\"Commission Amount:\"]: \"Commission Amount:\",\n \n this.onAmountChange(event.target.value, this.isCommissionPercentageEnabled(), true)\n }\n />\n {this.isCommissionPercentageEnabled() && %}\n , false)}\n
\n\n {Constants.SECTION_HEADER(labelsMap[\"Policies:\"]? labelsMap[\"Policies:\"]: \"Policies:\")}\n
\n {CommonUtil.genericFieldContainer(labelsMap[\"Guarantee:\"]? labelsMap[\"Guarantee:\"]: \"Guarantee:\", \n this.getPolicyDropDown(Constants.GUARANTEE_POLICY_TYPE), \n false\n )}\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Cancel:\"]? labelsMap[\"Cancel:\"]: \"Cancel:\",\n this.getPolicyDropDown(Constants.CANCEL_POLICY_TYPE, this.props.selectedPolicy),\n false\n )} \n {CommonUtil.genericFieldContainer(labelsMap[\"Meal Plans:\"]? labelsMap[\"Meal Plans:\"]: \"Meal Plans:\", \n this.getPolicyDropDown(Constants.MEAL_PLAN_POLICY_TYPE), \n false\n )}\n {CommonUtil.genericFieldContainer(labelsMap[\"Marketing Messages:\"]? labelsMap[\"Marketing Messages:\"]: \"Marketing Messages:\",\n ,\n false\n )}\n {(this.state.isMarketingMessageDisplayed === true) && }\n\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Meal Plan Included YN:\"]? labelsMap[\"Meal Plan Included YN:\"]: \"Meal Plan Included YN:\",\n CommonUtil.getLabelOrCheckbox(rateData.mealPlanIncludedYN === \"Y\", event =>\n this.onChange(\"mealPlanIncludedYN\", event.target.checked ? \"Y\" : \"N\", false)\n ),\n false\n )}\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Meal Plan Added YN:\"]? labelsMap[\"Meal Plan Added YN:\"]: \"Meal Plan Added YN:\",\n CommonUtil.getLabelOrCheckbox(rateData.mealPlanAddedYN === \"Y\", event =>\n this.onChange(\"mealPlanAddedYN\", event.target.checked ? \"Y\" : \"N\", false)\n ),\n false\n )}\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Auto Choose First Item:\"]? labelsMap[\"Auto Choose First Item:\"]: \"Auto Choose First Item:\",\n CommonUtil.getLabelOrCheckbox(rateData.autoChooseFirstItemYN === \"Y\", event =>\n this.onChange(\"autoChooseFirstItemYN\", event.target.checked ? \"Y\" : \"N\", false)\n ),\n false\n )}\n
\n\n {Constants.SECTION_HEADER(labelsMap[\"Rate Calculation Method:\"]? labelsMap[\"Rate Calculation Method:\"]: \"Rate Calculation Method:\")}\n
\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Calculation Method:\"]? labelsMap[\"Calculation Method:\"]: \"Calculation Method:\",\n {\n if(option.value === 'CALENDAR') {\n enableComponent('rates');\n }\n else{\n disableComponent('rates');\n }\n this.onCalculationMethodChange(option.value, isNewRate);\n }}\n />,\n false\n )}\n \n {(this.isPercentageSelected() || this.isAddingAmountSelected() || this.isSubtractingAmountSelected())\n && CommonUtil.genericFieldContainer(\n labelsMap[\"Variable Calculation?:\"]? labelsMap[\"Variable Calculation?:\"]: \"Variable Calculation?:\",\n CommonUtil.getLabelOrCheckbox(rateData.calculationCalendarYN === \"Y\", event =>\n this.onChange(\"calculationCalendarYN\", event.target.checked ? \"Y\" : \"N\", true)\n ),\n false\n )\n }\n\n {CommonUtil.genericFieldContainer(\n labelsMap[\"Rate for Sale:\"]? labelsMap[\"Rate for Sale:\"]: \"Rate for Sale:\",\n CommonUtil.getLabelOrCheckbox(rateData.sellYN === \"Y\", event =>\n this.onChange(\"sellYN\", event.target.checked ? \"Y\" : \"N\", true)\n ),\n false\n )}\n \n {(this.isBaseOnRateSelected() || (selectedRateCalcMethod && selectedRateCalcMethod.value === 'CALENDAR')) \n && CommonUtil.genericFieldContainer(\n labelsMap[\"Rate Available for Bar:\"]? labelsMap[\"Rate Available for Bar:\"]: \"Rate Available for Bar:\",\n CommonUtil.getLabelOrCheckbox(rateData.barYN === \"Y\", event =>\n this.onChange(\"barYN\", event.target.checked ? \"Y\" : \"N\", true)\n ),\n false\n )}\n \n {CommonUtil.genericFieldContainer(\n labelsMap[\"Strikethrough Calculation Method:\"]? labelsMap[\"Strikethrough Calculation Method:\"]: \"Strikethrough Calculation Method:\",\n this.onChange('strikethroughCalcMethod', option.value)}\n />,\n false\n )}\n \n {(this.isPercentageSelected() || this.isAddingAmountSelected() || this.isSubtractingAmountSelected())\n && CommonUtil.genericFieldContainer(\n labelsMap[\"Choose Parent:\"]? labelsMap[\"Choose Parent:\"]: \"Choose Parent:\",\n
\n {selectedParentRatesLabel}  \n \n
,\n false\n )}\n {(this.state.isChooseParentDisplayed === true) && }\n\n {(rateData.calculationCalendarYN === \"N\") && (this.isPercentageSelected() || this.isAddingAmountSelected() || this.isSubtractingAmountSelected())\n && CommonUtil.genericFieldContainer(labelsMap[\"Calculation Amount:\"]? labelsMap[\"Calculation Amount:\"]: \"Calculation Amount:\",\n \n this.onAmountChange(event.target.value, this.isPercentageSelected(), false)\n }\n />\n {this.isPercentageSelected() && %}\n {this.isAddingAmountSelected() && +}\n {this.isSubtractingAmountSelected() && -}\n , false)\n }\n\n {(this.isPercentageSelected() || this.isAddingAmountSelected() || this.isSubtractingAmountSelected())\n && CommonUtil.genericFieldContainer(\n labelsMap[\"Round to Nearest:\"]? labelsMap[\"Round to Nearest:\"]: \"Round to Nearest:\",\n this.onRoundingChange(event.target.value, false)} />,\n false\n )\n }\n\n {(this.isPercentageSelected() || this.isAddingAmountSelected() || this.isSubtractingAmountSelected())\n && CommonUtil.genericFieldContainer(\n labelsMap[\"Round to Decimal:\"]? labelsMap[\"Round to Decimal:\"]: \"Round to Decimal:\",\n this.onRoundingChange(event.target.value, true)} />,\n false\n )\n }\n\n {(this.state.isRateCategoriesDisplayed === true) && }\n \n {(this.isChildRateVisible()) && CommonUtil.genericFieldContainer(\n labelsMap[\"Select Child Rates:\"]? labelsMap[\"Select Child Rates:\"]: \"Select Child Rates:\",\n ,\n false\n )}\n {(this.state.isChildRatesDisplayed === true) && }\n
\n
\n );\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n loadPolicies: (acctId, nullLabel, policyType) => dispatch(loadPolicies(acctId, nullLabel, policyType)),\n updateSelectedPolicy: (selectedPolicy, policyType) => dispatch(updateSelectedPolicy(selectedPolicy, policyType)),\n loadCommCalcMethod: nullLabel => dispatch(loadCommCalcMethod(nullLabel)),\n loadRateCalcMethod: nullLabel => dispatch(loadRateCalcMethod(nullLabel)),\n loadRateIndexOptions: (acctId, rateid) => dispatch(loadRateIndexOptions(acctId, rateid)),\n loadStrikeThruCalcMethod: nullLabel => dispatch(loadStrikeThruCalcMethod(nullLabel)),\n updateRateWizardData: rateData => dispatch(updateRateWizardData(rateData)),\n setValidationError: validationErrorObject => dispatch(setValidationError(validationErrorObject)),\n clearValidationError: () => dispatch(clearValidationError())\n});\n\nconst mapStateToProps = state => {\n return {\n selectedPolicy: state.rateWizard.selectedPolicy,\n policyOptions: state.rateWizard.policyOptions,\n commCalcMethodOptions: state.rateWizard.commCalcMethodOptions,\n rateCalcMethodOptions: state.rateWizard.rateCalcMethodOptions,\n strikeThruCalcMethodOptions: state.rateWizard.strikeThruCalcMethodOptions,\n rateWizardData: state.rateWizard.rateWizardData,\n rateCategoryMap: state.rateWizard.rateCategoryMap,\n currencies: state.rateWizard.currencies,\n rateIndexOptions: state.rateWizard.rateIndexOptions,\n labelsMap: state.rateWizard.labelMap\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Controls);\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nexport class Restrictions extends React.Component {\n render() {\n return
Restrictions
;\n }\n}\n","import { \n TOGGLE_REQUIRES_CONTRACT_FLAG,\n TOGGLE_USE_CONTRACT_DESCRIPTION_FLAG,\n \n} from \"../../actionTypes\";\n\nconst toggleRequiresContractFlag = () => {\n return {\n type: TOGGLE_REQUIRES_CONTRACT_FLAG\n }\n}\n\nconst toggleUseContractDescriptionFlag = () => {\n return {\n type: TOGGLE_USE_CONTRACT_DESCRIPTION_FLAG\n }\n}\n\nexport const toggleFlag = (name) => {\n const flagMap = {\n requiresContract: toggleRequiresContractFlag,\n useContractDescription: toggleUseContractDescriptionFlag\n }\n return flagMap[name]();\n}\n\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nimport { Button, CardHeader, Col, Form, FormGroup, Label, Input } from \"reactstrap\";\nimport { connect } from \"react-redux\";\nimport Select from \"react-select\";\nimport { GDS_CHANNELS_MAP, REQUIRED_CONTRACT_RATE_CATEGORIES } from \"../RateWizardConstants\";\nimport { NULL_LONG } from \"../../common/Constants\";\nimport ReactTable from \"react-table\";\nimport {\n setValidationError,\n clearValidationError\n} from \"../../common/redux/actions/rate-wizard/validation\"\nimport {\n toggleFlag,\n} from \"../../common/redux/actions/rate-wizard/contracts\";\nimport { updateRateWizardData } from \"../../common/redux/actions/rate-wizard\";\nimport { validateRoomCode } from \"../services/rate-wizard-service.js\";\nimport * as rateWizardService from \"../../rate-wizard/services/rate-wizard-service\";\nimport * as rateWizardUtil from \"../../rate-wizard/RateWizardUtil\";\nimport { ModalComponent } from \"../../common/components/ModalComponent\";\nimport { toast } from \"react-toastify\";\n\nclass Contracts extends React.Component {\n constructor(props) {\n super(props);\n const { rateWizardData: { rateData } } = this.props;\n this.state = {\n gds: true,\n voice: true,\n bookingengine: true,\n pms: true,\n savedContracts: [],\n selectedContract: undefined,\n contractRateConversionCodesMap: rateData.savedContractsRateConversionCodesMap? [...rateData.savedContractsRateConversionCodesMap]: []\n }\n }\n componentDidMount() {\n const { rateWizardData, rateWizardData: { contracts, rateData }, rateAccessCodes } = this.props;\n let { contractRateConversionCodesMap } = this.state;\n let savedContractsRateConversionCodesMap = [];\n let savedContracts = [];\n contracts.forEach((contract) => {\n const rateAccessCode = rateAccessCodes.find((rateAccessCode) => rateAccessCode.code === contract.contract_id);\n // RVNG-7198: handle for orphaned contracts\n if (rateAccessCode) {\n if (!rateData.savedContractsRateConversionCodesMap\n || rateData.savedContractsRateConversionCodesMap.find(contractItem => contractItem.contract_id === contract.contract_id) === undefined) {\n // RVNG-7338: build savedContractsRateConversionCodesMap and savedContracts in the same time because the web service call in React is async\n rateWizardService.getRateAccessCodes(rateData.acctID, rateData.rateID, 2, contract.contract_id).then(response => {\n let contractRateConversionCodes = rateWizardUtil.buildRateAccessCodesMapForContract(response);\n savedContractsRateConversionCodesMap.push({ contract_id: contract.contract_id, contractRateConversionCodes, inactive_yn: contract.inactive_yn})\n // Check if the added contracts have duplicated conversion codes\n let rateConversionCodes = [];\n contractRateConversionCodes.forEach (item => {\n rateConversionCodes.push(item.accesscode);\n });\n // RVNG-7025: Same contract access codes can be reused in multiple rates\n if (contractRateConversionCodes.length === 0) {\n const code = rateAccessCodes.find((rateAccessCode) => rateAccessCode.code === contract.contract_id);\n code && rateConversionCodes.push(code.accesscode);\n }\n (rateConversionCodes.length > 0) && this.validateUsedRateConversionCodes(rateConversionCodes, contract.contract_id, false);\n // Update savedContractsRateConversionCodesMap on redux store\n // Need to update it one by one because the web service call is async\n rateWizardData.rateData.savedContractsRateConversionCodesMap = savedContractsRateConversionCodesMap;\n this.props.updateRateWizardData(rateWizardData);\n\n // update savedContracts\n let contractObject = {};\n contractObject.contract = rateAccessCode.description;\n contractObject.channelAccessCodes = this.getChannelAccessCodes(rateAccessCode.accesscode, contract.contract_id, contractRateConversionCodes, false);\n contractObject.active = contract.inactive_yn === 'Y' ? false : true;\n savedContracts.push(contractObject);\n this.setState({ savedContracts, contractRateConversionCodesMap: savedContractsRateConversionCodesMap});\n });\n } else {\n let contractRateConversionCodeMap = contractRateConversionCodesMap? contractRateConversionCodesMap.find((ct) => ct.contract_id === contract.contract_id): \"\";\n let contractRateConversionCodes = contractRateConversionCodeMap? contractRateConversionCodeMap.contractRateConversionCodes: \"\";\n\n // update savedContracts\n let contractObject = {};\n contractObject.contract = rateAccessCode.description;\n contractObject.channelAccessCodes = this.getChannelAccessCodes(rateAccessCode.accesscode, contract.contract_id, contractRateConversionCodes, false);\n contractObject.active = contract.inactive_yn === 'Y' ? false : true;\n savedContracts.push(contractObject);\n this.setState({ savedContracts });\n }\n }\n });\n if (!rateData.gdsRateCategory && rateData.ifRateCategoryID === NULL_LONG) {\n this.props.setValidationError({\n type: 'toast',\n errorMessage: 'Please select a rate category'\n });\n } else {\n this.props.clearValidationError();\n }\n let activeContracts = contracts.filter(contract => contract.inactive_yn !== 'Y');\n if (REQUIRED_CONTRACT_RATE_CATEGORIES.includes(rateData.gdsRateCategory) && activeContracts.length === 0) {\n this.props.setValidationError({\n type: 'toast',\n errorMessage: 'Please select a valid contract'\n });\n } else {\n this.props.clearValidationError();\n }\n }\n\n handleOptionChange = (event) => {\n // this.props.toggleIsGenericRateSelected(event.target.value);\n const { rateWizardData } = this.props;\n rateWizardData.rateData.genericYN = event.target.value === 'yes' ? 'Y' : 'N';\n this.props.updateRateWizardData(rateWizardData);\n }\n\n areContractsEnabled = () => {\n const { rateWizardData: { rateData: { gdsRateCategory } } } = this.props;\n return !REQUIRED_CONTRACT_RATE_CATEGORIES.includes(gdsRateCategory);\n }\n\n validateUsedRateConversionCodes = (rateConversionCodes, contract_id, isErrorRaised) => {\n const { rateWizardData, accountPreferences } = this.props;\n const rateCodeGenerateFromContract = accountPreferences.get(\"RATEWZ_RATECODE_CONVERSION_CONTRACT_YN\");\n //Sample conversionCodeParam = \"'PIBB','PIB','PIBK'\";\n let conversionCodeParam = \"\";\n let i = 0;\n for (i =0; i < rateConversionCodes.length -1; i++) {\n conversionCodeParam += \"'\" + rateConversionCodes[i] + \"',\";\n }\n conversionCodeParam += \"'\" + rateConversionCodes[i] + \"'\";\n \n validateRoomCode(rateWizardData.rateData.acctID, rateWizardData.rateData.rateID, conversionCodeParam).then((response) => {\n let takencode = response.Validation[0];\n let duplicatedCodes = [];\n takencode.takencode && rateConversionCodes.forEach((code) => {\n if (takencode.takencode.includes(code)) {\n duplicatedCodes.push(code);\n }\n });\n if (duplicatedCodes.length > 0 ) {\n if (isErrorRaised && rateCodeGenerateFromContract === \"Y\") {\n toast.error(\"The channel conversion codes \" + duplicatedCodes.toString() + \" are already being used on another rate. Channel conversion codes were not added for this contract.\");\n }\n rateWizardData.rateData.duplicatedRateConversionCodes = duplicatedCodes.toString();\n this.props.updateRateWizardData(rateWizardData);\n } else {\n if (!rateWizardData.rateData.hasValidRateConversionCodes) {\n // Have valid (not duplicated) rate conversion code\n rateWizardData.rateData.hasValidRateConversionCodes= true;\n }\n if (!rateWizardData.rateData.contractsWithValidRateConversionCodes) {\n rateWizardData.rateData.contractsWithValidRateConversionCodes = [];\n } \n // track all contracts which do not have duplicated rate conversion codes\n rateWizardData.rateData.contractsWithValidRateConversionCodes.push(contract_id);\n \n this.props.updateRateWizardData(rateWizardData);\n }\n });\n }\n\n getChannelAccessCodes = (accessCode, contract_id, contractRateConversionCodes, codeValidated) => {\n let rateConversionCodes = [];\n let accessCodes = ['Galileo', 'Sabre', 'Amadeus', 'ADS', 'Worldspan'].map((ac) => {\n // Use contract conversion code if it is existing\n let rateConversionCode = contractRateConversionCodes? contractRateConversionCodes.find((rateAccessCode) => rateAccessCode.channelid === GDS_CHANNELS_MAP[ac] + ''): \"\";\n let acCode = rateConversionCode? rateConversionCode.accesscode: accessCode;\n rateConversionCodes.push(acCode);\n return ac + ' - ' + acCode;\n });\n if (codeValidated) {\n this.validateUsedRateConversionCodes(rateConversionCodes, contract_id, true);\n }\n\n return accessCodes;\n }\n\n saveContract = () => {\n let { selectedContract, savedContracts, contractRateConversionCodesMap } = this.state;\n const { rateAccessCodes, rateWizardData, userId } = this.props;\n\n let isContractAdded = rateWizardData.contracts.find((contract) => contract.contract_id === selectedContract.value) !== undefined;\n if (isContractAdded) {\n toast.warning('This contract is already associated to this rate', {\n position: 'top-center'\n });\n return;\n }\n\n const savedContract = {\n contract_id: selectedContract.value,\n inactive_yn: \"N\",\n mod_user_id: userId,\n language: \"USENGLISH\",\n rate_id: rateWizardData.rateData.rateID\n }\n let { accesscode } = selectedContract;\n rateWizardData.contracts = [...rateWizardData.contracts, savedContract];\n const rateAccessCode = rateAccessCodes.find((rateAccessCode) => rateAccessCode.code === selectedContract.value);\n let contractObject = {};\n contractObject.contract = rateAccessCode.description;\n let contractRateConversionCodeMap = contractRateConversionCodesMap? contractRateConversionCodesMap.find((contract) => contract.contract_id === selectedContract.value): \"\";\n let contractRateConversionCodes = contractRateConversionCodeMap? contractRateConversionCodeMap.contractRateConversionCodes: \"\";\n contractObject.channelAccessCodes = this.getChannelAccessCodes(rateAccessCode.accesscode, selectedContract.value, contractRateConversionCodes, true);\n contractObject.active = \"Y\"; \n savedContracts.push(contractObject);\n this.setState({ savedContracts });\n // Need to recalculate channelsTableData\n if (rateWizardData.rateData.channelsTableData) {\n rateWizardData.rateData.channelsTableData=\"\";\n }\n // rateWizardData.rateData.savedContractsRateConversionCodesMap contains map of saved contract and associated rate conversion codes\n if (!rateWizardData.rateData.savedContractsRateConversionCodesMap) {\n rateWizardData.rateData.savedContractsRateConversionCodesMap = [];\n }\n let isRateConversionCodeExisting = rateWizardData.rateData.savedContractsRateConversionCodesMap.find((contract) => contract.contract_id === selectedContract.value) !== undefined;\n if (!isRateConversionCodeExisting) {\n let contractRateConversionCodesItem = contractRateConversionCodesMap.find((contract)=> contract.contract_id === selectedContract.value);\n if (contractRateConversionCodesItem) {\n // Update savedContractsRateConversionCodesMap on redux store only when contract is saved\n rateWizardData.rateData.savedContractsRateConversionCodesMap.push(contractRateConversionCodesItem);\n }\n }\n rateWizardData.rateData.contractsChanged = true;\n this.props.updateRateWizardData(rateWizardData);\n this.props.clearValidationError();\n // Refer here for the logic https://exstash.pegs.com/projects/RES/repos/rvng-flex-ratewizard/browse/src/com/pegs/flex/rezview/views/rateWizard/accessCodes.mxml#121\n if(accesscode.length !== 3) {\n this.toggle();\n }\n }\n\n setRateCategory = (option) => {\n const { rateWizardData } = this.props;\n const { savedContracts } = this.state;\n let alternateRateCategories = rateWizardData.rateData.alternateRateCategories;\n if (rateWizardData.rateData.ifRateCategoryID !== option.id) { \n let rateCategoriesList = alternateRateCategories ? alternateRateCategories.split(\",\"):[];\n if (rateCategoriesList.length > 0) {\n rateCategoriesList = rateCategoriesList.filter(rateCategory => rateCategory !== rateWizardData.rateData.ifRateCategoryID);\n }\n if (!rateCategoriesList.includes(option.id)) {\n rateCategoriesList.push(option.id);\n }\n alternateRateCategories = rateCategoriesList.join(\",\");\n }\n rateWizardData.rateData = Object.assign({}, rateWizardData.rateData,\n {\n gdsRateCategory: option.value,\n ifRateCategoryID: option.id,\n alternateRateCategories \n })\n this.props.updateRateWizardData(rateWizardData);\n let activeContracts = savedContracts.filter(contract => contract.active);\n if (REQUIRED_CONTRACT_RATE_CATEGORIES.includes(option.value) && activeContracts.length === 0) {\n this.props.setValidationError({\n type: 'toast',\n errorMessage: 'Please select a valid contract'\n });\n } else {\n this.props.clearValidationError();\n }\n // RVNG-7049: Rate Wizard: React - if Rate Category is Negotiated or Consortia \"Requires Contract?\" should be checked\n if (REQUIRED_CONTRACT_RATE_CATEGORIES.includes(rateWizardData.rateData.gdsRateCategory)) {\n rateWizardData.rateData.secureRule = \"CONTRACT\";\n } else {\n rateWizardData.rateData.secureRule = \"\";\n }\n // Need to recalculate channelsTableData\n if (rateWizardData.rateData.channelsTableData) {\n rateWizardData.rateData.channelsTableData=\"\";\n }\n // RVNG-6908: Reset isChannelsDataReady to make sure channelsData will be regenerated before use\n rateWizardData.rateData.isChannelsDataReady = false;\n updateRateWizardData(rateWizardData);\n }\n\n setContract = (selectedContract) => {\n let { contractRateConversionCodesMap } = this.state;\n const { rateWizardData } = this.props;\n let isRateConversionCodeExisting = contractRateConversionCodesMap.find((contract) => contract.contract_id === selectedContract.value) !== undefined;\n if (!isRateConversionCodeExisting) {\n rateWizardService.getRateAccessCodes(rateWizardData.rateData.acctID, rateWizardData.rateData.rateID, 2, selectedContract.value).then(response => {\n let contractRateConversionCodes = rateWizardUtil.buildRateAccessCodesMapForContract(response);\n contractRateConversionCodesMap.push({ \"contract_id\": selectedContract.value, contractRateConversionCodes, inactive_yn: \"N\" });\n this.setState({ selectedContract,\n contractRateConversionCodesMap});\n });\n } else {\n this.setState({ selectedContract });\n }\n }\n\n toggleContract = (index) => {\n const { rateWizardData, rateWizardData: {rateData} } = this.props;\n const { savedContracts } = this.state;\n savedContracts[index].active = !savedContracts[index].active;\n const contracts = rateWizardData.contracts;\n for (let i = 0; i < savedContracts.length; i++) {\n if (savedContracts[i].contract === savedContracts[index].contract) {\n savedContracts[i].active = savedContracts[index].active;\n }\n } \n contracts[index].inactive_yn = contracts[index].inactive_yn === 'Y' ? 'N' : 'Y';\n rateWizardData.contracts = contracts;\n let contract_id = contracts[index].contract_id;\n // Update rateData.hasValidRateConversionCodes and rateData.contractsWithValidRateConversionCodes\n if (!savedContracts[index].active) {\n // inactivated the contract\n if (rateData.contractsWithValidRateConversionCodes && rateData.contractsWithValidRateConversionCodes.includes(contract_id)) {\n rateData.contractsWithValidRateConversionCodes = rateData.contractsWithValidRateConversionCodes.filter((contract)=> contract !== contract_id);\n }\n let savedContractRateConversionCodesItem = rateData.savedContractsRateConversionCodesMap.find((contract)=> contract.contract_id === contract_id);\n if (savedContractRateConversionCodesItem) {\n savedContractRateConversionCodesItem.inactive_yn = \"Y\";\n }\n\n if (rateData.contractsWithValidRateConversionCodes && rateData.contractsWithValidRateConversionCodes.length === 0 && rateData.hasValidRateConversionCodes) {\n rateData.hasValidRateConversionCodes = false;\n }\n } else {\n // activate the contract\n if (rateData.contractsWithValidRateConversionCodes && !rateData.contractsWithValidRateConversionCodes.includes(contract_id)) {\n rateData.contractsWithValidRateConversionCodes.push(contract_id);\n }\n\n let savedContractRateConversionCodesItem = rateData.savedContractsRateConversionCodesMap.find((contract)=> contract.contract_id === contract_id);\n if (savedContractRateConversionCodesItem) {\n savedContractRateConversionCodesItem.inactive_yn = \"N\";\n }\n\n if (rateData.contractsWithValidRateConversionCodes && rateData.contractsWithValidRateConversionCodes.length > 0 && !rateData.hasValidRateConversionCodes) {\n rateData.hasValidRateConversionCodes = true;\n }\n }\n // RVNG-6956: Skip attaching a contract for GDS category (Negotiated and Consortia) is allowed and move to channel screen\n let activeContracts = savedContracts.filter(contract => contract.active);\n if (REQUIRED_CONTRACT_RATE_CATEGORIES.includes(rateData.gdsRateCategory) && activeContracts.length === 0) {\n this.props.setValidationError({\n type: 'toast',\n errorMessage: 'Please select a valid contract'\n });\n } else {\n this.props.clearValidationError();\n }\n\n // Need to recalculate channelsTableData\n if (rateWizardData.rateData.channelsTableData) {\n rateWizardData.rateData.channelsTableData=\"\";\n }\n rateWizardData.rateData.contractsChanged = true;\n this.setState({ savedContracts });\n this.props.updateRateWizardData(rateWizardData);\n }\n\n render() {\n const formCheckboxElements = [\n {\n name: 'gds',\n label: 'GDS'\n },\n {\n name: 'voice',\n label: 'Voice'\n },\n {\n name: 'bookingengine',\n label: 'Booking engine'\n },\n {\n name: 'pms',\n label: 'PMS'\n }\n ]\n const { rateCategoryMap, rateAccessCodes } = this.props;\n const { savedContracts, selectedContract } = this.state;\n const { rateWizardData: { rateData: { gdsRateCategory, genericYN, ifRateCategoryID } } } = this.props;\n const rateCategoryOptions = rateCategoryMap.map((category) => {\n return {\n value: category.code,\n label: category.description,\n id: category.id\n }\n })\n let gdsRateCategoryOption;\n if (ifRateCategoryID !== NULL_LONG) {\n gdsRateCategoryOption = rateCategoryOptions.find((category) => category.id === ifRateCategoryID);\n } else if (gdsRateCategory) {\n gdsRateCategoryOption = rateCategoryOptions.find((category) => category.value === gdsRateCategory);\n } \n\n const contractOptions = rateAccessCodes.map((contract) => {\n return {\n label: contract.description,\n value: contract.code,\n accesscode: contract.accesscode\n }\n })\n const columns = [\n {\n Header:
{'Contract'}
,\n accessor: 'contract',\n style: { 'whiteSpace': 'unset' },\n Cell: row => (
{row.original.contract}
)\n },\n {\n Header:
{'Channel Access Codes'}
,\n accessor: 'channelAccessCodes',\n Cell: row => row.value.map(info =>
{info}
),\n style: { 'whiteSpace': 'unset' }\n },\n {\n Header:
{'Actions'}
,\n Cell: row => (),\n style: { 'textAlign': 'center' }\n }\n ]\n const getSellRateViaClass = (index) => {\n if(index === 0) {\n return \"ml-sm-2 mr-sm-3\";\n }\n return \"mr-sm-3\";\n }\n let { labelsMap } = this.props;\n return (\n
\n {labelsMap[\"Contracts:\"]? labelsMap[\"Contracts:\"]: \"Contracts:\"}\n
\n \n {formCheckboxElements.map((element, index) => (\n \n \n \n \n ))}\n
\n
\n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n
\n {savedContracts.length > 0 && (\n
\n \n \n
\n )}\n {\n this.toggle = toggle;\n return (\n
The contract access code for ADS, Amadeus, Worldspan, and Sabre must be 3 characters. Please create new contract channel conversions on the contract setup screen for this rate to be valid.
\n );\n }}\n header={\"Alert\"}\n />\n
\n )\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n setValidationError: validationErrorObject => dispatch(setValidationError(validationErrorObject)),\n clearValidationError: () => dispatch(clearValidationError()),\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData)),\n toggleFlag: flagName => dispatch(toggleFlag(flagName))\n});\n\nconst mapStateToProps = state => {\n return {\n rateCategoryMap: state.rateWizard.rateCategoryMap,\n rateAccessCodes: state.rateWizard.rateAccessCodes,\n requiresContract: state.rateWizard.requiresContract,\n useContractDescription: state.rateWizard.useContractDescription,\n savedContracts: state.rateWizard.savedContracts,\n rateWizardData: state.rateWizard.rateWizardData,\n accountPreferences: state.rateWizard.accountPreferences,\n labelsMap: state.rateWizard.labelMap\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Contracts);\n","import { getChannelsInformation } from '../../../../rate-wizard/services/rate-wizard-service';\nimport * as RateWizardConstants from \"../../../../rate-wizard/RateWizardConstants\";\nimport { LOAD_CHANNELS_DATA, TOGGLE_GDS_CHECKBOX, TOGGLE_IBE_CHECKBOX, TOGGLE_PMS_CHECKBOX } from \"../../actionTypes\";\n\nconst processRoomCodes = (roomCodes) => {\n let rawArray = roomCodes.map((roomCode) => {\n return {\n channelId: roomCode.channelid[0],\n itemId: roomCode.itemid[0],\n detailValue: roomCode.detailvalue[0]\n }\n })\n let tempSet = new Set();\n let rawRoomCodesMap = rawArray.reduce((roomCodesMap, roomCode) => {\n if(!roomCodesMap[roomCode.channelId]) {\n roomCodesMap[roomCode.channelId] = [];\n }\n let uniqueRoomCodeValue = roomCode.channelId + roomCode.itemId + roomCode.detailValue;\n if(!tempSet.has(uniqueRoomCodeValue)){\n roomCodesMap[roomCode.channelId].push({\n itemId: roomCode.itemId, \n detailValue: roomCode.detailValue \n })\n tempSet.add(uniqueRoomCodeValue);\n }\n return roomCodesMap;\n }, {});\n return rawRoomCodesMap;\n}\n\nconst processChannels = (channels) => {\n return channels.reduce((channelsMap, channel)=> {\n channelsMap[channel.channelid[0]] = {\n channelName: channel.channelname[0],\n channelCode: channel.channelcode[0]\n }\n return channelsMap;\n }, {})\n}\n\nconst getIBEPMSPreference = iBEPMSPreferences => {\n return iBEPMSPreferences.preference.filter(\n preference =>\n preference.$.value !== \"\" &&\n (preference.$.type === RateWizardConstants.IBE_CHANNEL || preference.$.type === RateWizardConstants.PMS_CHANNEL)\n );\n};\nexport const getChannelsData = (acctId, rateId, rateItems, gdsRateCategory) => {\n let interfaceRateCodeParams = {\n servicename: \"gcXMLIFRateCodeGet\",\n acctid: acctId,\n rateid: rateId,\n channelid: 0,\n channelcode: 'GDS',\n categorycode: gdsRateCategory\n }\n //NOTE: one of the itemid's maybe 0, this doesn't seem to have an impact on the roomCodes call, but if things start going wrong them we can remove it.\n //Expected format of itemidlist = [8960724, 4199982, 6300638, 8660719, 8390670, 7330648, 7540648, 5670631, 5670626]\n let itemidlist = rateItems.map((item) => item.lItemID);\n let roomCodesParams = {\n servicename: 'gcXMLGetRoomCodes',\n itemidlist: itemidlist.toString(),\n acctid: acctId\n }\n \n let channelCodesParams = {\n servicename: 'gcXMLGetRoomCodes',\n acctid: acctId\n }\n return dispatch => {\n getChannelsInformation(interfaceRateCodeParams, roomCodesParams, channelCodesParams).then((response) => {\n if(!(response instanceof Array)) return;\n let IFRateCode = response[0].IFRateCode ? response[0].IFRateCode[0].code[0]: '-';\n let roomCodeMap =response[1].RoomCodes ? processRoomCodes(response[1].RoomCodes): {};\n let channelsMap = processChannels(response[2].Channels[0].Channels);\n let iBEPMSChannelPreference = getIBEPMSPreference(response[3].preferences[0]);\n dispatch({\n type: LOAD_CHANNELS_DATA,\n payload: {\n IFRateCode,\n roomCodeMap,\n channelsMap,\n iBEPMSChannelPreference\n },\n });\n })\n }\n}\n\nexport const toggleGDSCheckbox = (isGDSSelected) => {\n return dispatch => {\n dispatch({\n type: TOGGLE_GDS_CHECKBOX,\n isGDSSelected\n })\n }\n}\n\nexport const toggleIBECheckbox = (isIBESelected) => {\n return dispatch => {\n dispatch({\n type: TOGGLE_IBE_CHECKBOX,\n isIBESelected\n })\n }\n}\n\nexport const togglePMSCheckbox = (isPMSSelected) => {\n return dispatch => {\n dispatch({\n type: TOGGLE_PMS_CHECKBOX,\n isPMSSelected\n })\n }\n}","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nexport const modifyChannelFilterData = (_channelFilters, channel_id, checked, rateData, userId) => {\n let channelAdded = false;\n let channelFilters_temp = [];\n if (_channelFilters.length > 0) {\n for (let i = 0; i < _channelFilters.length; i++) {\n if (_channelFilters[i].channel_id === channel_id) {\n if (checked) {\n // activate the record with detail_type = \"CONVERSION\" and deactivate record with \"FILTER\"\n if (_channelFilters[i].detail_type === \"CONVERSION\") {\n _channelFilters[i].inactive_yn = \"N\";\n channelAdded = true;\n } else if (_channelFilters[i].detail_type === \"FILTER\") {\n _channelFilters[i].inactive_yn = \"Y\";\n }\n } else {\n // activate the record with detail_type = \"FILTER\" and deactivate record with \"CONVERSION\"\n if (_channelFilters[i].detail_type === \"CONVERSION\") {\n _channelFilters[i].inactive_yn = \"Y\";\n } else if (_channelFilters[i].detail_type === \"FILTER\") {\n _channelFilters[i].inactive_yn = \"N\";\n channelAdded = true;\n }\n }\n }\n channelFilters_temp.push(_channelFilters[i]);\n } \n }\n if (!channelAdded) {\n let rateCodes = [\"EXCLUDE\"];\n let detail_type_name = \"FILTER\";\n let detail_method = \"\";\n if (checked) {\n let rateCodeMap = rateData.channelRateCodesMap.find(selectedChannel => selectedChannel.channel + \"\" === channel_id);\n rateCodes = rateCodeMap ? rateCodeMap.rateCodes : [];\n detail_type_name = \"CONVERSION\";\n detail_method = rateData.gdsRateCategory;\n }\n rateCodes.forEach(rateCode => {\n let channelFilter = {\n channel_id: channel_id,\n acct_id: rateData.acctID,\n table_name: \"RATE\",\n table_id: rateData.rateID,\n detail_type: detail_type_name,\n detail_name: detail_type_name,\n detail_value: rateCode,\n detail_method: detail_method,\n mod_user_id: userId,\n begin_date: rateData.activeBeginDate ? rateData.activeBeginDate : \"\",\n end_date: rateData.activeEndDate ? rateData.activeEndDate : \"\",\n inactive_yn: 'N',\n short_desc: rateData.interfaceShortDesc ? rateData.interfaceShortDesc : \"\",\n long_desc: rateData.interfaceLongDesc ? rateData.interfaceLongDesc : \"\",\n display_short_desc: rateData.interfaceShortDesc ? rateData.interfaceShortDesc : \"\",\n display_long_desc: rateData.interfaceLongDesc ? rateData.interfaceLongDesc : \"\",\n extended_long_desc: \"\"\n };\n channelFilters_temp.push(channelFilter);\n });\n }\n return {\n channelFilters_temp: channelFilters_temp\n }\n}","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Col, Form, FormGroup, Input, Label, Row } from \"reactstrap\";\nimport { updateRateWizardData } from \"../../../common/redux/actions/rate-wizard\";\nimport { toggleGDSCheckbox, toggleIBECheckbox, togglePMSCheckbox } from \"../../../common/redux/actions/rate-wizard/channels\"; \nimport { modifyChannelFilterData } from './ChannelsUtils';\nimport { GDS_CHANNELS, IBE_ID, PMS_ID, IBE_CHANNEL, PMS_CHANNEL } from \"../../RateWizardConstants\";\n\nconst formCheckboxElements = [\n {\n name: 'voice',\n label: 'Voice',\n channel_id: \"179\",\n },\n {\n name: 'bookingengine',\n label: 'Booking engine',\n channel_id: \"3\",\n },\n {\n name: 'pms',\n label: 'PMS',\n channel_id: \"186\",\n }\n];\n\nlet GDSChannelCheckbox = ({ isGDSSelected, rateWizardData, toggleGDSCheckbox, userId }) => {\n let { channelFilters, rateData } = rateWizardData;\n let channelFilters_temp = [...channelFilters];\n let updateChannelFilters = (channelFilters) => {\n rateWizardData.channelFilters = channelFilters;\n updateRateWizardData(rateWizardData);\n }\n return (\n \n {\n let checked = event.target.checked;\n channelFilters_temp = [...rateWizardData.channelFilters];\n let listChannels = [];\n //checked to unchecked\n if (!checked) {\n // RVNG-6975: Find all channels which is not excluded yet (cover new created and existing rate)\n GDS_CHANNELS.forEach (channel_id => {\n let isExcluded = channelFilters_temp.find(channel => (channel.channel_id === channel_id + '') && (channel.detail_value === \"EXCLUDE\") \n && (channel.inactive_yn === 'N')) !== undefined;\n if (!isExcluded) {\n listChannels.push(channel_id + '');\n }\n });\n } else {\n GDS_CHANNELS.forEach (channel_id => {\n let isChecked = channelFilters_temp.find(channel => (channel.channel_id === channel_id + '') && (channel.detail_value === \"CONVERSION\") \n && (channel.inactive_yn === 'N')) !== undefined;\n if (!isChecked) {\n listChannels.push(channel_id + '');\n }\n });\n }\n listChannels = Array.from(new Set(listChannels));\n let channelFiltersArray = listChannels.reduce((channelFiltersArray, channel_id) => {\n let modifiedFilterData = modifyChannelFilterData(channelFiltersArray, channel_id, checked, rateData, userId);\n return modifiedFilterData.channelFilters_temp;\n }, channelFilters_temp);\n updateChannelFilters(channelFiltersArray);\n toggleGDSCheckbox(checked);\n }}\n />\n \n \n )\n}\n\nconst mapDispatchToPropsForGDSChannelCheckbox = dispatch => ({\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData)),\n toggleGDSCheckbox: isGDSSelected => dispatch(toggleGDSCheckbox(isGDSSelected))\n})\nconst mapStateToPropsForGDSChannelCheckbox = state => {\n return {\n rateWizardData: state.rateWizard.rateWizardData,\n isGDSSelected: state.rateWizard.isGDSSelected\n };\n}\n\nGDSChannelCheckbox = connect(\n mapStateToPropsForGDSChannelCheckbox,\n mapDispatchToPropsForGDSChannelCheckbox\n)(GDSChannelCheckbox);\n\nlet OtherChannelCheckbox = ({ element, rateWizardData, updateRateWizardData, channelsData, toggleIBECheckbox, togglePMSCheckbox, labelMap, userId }) => {\n let { channelFilters, rateData } = rateWizardData;\n let { iBEPMSChannelPreference } = channelsData;\n let channelFilters_temp = [...channelFilters];\n let isChecked = true;\n let selectedChannel;\n let updateChannelFilters = (channelFilters) => {\n rateWizardData.channelFilters = channelFilters;\n updateRateWizardData(rateWizardData);\n }\n if (element.channel_id) {\n selectedChannel = channelFilters_temp.find(channel => channel.channel_id === element.channel_id);\n if (!selectedChannel) {\n isChecked = true;\n }\n else {\n isChecked = selectedChannel.detail_value === \"EXCLUDE\" && selectedChannel.inactive_yn === 'N' ? false : true;\n }\n }\n let pmsChannel = undefined;\n let ibeChannel = undefined;\n if (iBEPMSChannelPreference && iBEPMSChannelPreference.length > 0) {\n pmsChannel = iBEPMSChannelPreference.find(ibepmsChannel => ibepmsChannel.$.type === PMS_CHANNEL);\n ibeChannel = iBEPMSChannelPreference.find(ibepmsChannel => ibepmsChannel.$.type === IBE_CHANNEL);\n }\n return (\n \n {\n channelFilters_temp = [...rateWizardData.channelFilters];\n let checked = event.target.checked;\n let impactedChannels = [element.channel_id];\n //unchecked to checked\n if (checked) {\n if ((element.channel_id === IBE_ID +'') && ibeChannel) {\n let isChecked = channelFilters_temp.find(channel => (channel.channel_id === ibeChannel.$.value) && (channel.detail_value === \"CONVERSION\") \n && (channel.inactive_yn === 'N')) !== undefined;\n if (!isChecked) {\n impactedChannels.push(ibeChannel.$.value);\n }\n } else if ((element.channel_id === PMS_ID +'') && pmsChannel) {\n let isChecked = channelFilters_temp.find(channel => (channel.channel_id === pmsChannel.$.value) && (channel.detail_value === \"CONVERSION\") \n && (channel.inactive_yn === 'N')) !== undefined;\n if (!isChecked) {\n impactedChannels.push(pmsChannel.$.value);\n }\n }\n }\n //checked to unchecked\n else {\n if ((element.channel_id === IBE_ID +'') && ibeChannel) {\n let isExcluded = channelFilters_temp.find(channel => (channel.channel_id === ibeChannel.$.value) && (channel.detail_value === \"EXCLUDE\") \n && (channel.inactive_yn === 'N')) !== undefined;\n if (!isExcluded) {\n impactedChannels.push(ibeChannel.$.value);\n }\n } else if ((element.channel_id === PMS_ID +'') && pmsChannel) {\n let isExcluded = channelFilters_temp.find(channel => (channel.channel_id === pmsChannel.$.value) && (channel.detail_value === \"EXCLUDE\") \n && (channel.inactive_yn === 'N')) !== undefined;\n if (!isExcluded) {\n impactedChannels.push(pmsChannel.$.value);\n }\n }\n }\n impactedChannels = Array.from(new Set(impactedChannels));\n let channelFiltersArray = impactedChannels.reduce((channelFiltersArray, channel_id) => {\n let modifiedFilterData = modifyChannelFilterData(channelFiltersArray, channel_id, checked, rateData, userId);\n return modifiedFilterData.channelFilters_temp;\n }, channelFilters_temp);\n updateChannelFilters(channelFiltersArray);\n if (element.channel_id === IBE_ID +'') {\n toggleIBECheckbox(event.target.checked);\n } else if (element.channel_id === PMS_ID +'') {\n togglePMSCheckbox(event.target.checked);\n }\n }}\n />\n \n \n )\n}\n\nconst mapDispatchToPropsForOtherChannelCheckbox = dispatch => ({\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData)),\n toggleIBECheckbox: isIBESelected => dispatch(toggleIBECheckbox(isIBESelected)),\n togglePMSCheckbox: isPMSSelected => dispatch(togglePMSCheckbox(isPMSSelected))\n})\nconst mapStateToPropsForOtherChannelCheckbox = state => {\n return {\n rateWizardData: state.rateWizard.rateWizardData,\n labelMap: state.rateWizard.labelMap,\n channelsData: state.rateWizard.channelsData\n };\n}\n\nOtherChannelCheckbox = connect(\n mapStateToPropsForOtherChannelCheckbox,\n mapDispatchToPropsForOtherChannelCheckbox\n)(OtherChannelCheckbox);\n\n\nconst SellRateViaCheckboxes = ({ labelMap, userId }) => {\n return (\n \n \n \n \n \n
\n \n {formCheckboxElements.map((element, index) => ())}\n \n \n
\n )\n}\n\nconst mapStateToProps = state => {\n return {\n labelMap: state.rateWizard.labelMap,\n };\n };\n\nexport default connect(mapStateToProps, null)(SellRateViaCheckboxes);","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, Col, Row, FormGroup, Label } from \"reactstrap\";\nimport Select from \"react-select\";\n\nimport { updateRateWizardData } from \"../../../common/redux/actions/rate-wizard\";\nimport { ModalComponent } from \"../../../common/components/ModalComponent\";\nimport { NULL_LONG } from \"../../../common/Constants\";\n\n\nconst AlternateRatesModal = ({ aRateCategories = [], onSave, labelMap }) => {\n let [alternateRateCategories, setAlternateRateCategories] = useState(aRateCategories);\n let toggle1;\n return (\n
\n \n {\n toggle1 = toggle;\n return (\n \n \n
\n {alternateRateCategories.map((category, index) =>\n (\n \n {\n let newObj = [...alternateRateCategories];\n newObj[index] = {\n name: category.name,\n checked: element.target.checked,\n id: category.id\n }\n setAlternateRateCategories(newObj);\n }} />\n \n \n \n \n )\n )}\n
\n \n \n \n \n \n
\n );\n }}\n header={labelMap[\"Select Alternate Rate Categories\"]? labelMap[\"Select Alternate Rate Categories\"]\n :\"Select Alternate Rate Categories\"}\n />\n
\n\n )\n}\n\nconst DisabledGDSSelectBox = ({ rateCategoryMap, rateWizardData, updateRateWizardData, labelMap }) => {\n\n let { gdsRateCategory, alternateRateCategories, ifRateCategoryID } = rateWizardData.rateData;\n const rateCategoryOptions = rateCategoryMap.map((category) => {\n return {\n value: category.code,\n label: category.description,\n id: category.id\n }\n })\n let selectedGdsRateCategory;\n if (ifRateCategoryID !== NULL_LONG) {\n selectedGdsRateCategory = rateCategoryOptions.find((category) => category.id === ifRateCategoryID);\n } else if (gdsRateCategory) {\n selectedGdsRateCategory = rateCategoryOptions.find((category) => category.value === gdsRateCategory);\n } \n const selectedAlternateRateCategories = alternateRateCategories ? alternateRateCategories.split(','): [];\n let aRateCategories = rateCategoryMap.filter(category => category.code !== gdsRateCategory).map((category) => {\n return {\n name: category.description,\n checked: selectedAlternateRateCategories.includes(category.id + \"\"),\n id: category.id\n }\n });\n let onSave = (selectedCategories) => {\n rateWizardData.rateData.alternateRateCategories = selectedCategories;\n updateRateWizardData(rateWizardData);\n }\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nconst mapDispatchToProps = dispatch => ({\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData)),\n})\n\nconst mapStateToProps = state => {\n return {\n rateCategoryMap: state.rateWizard.rateCategoryMap,\n rateWizardData: state.rateWizard.rateWizardData,\n labelMap: state.rateWizard.labelMap,\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DisabledGDSSelectBox);","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Col, FormGroup, Input, Label } from \"reactstrap\";\nimport { updateRateWizardData } from \"../../../common/redux/actions/rate-wizard\";\n\n\nconst MiscCheckboxes = ({ rateWizardData, updateRateWizardData, labelMap }) => {\n const {\n rateData: { yieldableYN }\n } = rateWizardData;\n return (\n
\n \n {/* TODO: create label for this */}\n \n \n {\n const yieldableYN = event.target.checked ? 'Y' : 'N';\n rateWizardData.rateData.yieldableYN = yieldableYN;\n updateRateWizardData(rateWizardData);\n }}\n />\n \n \n \n
\n )\n}\n\nconst mapDispatchToProps = dispatch => ({\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData)),\n})\nconst mapStateToProps = state => {\n return {\n rateWizardData: state.rateWizard.rateWizardData,\n labelMap: state.rateWizard.labelMap,\n };\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(MiscCheckboxes);\n\n\n","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React, { useState } from \"react\";\nimport { Button, Col, Form, Input, Label, Row } from \"reactstrap\";\nimport ReactTable from \"react-table\";\nimport NumericInput from '../../../common/components/NumericInput';\nimport { ModalComponent } from \"../../../common/components/ModalComponent\";\nimport { GDS_CHANNELS, PMS_CHANNEL, IBE_CHANNEL } from \"../../RateWizardConstants\";\nimport \"../react-table.scss\";\n\nconst getParametersWizardColumns = (labelMap) => {\n let parametersWizardColumns =\n [\n {\n Header: labelMap[\"Room Type\"]? labelMap[\"Room Type\"]: \"Room Type\",\n accessor: 'roomType',\n style: { 'whiteSpace': 'unset' },\n width: 110\n },\n {\n Header: labelMap[\"Room Code\"]? labelMap[\"Room Code\"]: \"Room Code\",\n accessor: 'roomCode',\n style: { 'whiteSpace': 'unset' },\n width:90\n },\n {\n Header: labelMap[\"Rate Code\"]? labelMap[\"Rate Code\"]: \"Rate Code\",\n accessor: 'rateCode',\n style: { 'whiteSpace': 'unset' },\n width:90\n },\n {\n Header: labelMap[\"Booking Code\"]? labelMap[\"Booking Code\"]: \"Booking Code\",\n accessor: 'bookingCode',\n style: { 'whiteSpace': 'unset' },\n width: 100\n }\n ];\n return parametersWizardColumns;\n}\n\n\nconst OverrideRPCModal = ({ tableData, isChecked, onSaveOverride, labelMap }) => {\n let toggle1;\n let rateCode = tableData.roomArray[0] ? tableData.roomArray[0].rateCode : '-';\n let [selectedRateCode , changeRateCode] = useState(rateCode);\n let [displayOrderValue, changeDisplayOrder] = useState(\"\");\n let { channelName } = tableData;\n return (\n
\n {\n toggle1();\n }}>{labelMap[\"Override RPC\"]? labelMap[\"Override RPC\"]: \"Override RPC\"}\n {\n toggle1 = toggle;\n return (\n
\n \n \n \n \n \n \n {\n changeDisplayOrder(value);\n }}\n />\n \n \n \n \n \n \n \n changeRateCode((e.target.value).toUpperCase())}\n />\n \n \n
\n );\n }}\n header={\"Alert\"}\n footer={(\n
\n  \n \n
\n )}\n />\n
\n )\n}\n// TODO: currently this functional component is used for both GDS and non-GDS channels (.i.e. PMS, IBE)\nconst GDSChannelListItem = ({gdsChecked, ibeChecked, pmsChecked, iBEPMSChannelPreference, channelFilters_temp, tableData, onSaveOverride, isNewRate, modifyChannelFilterData, labelMap }) => {\n let isChecked = true;\n if (isNewRate) {\n let exclusionFilter = channelFilters_temp.find(channelFilter => channelFilter.channel_id === tableData.channel_id && channelFilter.detail_value === 'EXCLUDE');\n isChecked = exclusionFilter && exclusionFilter.inactive_yn === 'N' ? false : true;\n } else {\n let conversionChannel = channelFilters_temp.find(channelFilter => channelFilter.channel_id === tableData.channel_id && channelFilter.detail_type === 'CONVERSION');\n isChecked = conversionChannel && conversionChannel.inactive_yn === 'N' ? true : false;\n }\n let isGDSChannel = false;\n let isIBEChannel = false;\n let isPMSChannel = false;\n if (GDS_CHANNELS.includes(parseInt(tableData.channel_id))) {\n isGDSChannel = true;\n } else {\n if (iBEPMSChannelPreference && iBEPMSChannelPreference.length > 0) {\n let pmsChannel = iBEPMSChannelPreference.find(ibepmsChannel => ibepmsChannel.$.type === PMS_CHANNEL);\n let ibeChannel = iBEPMSChannelPreference.find(ibepmsChannel => ibepmsChannel.$.type === IBE_CHANNEL);\n if (ibeChannel && ibeChannel.$.value === tableData.channel_id) {\n isIBEChannel = true;\n } else if (pmsChannel && pmsChannel.$.value === tableData.channel_id) {\n isPMSChannel = true;\n }\n }\n }\n let parametersWizardColumns = getParametersWizardColumns(labelMap);\n return (\n \n \n {\n let checked = event.target.checked;\n modifyChannelFilterData(tableData.channel_id, checked);\n }}\n />\n \n \n \n \n \n \n \n
\n \n
\n \n
)\n}\n\nexport default GDSChannelListItem;","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport { validateRoomCode } from \"../../services/rate-wizard-service.js\";\nimport { modifyChannelFilterData } from \"./ChannelsUtils\";\nimport { updateRateWizardData } from \"../../../common/redux/actions/rate-wizard\";\nimport { setValidationError, clearValidationError } from \"../../../common/redux/actions/rate-wizard/validation\";\nimport GDSChannelListItem from \"./GDSChannelListItem\";\nimport { GDS_CHANNELS, OTHER_GDS_RATECODE_MAXLENGTH, GDS_GALILEO_CHANNELS, GALILEO_RATECODE_MAXLENGTH, PMS_CHANNEL, IBE_CHANNEL,\n GDS_RATECODE_LENGTH_ERROR, GALILEO_RATECODE_LENGTH_ERROR, FILTERED_RATE_ITEMS, REQUIRED_CONTRACT_RATE_CATEGORIES } from \"../../RateWizardConstants\";\n\nconst getChannelsTableData = (rateWizardData, itemsMap, channelsData, selectedItems, rateAccessCodes, rateCodeGenerateFromContract) => {\n let { channelFilters, rateData } = rateWizardData;\n let { IFRateCode, roomCodeMap, channelsMap, iBEPMSChannelPreference } = channelsData;\n \n let allChannels = [];\n GDS_CHANNELS.forEach(channelid =>{\n allChannels.push(channelid); \n })\n if (iBEPMSChannelPreference && iBEPMSChannelPreference.length > 0) {\n let pmschannel = iBEPMSChannelPreference.find(ibepmsChannel => ibepmsChannel.$.type === PMS_CHANNEL);\n let ibechannel = iBEPMSChannelPreference.find(ibepmsChannel => ibepmsChannel.$.type === IBE_CHANNEL);\n if (ibechannel && !allChannels.includes(parseInt(ibechannel.$.value))) {\n let channelExist = channelFilters.find(channelFilter => channelFilter.channel_id === ibechannel.$.value);\n allChannels.splice(0,0,parseInt(ibechannel.$.value));\n // RVNG-7376: For existing rates, if an IBE/PMS channel was changed value in property preference, the new IBE/PMS channel will be\n // unchecked in 'Channels’ screen of Rate Wizard\n if (rateData.isNewRate && channelExist === undefined) {\n let ibeChannel = {};\n ibeChannel.channel_id = ibechannel.$.value;\n ibeChannel.channel_detail_id = 0;\n ibeChannel.begin_date = rateData.activeBeginDate ? rateData.activeBeginDate : \"\";\n ibeChannel.end_date = rateData.activeEndDate ? rateData.activeEndDate : \"\";\n ibeChannel.detail_type = \"CONVERSION\";\n ibeChannel.inactive_yn = \"N\"\n channelFilters.push(ibeChannel);\n }\n }\n \n if (pmschannel && !allChannels.includes(parseInt(pmschannel.$.value))) {\n let channelExist = channelFilters.find(channelFilter => channelFilter.channel_id === pmschannel.$.value);\n ibechannel ? allChannels.splice(1, 0, parseInt(pmschannel.$.value)) : allChannels.splice(0, 0, parseInt(pmschannel.$.value));\n if (rateData.isNewRate && channelExist === undefined) {\n let pmsChannel = {};\n pmsChannel.channel_id = pmschannel.$.value;\n pmsChannel.channel_detail_id = 0;\n pmsChannel.begin_date = rateData.activeBeginDate ? rateData.activeBeginDate : \"\";\n pmsChannel.end_date = rateData.activeEndDate ? rateData.activeEndDate : \"\";\n pmsChannel.detail_type = \"CONVERSION\";\n pmsChannel.inactive_yn = \"N\";\n channelFilters.push(pmsChannel);\n }\n }\n } \n let channelsTableData = [];\n let channelRateCodesMap = [];\n channelsTableData = allChannels.map((selectedChannel) => {\n let { channelName } = channelsMap[selectedChannel];\n let channels = channelFilters.filter(cf => (cf.channel_id === selectedChannel + '') && (cf.detail_type === \"CONVERSION\") );\n // get existing rate access codes stored in database for existing rate\n let existingRateAccessCodes = [];\n channels.forEach((channel) => {\n existingRateAccessCodes.push(channel.detail_value);\n })\n let rateCodes = [];\n // get list of rate codes from inactivated contracts\n let inactivatedContractsRateCodes = [];\n rateData.savedContractsRateConversionCodesMap && rateData.savedContractsRateConversionCodesMap.forEach((contractEntry) => {\n if (contractEntry.inactive_yn === \"Y\") {\n let item = contractEntry.contractRateConversionCodes.find(channel => channel.channelid === selectedChannel + '');\n if (item) {\n // get rate conversion code\n inactivatedContractsRateCodes.push(item.accesscode);\n } else {\n // get rate access code\n const rateAccessCode = rateAccessCodes.find((rateAccessCode) => rateAccessCode.code === contractEntry.contract_id);\n rateAccessCode && inactivatedContractsRateCodes.push(rateAccessCode.accesscode);\n }\n }\n });\n existingRateAccessCodes.forEach((accessCode) => {\n if (accessCode && accessCode !== \"-\" && accessCode !== \"EXCLUDE\" && !inactivatedContractsRateCodes.includes(accessCode)) {\n // use existing rate code from channelFilters\n !rateCodes.includes(accessCode) && rateCodes.push(accessCode);\n if (!rateWizardData.rateData.hasValidRateConversionCodes) {\n rateWizardData.rateData.hasValidRateConversionCodes = true;\n updateRateWizardData(rateWizardData);\n }\n }\n }); \n if (rateWizardData.rateData.contractsChanged) {\n // calculate the rate code in case there is contract changed\n if (rateCodeGenerateFromContract === \"Y\" && rateData.savedContractsRateConversionCodesMap) {\n if (rateWizardData.rateData.duplicatedRateConversionCodes) {\n // There is at least 1 added contract (or all) has duplicated rate conversion codes\n if (!rateWizardData.rateData.hasValidRateConversionCodes) {\n // All the added contracts have duplicated rate conversion code and hasValidRateConversionCodes != true (new created rate), \n // use the auto generated code\n !rateCodes.includes(IFRateCode) && rateCodes.push(IFRateCode);\n } else if (rateWizardData.rateData.contractsWithValidRateConversionCodes) {\n // Among added contracts, there are contracts which have and not have duplicated rate conversion codes \n // get rate code\n rateData.savedContractsRateConversionCodesMap.forEach((contractEntry) => {\n if (contractEntry.inactive_yn === \"N\") {\n // Check if this contract has duplicated rate conversion codes or not, contract with duplicated rate conversion code will be skipped\n let isContractWithValidConversionCodes = (rateWizardData.rateData.contractsWithValidRateConversionCodes.find((contract) => contract === contractEntry.contract_id) !== undefined);\n if (isContractWithValidConversionCodes) {\n let item = contractEntry.contractRateConversionCodes.find(channel => channel.channelid === selectedChannel + '');\n if (item) {\n // get rate conversion code\n !rateCodes.includes(item.accesscode) && rateCodes.push(item.accesscode);\n } else {\n // get rate access code\n const rateAccessCode = rateAccessCodes.find((rateAccessCode) => rateAccessCode.code === contractEntry.contract_id);\n rateAccessCode && !rateCodes.includes(rateAccessCode.accesscode) && rateCodes.push(rateAccessCode.accesscode);\n }\n }\n }\n });\n }\n // if all the contracts having duplicated rate conversion codes and hasValidRateConversionCodes = true, rate code is already added from channelFilters as above\n } else {\n // There is no any contract which has duplicated rate conversion codes\n if (rateWizardData.rateData.hasValidRateConversionCodes) {\n // if there is contract activated\n // get rate code\n rateData.savedContractsRateConversionCodesMap.forEach((contractEntry) => {\n if (contractEntry.inactive_yn === \"N\") {\n let item = contractEntry.contractRateConversionCodes.find(channel => channel.channelid === selectedChannel + '');\n if (item) {\n // get rate conversion code\n !rateCodes.includes(item.accesscode) && rateCodes.push(item.accesscode);\n } else {\n // get rate access code\n const rateAccessCode = rateAccessCodes.find((rateAccessCode) => rateAccessCode.code === contractEntry.contract_id);\n rateAccessCode && !rateCodes.includes(rateAccessCode.accesscode) && rateCodes.push(rateAccessCode.accesscode);\n }\n }\n });\n } else {\n // use the auto generated code\n if (rateCodes.length === 0) {\n rateCodes.push(IFRateCode);\n }\n }\n } \n } else {\n // use the auto generated code\n if (rateCodes.length === 0) {\n rateCodes.push(IFRateCode);\n }\n }\n } else if (rateCodes.length === 0) {\n // RVNG-7335: inactive channel scenario\n if (rateData.savedContractsRateConversionCodesMap) {\n // contract associated\n rateData.savedContractsRateConversionCodesMap.forEach((contractEntry) => {\n let item = contractEntry.contractRateConversionCodes.find(channel => channel.channelid === selectedChannel + '');\n if (item) {\n // get rate conversion code\n rateCodes.push(item.accesscode);\n } else {\n // get rate access code\n const rateAccessCode = rateAccessCodes.find((rateAccessCode) => rateAccessCode.code === contractEntry.contract_id);\n rateAccessCode && rateCodes.push(rateAccessCode.accesscode);\n }\n });\n } else {\n rateCodes.push(IFRateCode);\n }\n }\n rateCodes = rateCodes.filter(ratecode => ratecode !== undefined);\n // build map of channel and rate codes\n channelRateCodesMap.push({channel: selectedChannel, rateCodes});\n\n let validSelectedItems = selectedItems.filter((item) => !FILTERED_RATE_ITEMS.includes(item));\n let roomArray = [];\n validSelectedItems.forEach ((room) => {\n let rooms = roomCodeMap[selectedChannel];\n let roomItem = rooms ? rooms.filter((item)=> item.itemId === room): \"\";\n let roomCode = (roomItem.length >0)? roomItem[0].detailValue: \"NoCode\";\n rateCodes.forEach(rateCode => {\n roomArray.push({\n roomType: itemsMap[room],\n roomCode: roomCode,\n rateCode: rateCode,\n bookingCode: roomCode + rateCode\n });\n })\n });\n\n return {\n channelName,\n channel_id: selectedChannel + '',\n roomArray\n }\n });\n\n // save map of channel and rate codes\n rateWizardData.rateData.channelRateCodesMap = channelRateCodesMap;\n // update current channelsTableData to redux store\n rateWizardData.rateData.channelsTableData = channelsTableData;\n\n // update all changes for Rate Wizard data\n updateRateWizardData(rateWizardData);\n return channelsTableData;\n};\n\nconst validateGDSChannelsRateCodes = (gdsChannelsData, channelFilters, setValidationError, clearValidationError) => {\n let isValidConversionsGalileo = true;\n let isValidConversions3char = true;\n\n let filteredChannels = channelFilters.filter(channel => channel.detail_type === \"FILTER\" && channel.detail_value === \"EXCLUDE\" && channel.inactive_yn === \"N\")\n .map(channel => channel.channel_id);\n\n gdsChannelsData.forEach(channelData => {\n if (!filteredChannels.includes(channelData.channel_id) && GDS_CHANNELS.includes(parseInt(channelData.channel_id))) {\n // RVNG-7322: only validate for not filtered channel\n let limittedRateCodeLength = OTHER_GDS_RATECODE_MAXLENGTH;\n if (channelData.channel_id === (GDS_GALILEO_CHANNELS + '')) {\n // galileo channel\n limittedRateCodeLength = GALILEO_RATECODE_MAXLENGTH;\n }\n for (let i=0; i< channelData.roomArray.length ; i++) {\n let roomType = channelData.roomArray[i];\n if (roomType.rateCode && roomType.rateCode.length > limittedRateCodeLength) {\n if (channelData.channel_id === (GDS_GALILEO_CHANNELS + '')) {\n isValidConversionsGalileo = false;\n } else {\n isValidConversions3char = false;\n }\n break;\n }\n }\n }\n });\n if (isValidConversions3char && isValidConversionsGalileo) {\n clearValidationError();\n } else if (!isValidConversions3char) {\n setValidationError({\n type: 'errorOnNextOnly',\n errorMessage: GDS_RATECODE_LENGTH_ERROR\n });\n } else if (!isValidConversionsGalileo) {\n setValidationError({\n type: 'errorOnNextOnly',\n errorMessage: GALILEO_RATECODE_LENGTH_ERROR\n });\n }\n }\n\nconst onSaveOverride = (selectedRateCode, toggle1, channelsTableData, selectedChannelIndex, channelFilters_temp, acctId, rateId, \n rateWizardData, updateChannelsTableData, setValidationError, clearValidationError) => {\n if (selectedRateCode === \"\") {\n toast.error(\"Please enter the Rate code\");\n } \n else {\n validateRoomCode(acctId, rateId, \"'\" + selectedRateCode + \"'\").then(response => {\n let takencode = response.Validation[0];\n if (takencode.takencode) {\n toast.error(\"The rate code \" + takencode.takencode[0] + \" already exists. Please try another code.\");\n }\n else {\n channelsTableData[selectedChannelIndex].roomArray = channelsTableData[selectedChannelIndex].roomArray.map((data) => {\n data.rateCode = selectedRateCode;\n data.bookingCode = data.roomCode + selectedRateCode;\n return data;\n })\n // update current channelsTableData to redux store\n rateWizardData.rateData.channelsTableData = channelsTableData;\n\n // update channelRateCodesMap with updated rate code\n rateWizardData.rateData.channelRateCodesMap.map((data) => {\n if (data.channel + '' === channelsTableData[selectedChannelIndex].channel_id) {\n data.rateCodes = [];\n data.rateCodes.push(selectedRateCode);\n }\n return data;\n });\n updateRateWizardData(rateWizardData);\n\n // RVNG-6947: For any existing rate, the rate codes on channel screen cannot be updated more than once using the Override RPC option\n // update channelFilters with new updated rate code\n let existingChannel = channelFilters_temp.find(cf => cf.channel_id === channelsTableData[selectedChannelIndex].channel_id\n && cf.detail_type === \"CONVERSION\" && cf.inactive_yn === \"N\");\n if (existingChannel) {\n existingChannel.detail_value = selectedRateCode;\n }\n let data = [...channelsTableData];\n updateChannelsTableData(data);\n validateGDSChannelsRateCodes(channelsTableData, channelFilters_temp, setValidationError, clearValidationError);\n toggle1();\n }\n })\n }\n}\n\n\n\nconst GDSChannelsListTables = ({ rateWizardData, itemsMap, channelsData, isGDSSelected, isIBESelected, isPMSSelected, updateRateWizardData, labelMap, selectedItems, accountPreferences, \n rateAccessCodes, setValidationError, clearValidationError, userId }) => {\n let { iBEPMSChannelPreference } = channelsData;\n // check preference to know if rate code will be generated from contract\n let rateCodeGenerateFromContract = accountPreferences.get(\"RATEWZ_RATECODE_CONVERSION_CONTRACT_YN\");\n let data;\n if (!rateWizardData.rateData.channelsTableData) {\n data = getChannelsTableData(rateWizardData, itemsMap, channelsData, selectedItems, rateAccessCodes, rateCodeGenerateFromContract);\n } else {\n // RVNG-6935: handle case where moving back from completion screen to channel screen\n data = rateWizardData.rateData.channelsTableData;\n // no need to raise error for duplicated rate conversion code anymore\n rateWizardData.rateData.duplicatedRateConversionCodes=\"\";\n }\n let [channelsTableData, updateChannelsTableData] = useState(data);\n let { channelFilters, rateData: { acctID, rateID, isNewRate } } = rateWizardData;\n validateGDSChannelsRateCodes(channelsTableData, channelFilters, setValidationError, clearValidationError);\n if (rateWizardData.rateData.genericYN === \"N\" \n && REQUIRED_CONTRACT_RATE_CATEGORIES.includes(rateWizardData.rateData.gdsRateCategory)\n && rateWizardData.rateData.duplicatedRateConversionCodes && rateWizardData.rateData.duplicatedRateConversionCodes !== \"\"\n && !rateWizardData.rateData.hasValidRateConversionCodes) {\n toast.error(\"The rate codes \" + rateWizardData.rateData.duplicatedRateConversionCodes + \" are already being used on another rate. Please manually override the invalid rate codes to use this contract.\");\n }\n let channelFilters_temp = [...channelFilters];\n let updateChannelFiltersTemp = (channelFilters) => {\n rateWizardData.channelFilters = [...channelFilters];\n updateRateWizardData(rateWizardData);\n }\n return (\n channelsTableData.map((tableData, index) => onSaveOverride(\n selectedRateCode,\n toggle1,\n channelsTableData,\n index,\n channelFilters,\n acctID,\n rateID,\n rateWizardData,\n updateChannelsTableData,\n setValidationError, \n clearValidationError\n )}\n modifyChannelFilterData={(channel_id, checked) => {\n let data = modifyChannelFilterData(\n channelFilters,\n channel_id,\n checked,\n rateWizardData.rateData,\n userId\n );\n updateChannelFiltersTemp(data.channelFilters_temp);\n validateGDSChannelsRateCodes(channelsTableData, data.channelFilters_temp, setValidationError, clearValidationError);\n }}\n />)\n )\n}\n\nconst mapDispatchToProps = dispatch => ({\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData)),\n setValidationError: validationErrorObject => dispatch(setValidationError(validationErrorObject)),\n clearValidationError: () => dispatch(clearValidationError()),\n})\n\nconst mapStateToProps = state => {\n return {\n rateWizardData: state.rateWizard.rateWizardData,\n itemsMap: state.rateWizard.itemsMap,\n channelsData: state.rateWizard.channelsData,\n isGDSSelected: state.rateWizard.isGDSSelected,\n isIBESelected: state.rateWizard.isIBESelected,\n isPMSSelected: state.rateWizard.isPMSSelected,\n labelMap: state.rateWizard.labelMap,\n selectedItems: state.rateWizard.selectedItems,\n accountPreferences: state.rateWizard.accountPreferences,\n rateAccessCodes: state.rateWizard.rateAccessCodes\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(GDSChannelsListTables);\n","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { GDS_CHANNELS, IBE_ID, PMS_ID } from \"../../RateWizardConstants\";\nimport { NULL_LONG } from \"../../../common/Constants\";\nimport { updateRateWizardData } from \"../../../common/redux/actions/rate-wizard\";\nimport { getChannelsData, toggleGDSCheckbox, toggleIBECheckbox, togglePMSCheckbox} from \"../../../common/redux/actions/rate-wizard/channels.js\";\nimport SellRateViaCheckboxes from \"./SellRateViaCheckboxes\";\nimport DisabledGDSSelectBox from \"./DisabledGDSSelectBox\";\nimport MiscCheckboxes from \"./MiscCheckboxes\";\nimport GDSChannelsListTables from \"./GDSChannelsListTables\";\n\nclass GDSBuilderForm extends Component {\n\n componentDidMount() {\n let { acctId, rateId } = this.props;\n const {\n rateWizardData: {\n rateData: { gdsRateCategory, ifRateCategoryID, isNewRate },\n channelFilters,\n rateItems\n },\n rateWizardData,\n rateCategoryMap\n } = this.props;\n let filteredList = channelFilters.filter(channel => GDS_CHANNELS.includes(parseInt(channel.channel_id)) && channel.detail_value === \"EXCLUDE\" && channel.inactive_yn === \"N\");\n let isGdsChecked = filteredList.length !== GDS_CHANNELS.length;\n if (!isNewRate) {\n isGdsChecked = channelFilters.some(item => GDS_CHANNELS.includes(parseInt(item.channel_id)) && item.detail_type === \"CONVERSION\" && item.inactive_yn === 'N');\n }\n let selectedGDSRateCategory = gdsRateCategory;\n if (ifRateCategoryID !== NULL_LONG) {\n let tempCategory = rateCategoryMap.find(category => category.id === ifRateCategoryID);\n selectedGDSRateCategory = tempCategory ? tempCategory.code: '';\n }\n this.props.getChannelsData(acctId, rateId, rateItems, selectedGDSRateCategory);\n this.props.toggleGDSCheckbox(isGdsChecked);\n let isIBEChecked = channelFilters.find(channel => parseInt(channel.channel_id) === IBE_ID && channel.detail_value === \"EXCLUDE\" && channel.inactive_yn === \"N\") === undefined;\n let isPMSChecked = channelFilters.find(channel => parseInt(channel.channel_id) === PMS_ID && channel.detail_value === \"EXCLUDE\" && channel.inactive_yn === \"N\") === undefined;\n this.props.toggleIBECheckbox(isIBEChecked);\n this.props.togglePMSCheckbox(isPMSChecked);\n rateWizardData.rateData.isChannelsDataReady = true;\n updateRateWizardData(rateWizardData);\n }\n\n render() {\n const { channelsData, rateWizardData: { rateData}, userId }= this.props;\n return (\n \n \n \n { rateData.isChannelsDataReady && Object.keys(channelsData).length !== 0 ? : (
Loading...
)}\n
);\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n getChannelsData: (acctId, rateId, rateItems, gdsRateCategory) => dispatch(getChannelsData(acctId, rateId, rateItems, gdsRateCategory)),\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData)),\n toggleGDSCheckbox: isGDSSelected => dispatch(toggleGDSCheckbox(isGDSSelected)),\n toggleIBECheckbox: isIBESelected => dispatch(toggleIBECheckbox(isIBESelected)),\n togglePMSCheckbox: isPMSSelected => dispatch(togglePMSCheckbox(isPMSSelected))\n})\n\nconst mapStateToProps = state => {\n return {\n rateCategoryMap: state.rateWizard.rateCategoryMap,\n rateWizardData: state.rateWizard.rateWizardData,\n itemsMap: state.rateWizard.itemsMap,\n channelsData: state.rateWizard.channelsData\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(GDSBuilderForm);","/*\n * Copyright (c) 2020 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\n\nimport GDSBuilderForm from \"./GDSBuilderForm\";\nexport default class Channels extends React.Component {\n\n render() { \n return (\n
\n \n
);\n }\n}","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nimport { Button, Col, Row } from \"reactstrap\";\nimport ReactTable from \"react-table\";\nimport DatePicker from \"react-datepicker\";\nimport Select from \"react-select\";\nimport moment from \"moment\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport { GET_ROW, DISPLAY_DATE_FORMAT } from \"../../common/Constants\";\nimport { getParameterNames } from \"../services/rate-wizard-service\";\nimport { getChannels } from \"../../common/services/common-service\";\nimport { setValidationError, clearValidationError } from \"../../common/redux/actions/rate-wizard/validation\";\nimport { toggleActiveStatus, updateParametersTableData } from \"../../common/redux/actions/rate-wizard/parameters\";\nimport { getChannelOptions } from \"../RateWizardUtil.js\";\nclass Parameters extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n channel: { value: \"238\", label: \"All Electronic\" },\n beginDate: moment().toDate(),\n endDate: moment()\n .add(1, \"day\")\n .toDate(),\n parameterName: \"\",\n value: \"\",\n parametersWizardVisible: false,\n selectedIndex: -1,\n parameterOptions: []\n };\n }\n\n componentDidMount() {\n const { acctId } = this.props;\n getChannels(acctId, true).then(response => {\n let { channelNameOptions } = getChannelOptions(response);\n this.setState({ channelNameOptions });\n });\n\n getParameterNames().then(responses => {\n const parameterOptions = [...responses[0].types[0].type, ...responses[1].types[0].type].map(type => {\n return { label: type.shortdesc[0], value: type.codevalue[0] };\n });\n this.setState({ parameterOptions });\n });\n }\n showParametersWizard = () => {\n this.setState({\n parametersWizardVisible: true,\n channel: { value: \"238\", label: \"All Electronic\" },\n beginDate: moment().toDate(),\n endDate: moment()\n .add(1, \"day\")\n .toDate(),\n parameterName: \"\",\n value: \"\",\n selectedIndex: -1\n });\n this.props.setValidationError({\n type: \"toast\",\n errorMessage: \"Cannot perform this action right now\"\n });\n };\n onCancel = () => {\n this.setState({\n channel: \"\",\n beginDate: moment().toDate(),\n endDate: moment()\n .add(1, \"day\")\n .toDate(),\n parameterName: \"\",\n value: \"\",\n parametersWizardVisible: false\n });\n this.props.clearValidationError();\n };\n onSave = () => {\n const { parametersTableData } = this.props;\n const { channel, beginDate, endDate, parameterName, value, selectedIndex } = this.state;\n const mandatoryFields = [\"parameterName\", \"value\"];\n const mandatoryMissingField = mandatoryFields.find(field => this.state[field] === \"\");\n if (mandatoryMissingField) {\n const mandatoryFieldLabels = {\n parameterName: \"Parameter Name\",\n value: \"Value\"\n };\n return toast.error(`mandatory field ${mandatoryFieldLabels[mandatoryMissingField]} missing`);\n }\n this.setState({ parametersWizardVisible: false });\n const parametersRow = {\n channel: channel,\n beginDate: beginDate.toDateString(),\n endDate: endDate.toDateString(),\n parameterName,\n value,\n active: true\n };\n if (selectedIndex === -1) {\n parametersTableData.push(parametersRow);\n } else {\n parametersTableData.splice(selectedIndex, 1, parametersRow);\n }\n\n this.props.updateParametersTableData(parametersTableData);\n this.props.clearValidationError();\n };\n editChannelParameters = index => {\n const data = this.props.parametersTableData[index];\n this.setState({\n channel: data.channel,\n beginDate: moment(data.beginDate).toDate(),\n endDate: data.endDate ? moment(data.endDate).toDate() : moment().toDate(),\n parameterName: data.parameterName,\n value: data.value,\n selectedIndex: index,\n parametersWizardVisible: true\n });\n };\n toggleStatus = index => {\n this.props.toggleActiveStatus(index);\n };\n handleChannelNameChange = event => {\n const index = event.nativeEvent.target.selectedIndex;\n const text = event.nativeEvent.target[index].text;\n const value = event.target.value;\n let channel = { label: text.trim(), value };\n this.setState({ channel });\n };\n displayMainBody = () => {\n const columns = [\n {\n Header: \"Channel\",\n accessor: \"channel\",\n style: { whiteSpace: \"unset\" },\n width: 200,\n Cell: row =>
{row.original.channel.label}
\n },\n {\n Header: \"Parameter Name\",\n accessor: \"parameterName\",\n width: 300,\n Cell: row =>
{row.original.parameterName.label}
\n },\n {\n Header: \"Value\",\n accessor: \"value\"\n },\n {\n Header: \"Begin Date\",\n accessor: \"beginDate\",\n Cell: row =>
{moment(row.original.beginDate).format(DISPLAY_DATE_FORMAT)}
\n },\n {\n Header: \"End Date\",\n accessor: \"endDate\",\n Cell: row =>
{moment(row.original.endDate).format(DISPLAY_DATE_FORMAT)}
\n },\n {\n Header: \"Last Modified By\",\n accessor: \"lastModifiedBy\",\n width: 150\n },\n {\n Header: \"Actions\",\n Cell: row => (\n
\n \n \n
\n ),\n width: 200\n }\n ];\n const { parametersTableData } = this.props;\n const { channel, beginDate, endDate, parameterName, value, parameterOptions } = this.state;\n\n const parameterWizard = (\n
\n {GET_ROW(\n \"Channel Name\",\n ,\n true\n )}\n {GET_ROW(\n \"Begin Date\",\n ,\n true\n )}\n {GET_ROW(\n \"End Date\",\n ,\n false\n )}\n {GET_ROW(\n \"Parameter Name\",\n this.setState({ parameterName: option })}\n value={parameterName}\n />,\n true\n )}\n {GET_ROW(\n \"Value\",\n this.setState({ value: event.target.value })} />,\n true\n )}\n
\n \n \n
\n
\n );\n const parameterTable = ;\n return this.state.parametersWizardVisible ? parameterWizard : parameterTable;\n };\n render() {\n return (\n
\n {!this.state.parametersWizardVisible && (\n \n \n \n \n \n )}\n {this.displayMainBody()}\n
\n );\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n setValidationError: validationErrorObject => dispatch(setValidationError(validationErrorObject)),\n clearValidationError: () => dispatch(clearValidationError()),\n toggleActiveStatus: index => dispatch(toggleActiveStatus(index)),\n updateParametersTableData: parametersTableData => dispatch(updateParametersTableData(parametersTableData))\n});\n\nconst mapStateToProps = state => {\n return {\n parametersTableData: state.rateWizard.parametersTableData,\n dateInputFormat: state.rateWizard.dateInputFormat\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Parameters);\n","import { UPDATE_PARAMETERS_TABLE_DATA, TOGGLE_PARAMETERS_STATUS } from '../../actionTypes';\n\nexport const updateParametersTableData = (parametersTableData) => ({\n type: UPDATE_PARAMETERS_TABLE_DATA,\n parametersTableData\n});\n\nexport const toggleActiveStatus = (index) => ({\n type: TOGGLE_PARAMETERS_STATUS,\n index\n})","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nexport class RateLock extends React.Component {\n render() {\n return
Rate Lock
;\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nexport class PropertyPublish extends React.Component {\n render() {\n return
Property Publish
;\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, CardHeader } from \"reactstrap\";\nimport { toast } from \"react-toastify\";\nimport * as CommonUtil from \"../../common/CommonUtil\";\nimport {\n GET_ROW,\n GUARANTEE_POLICY_TYPE,\n CANCEL_POLICY_TYPE,\n UNDEFINED_VALUE,\n NULL_LONG,\n EMPTY,\n ZERO\n} from \"../../common/Constants\";\nimport { formatRateWizardToXML } from \"../RateWizardUtil\";\nimport { saveRateWizard } from \"../services/rate-wizard-service\";\nimport moment from \"moment\";\n\nconst Completion = ({\n labelsMap,\n rateWizardData,\n rateCategoryMap,\n policyOptions,\n channelsMap,\n rateAccessCodes,\n userId,\n dateDisplayFormat\n}) => {\n const { rateData } = rateWizardData;\n let selectedRateGroup;\n if (rateData.ifRateCategoryID !== NULL_LONG) {\n selectedRateGroup = rateCategoryMap.find(category => category.id === rateData.ifRateCategoryID);\n } else if (rateData.gdsRateCategory) {\n selectedRateGroup = rateCategoryMap.find(category => category.code === rateData.gdsRateCategory);\n }\n\n let cancelPolicyValue = \"\";\n let guaranteePolicyValue = \"\";\n if (policyOptions[GUARANTEE_POLICY_TYPE]) {\n guaranteePolicyValue = policyOptions[GUARANTEE_POLICY_TYPE].find(policy => policy.value === rateData.gtdPolicyID).label;\n }\n if (policyOptions[CANCEL_POLICY_TYPE]) {\n cancelPolicyValue = policyOptions[CANCEL_POLICY_TYPE].find(policy => policy.value === rateData.cancelPolicyID).label;\n }\n return (\n
\n \n {labelsMap[\"Rate Summary:\"] ? labelsMap[\"Rate Summary:\"] : \"Rate Summary:\"}\n \n {GET_ROW(\n labelsMap[\"Rate Group:\"] ? labelsMap[\"Rate Group:\"] : \"Rate Group:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Rate Name:\"] ? labelsMap[\"Rate Name:\"] : \"Rate Name:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Rate Description:\"] ? labelsMap[\"Rate Description:\"] : \"Rate Description:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Rate Start Date:\"] ? labelsMap[\"Rate Start Date:\"] : \"Rate Start Date:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Rate End Date:\"] ? labelsMap[\"Rate End Date:\"] : \"Rate End Date:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Rate Start Time:\"] ? labelsMap[\"Rate Start Time:\"] : \"Rate Start Time:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Rate End Time:\"] ? labelsMap[\"Rate End Time:\"] : \"Rate End Time:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Active Begin Date:\"] ? labelsMap[\"Active Begin Date:\"] : \"Active Begin Date:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Active End Date:\"] ? labelsMap[\"Active End Date:\"] : \"Active End Date:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Currency Code:\"] ? labelsMap[\"Currency Code:\"] : \"Currency Code:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Commission Calculation Method:\"]\n ? labelsMap[\"Commission Calculation Method:\"]\n : \"Commission Calculation Method:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Commission Amount:\"] ? labelsMap[\"Commission Amount:\"] : \"Commission Amount:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Cancel Policy:\"] ? labelsMap[\"Cancel Policy:\"] : \"Cancel Policy:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Guarantee Policy:\"] ? labelsMap[\"Guarantee Policy:\"] : \"Guarantee Policy:\",\n ,\n false\n )}\n {GET_ROW(\n labelsMap[\"Rate Category Code:\"] ? labelsMap[\"Rate Category Code:\"] : \"Rate Category Code:\",\n ,\n false\n )}\n {\n saveRateWizard(formatRateWizardToXML(rateWizardData, rateCategoryMap, channelsMap, rateAccessCodes, userId)).then(\n res => {\n let { success } = res.$;\n if (success) {\n toast.success(\"saved successfully!\");\n setTimeout(() => {\n // eslint-disable-next-line no-restricted-globals\n parent.parent.document\n .getElementById(\"tree_f\")\n .contentWindow.openNode(rateData.rateID + \"RATE\", \"RATE\", true, false);\n }, 3000);\n }\n }\n );\n }}\n >\n {labelsMap[\"Save Rate Plan\"] ? labelsMap[\"Save Rate Plan\"] : \"Save Rate Plan\"}\n \n
\n );\n};\nconst mapDispatchToProps = dispatch => ({});\n\nconst mapStateToProps = state => {\n return {\n rateWizardData: state.rateWizard.rateWizardData,\n rateCategoryMap: state.rateWizard.rateCategoryMap,\n policyOptions: state.rateWizard.policyOptions,\n channelsMap: state.rateWizard.channelsData.channelsMap,\n labelsMap: state.rateWizard.labelMap,\n rateAccessCodes: state.rateWizard.rateAccessCodes,\n dateDisplayFormat: state.rateWizard.dateDisplayFormat\n };\n};\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Completion);\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nexport class Status extends React.Component {\n render() {\n return
Status
;\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\nimport React from \"react\";\nimport { Card, CardBody, Col, FormGroup, Input, Label, Row } from \"reactstrap\";\nimport Select from \"react-select\";\nimport DatePicker from \"react-datepicker\";\nimport * as Constants from \"../../common/Constants\";\nimport { FILTERED_RATE_ITEMS } from \"../RateWizardConstants\";\nimport moment from \"moment\";\n\nimport \"./RateInfo.scss\";\n\nexport class RateInfo extends React.Component {\n handleChange = (stateName, stateValue) => {\n this.props.updateParentState(stateName, stateValue);\n };\n\n handleStartDateChange = date => {\n if (!date) return;\n let { rateId, acctId, itemsMap, rateWizardData, itemsOrder } = this.props;\n let { rateItems } = rateWizardData;\n let selectedItems = rateItems\n .filter(item => item.eState !== \"DELETE\")\n .filter(item => !FILTERED_RATE_ITEMS.includes(item.lItemID))\n .map(item => item.lItemID);\n\n let selectedDate = moment(date, Constants.DATE_FORMAT);\n this.props.updateSeasonalStartDate(selectedDate.toDate());\n this.props.updateSeasonalEndDate(selectedDate.toDate());\n\n let selectedItemsObj = [];\n for (let i = 0; i < itemsOrder.length; i++) {\n if (itemsOrder[i] && selectedItems.includes(itemsOrder[i])) {\n selectedItemsObj.push(itemsOrder[i]);\n }\n }\n this.props.loadRatesData(\n selectedItemsObj.join(\",\"),\n moment(date).format(Constants.DISPLAY_DATE_FORMAT),\n rateId,\n acctId,\n itemsMap\n );\n };\n\n handleEndDateChange = date => {\n if (!date) return;\n let selectedDate = moment(date, Constants.DATE_FORMAT);\n this.props.updateSeasonalEndDate(selectedDate.toDate());\n };\n\n handleDaySelect = event => {\n // Clone of object that does not reference the original. This is needed so that redux recognizes the state update.\n const clonedDowMap = JSON.parse(JSON.stringify(this.props.dowMap));\n clonedDowMap[event.target.name] = event.target.checked ? Constants.YES : Constants.NO;\n this.props.updateDowMap(clonedDowMap);\n };\n\n render() {\n let {\n labelsMap,\n rateCategoryMap,\n rateWizardData,\n dowMap,\n seasonalStartDate,\n seasonalEndDate,\n selectedGuaranteePolicy,\n guaranteePolicyOptions,\n selectedCancelPolicy,\n cancelPolicyOptions,\n dateInputFormat\n } = this.props;\n\n let daysOfTheWeek = [\n Constants.SUNDAY_DOW,\n Constants.MONDAY_DOW,\n Constants.TUESDAY_DOW,\n Constants.WEDNESDAY_DOW,\n Constants.THURSDAY_DOW,\n Constants.FRIDAY_DOW,\n Constants.SATURDAY_DOW\n ];\n let {\n rateData: { ifRateCategoryID, currencyCode }\n } = rateWizardData;\n let selectedRateCategory = rateCategoryMap.find(rate => rate.id === ifRateCategoryID);\n let description = selectedRateCategory ? selectedRateCategory.description : \"\";\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {Constants.GET_ROW_2(\n labelsMap[\"Days:\"] ? labelsMap[\"Days:\"] : \"Days:\",\n \n {daysOfTheWeek.map(dow => {\n return (\n \n \n \n );\n })}\n ,\n false,\n 3,\n \"text-right\",\n 8\n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {Constants.GET_ROW_2(\n labelsMap[\"Guarantee\"] ? labelsMap[\"Guarantee\"] : \"Guarantee\",\n ,\n false,\n 3,\n \"text-right\",\n 7\n )}\n {Constants.GET_ROW_2(\n labelsMap[\"Cancel\"] ? labelsMap[\"Cancel\"] : \"Cancel\",\n ,\n false,\n 3,\n \"text-right\",\n 7\n )}\n \n \n \n \n );\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\nimport React from \"react\";\nimport ReactTable from \"react-table\";\nimport * as CommonUtil from \"../../common/CommonUtil\";\nimport { digitToWordMap } from \"../RateWizardConstants\";\nimport \"./react-table.scss\";\n\nexport class RatesEditableTable extends React.Component {\n dataTableElement = null;\n\n componentDidMount() {\n CommonUtil.addScrollEffectToHeaderWithBody(this.dataTableElement);\n }\n\n renderEditable = cellInfo => {\n let { ratesData } = this.props;\n let cellContent =\n ratesData[cellInfo.index] && ratesData[cellInfo.index][cellInfo.column.id]\n ? ratesData[cellInfo.index][cellInfo.column.id]\n : \"\";\n return (\n {\n CommonUtil.selectElementContents(e.target);\n }}\n onBlur={e => {\n const data = ratesData;\n data[cellInfo.index][cellInfo.column.id] = e.target.innerHTML;\n this.props.updateRatesData(data);\n }}\n dangerouslySetInnerHTML={{\n __html: cellContent\n }}\n />\n );\n };\n\n render() {\n let { labelsMap, ratesData, occupancyCount } = this.props;\n //NOTE: Header value is supposed to be string. LabelsMap[\"key\"] gives an array\n const columns = [\n {\n Header:
{labelsMap[\"Room Type\"] ? labelsMap[\"Room Type\"] : \"Room Type\"}
,\n accessor: \"roomtype\",\n width: 180\n },\n {\n Header: labelsMap[\"1 Adult\"] ? labelsMap[\"1 Adult\"] : \"1 Adult\",\n accessor: \"oneadult\",\n Cell: this.renderEditable,\n width: 63\n },\n {\n Header: labelsMap[\"Extra Adult\"] ? labelsMap[\"Extra Adult\"] : \"Extra Adult\",\n accessor: \"extraadult\",\n Cell: this.renderEditable,\n width: 63\n },\n {\n Header: labelsMap[\"Extra Child\"] ? labelsMap[\"Extra Child\"] : \"Extra Child\",\n accessor: \"onechild\",\n Cell: this.renderEditable,\n width: 63\n }\n ];\n\n let extraColumns = [];\n for (var i = 2; i <= occupancyCount; i++) {\n extraColumns.push({\n Header: labelsMap[`${i} Adults`] ? labelsMap[`${i} Adults`][0] : i + \" Adults\",\n accessor: `${digitToWordMap[i]}adults`,\n width: 63,\n Cell: this.renderEditable\n });\n }\n columns.splice(2, 0, ...extraColumns);\n return (\n
\n {\n this.dataTableElement = element;\n }}\n />\n
\n );\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport {\n CHANGE_SEASONAL_START_DATE,\n CHANGE_SEASONAL_END_DATE,\n UPDATE_RATES_DATA,\n UPDATE_DOW_MAP,\n UPDATE_RATE_ITEMS,\n DELETE_RATE_REQUEST\n} from \"../../actionTypes\";\nimport * as rateWizardService from \"../../../../rate-wizard/services/rate-wizard-service\";\nimport * as rateWizardUtil from \"../../../../rate-wizard/RateWizardUtil\";\nimport * as Constants from \"../../../../common/Constants\";\nimport * as RateWizardConstants from \"../../../../rate-wizard/RateWizardConstants\";\nimport moment from \"moment\";\n\nexport const updateSeasonalStartDate = seasonalStartDate => ({\n type: CHANGE_SEASONAL_START_DATE,\n seasonalStartDate: seasonalStartDate\n});\n\nexport const updateSeasonalEndDate = seasonalEndDate => ({\n type: CHANGE_SEASONAL_END_DATE,\n seasonalEndDate: seasonalEndDate\n});\n\nexport const updateRatesData = ratesData => ({\n type: UPDATE_RATES_DATA,\n ratesData: ratesData\n});\n\nexport function loadRatesData(itemIdList, date, rateId, acctId, itemsMap) {\n return dispatch => {\n rateWizardService\n .getRateAmounts(itemIdList, date, rateId, acctId)\n .then(response => dispatch(updateRatesData(rateWizardUtil.buildRateData(response, itemsMap))))\n .catch(err => dispatch(updateRatesData([])));\n };\n}\n\nexport function updateRateItems(\n seasonalStartDate,\n seasonalEndDate,\n dowMap,\n ratesData,\n selectedGuaranteePolicy,\n selectedCancelPolicy,\n rateId,\n userId,\n itemsMap,\n rateItems,\n rateItemsDisplay,\n rateWizardRateItems,\n occupancyCount,\n calculationMethod\n) {\n let newRateItemsDisplay = [];\n ratesData.forEach(singleRateData => {\n const newRateItemElement = {\n rateID: rateId,\n itemID: singleRateData.itemid,\n day1: dowMap[Constants.SUNDAY_DOW],\n day2: dowMap[Constants.MONDAY_DOW],\n day3: dowMap[Constants.TUESDAY_DOW],\n day4: dowMap[Constants.WEDNESDAY_DOW],\n day5: dowMap[Constants.THURSDAY_DOW],\n day6: dowMap[Constants.FRIDAY_DOW],\n day7: dowMap[Constants.SATURDAY_DOW],\n cancelPolicyID: selectedCancelPolicy.value,\n gtdPolicyID: selectedGuaranteePolicy.value,\n beginDate: moment(seasonalStartDate).format(Constants.DISPLAY_DATE_FORMAT),\n endDate: moment(seasonalEndDate).format(Constants.DISPLAY_DATE_FORMAT)\n };\n\n let isValid = (value) => {\n let isValid = true;\n if(value instanceof Array && value[0] === '') isValid = false;\n if(value === '') isValid = false;\n return isValid;\n }\n\n for(var i = 1; i <= occupancyCount; i++) {\n let value = singleRateData[`${RateWizardConstants.digitToWordMap[i]}${i === 1 ? 'adult': 'adults'}`];\n if(!isValid(value)) continue;\n newRateItemElement[`rateForQuantity${i}`] = value;\n }\n\n if(isValid(singleRateData.extraadult)) {\n newRateItemElement.extraAdultCharge = singleRateData.extraadult;\n }\n if(isValid(singleRateData.onechild)) {\n newRateItemElement.extraChildCharge = singleRateData.onechild;\n }\n if (rateItems[singleRateData.itemid]) {\n rateItems[singleRateData.itemid].rateRequests.push(newRateItemElement);\n } else {\n rateItems[singleRateData.itemid] = {\n rateRequests: [newRateItemElement]\n };\n }\n\n // create rate-items list to display\n newRateItemsDisplay.push({\n roomtype: itemsMap[singleRateData.itemid],\n oneadult: singleRateData.oneadult,\n twoadults: singleRateData.twoadults,\n threeadults: singleRateData.threeadults,\n fouradults: singleRateData.fouradults,\n fiveadults: singleRateData.fiveadults,\n sixadults: singleRateData.sixadults,\n sevenadults: singleRateData.sevenadults,\n eightadults: singleRateData.eightadults,\n nineadults: singleRateData.nineadults,\n tenadults: singleRateData.tenadults,\n extraadult: singleRateData.extraadult,\n onechild: singleRateData.onechild,\n sun: dowMap[Constants.SUNDAY_DOW],\n mon: dowMap[Constants.MONDAY_DOW],\n tue: dowMap[Constants.TUESDAY_DOW],\n wed: dowMap[Constants.WEDNESDAY_DOW],\n thu: dowMap[Constants.THURSDAY_DOW],\n fri: dowMap[Constants.FRIDAY_DOW],\n sat: dowMap[Constants.SATURDAY_DOW],\n guarantee: selectedCancelPolicy.label,\n cancel: selectedGuaranteePolicy.label,\n startdate: moment(seasonalStartDate).format(Constants.DISPLAY_DATE_FORMAT),\n enddate: moment(seasonalEndDate).format(Constants.DISPLAY_DATE_FORMAT)\n });\n });\n\n rateItemsDisplay = newRateItemsDisplay.concat(rateItemsDisplay);\n \n let isStandardRate = true;\n if ((calculationMethod === 'BASED_ON_PCT' || calculationMethod === 'BASED_ON_PCT_EXCLUDE' ||\n calculationMethod === 'BASED_ON_SUB' || calculationMethod === 'BASED_ON_ADD'))\n {\n isStandardRate = false;\n }\n\n rateWizardRateItems = rateWizardRateItems.map(item => {\n if(!rateItems[item.lItemID]) {\n item.rateRequests = [];\n return item;\n }\n let { rateRequests } = rateItems[item.lItemID];\n rateRequests = rateRequests.map(rateRequest => {\n let modifiedRateRequest = {\n ...rateRequest,\n ...{\n acctID: item.lAcctID,\n itemID: item.lItemID,\n item_group_id: 1,\n removeYN: 'N',\n mod_user_id: userId,\n calMethod: 'REPLACE',\n\n }\n };\n return modifiedRateRequest;\n });\n item.rateRequests = rateRequests;\n\n if (isStandardRate && rateRequests.length > 0 && item.eState !== \"DELETE\" ) {\n item.eState = \"UPDATE\";\n }\n\n return item;\n });\n \n return {\n type: UPDATE_RATE_ITEMS,\n rateItems: rateItems,\n rateItemsDisplay: rateItemsDisplay,\n rateWizardRateItems\n };\n}\n\nexport function clearRatesData(ratesData) {\n let modifiedRatesData = ratesData.map(rate => {\n return {\n ...rate,\n ...{\n oneadult: [''],\n twoadults: [''],\n threeadults: [''],\n fouradults: [''],\n fiveadults: [''],\n sixadults: [''],\n sevenadults: [''],\n eightadults: [''],\n nineadults: [''],\n tenadults: [''],\n extraadult: [''],\n onechild: ['']\n }\n }\n })\n return dispatch => {\n dispatch(updateRatesData(modifiedRatesData));\n }\n}\n\nexport function deleteRateRequest(rateItems) {\n let updatedRateItems = rateItems.map(rateItem => {\n if(!rateItem.rateRequests) return rateItem;\n if(rateItem.rateRequests.length === 1) {\n delete rateItem.rateRequests;\n }\n else{\n rateItem.rateRequests.pop();\n }\n return rateItem;\n })\n return dispatch => {\n dispatch({\n type: DELETE_RATE_REQUEST,\n rateItems: updatedRateItems\n })\n }\n}\n\nexport const updateDowMap = dowMap => ({\n type: UPDATE_DOW_MAP,\n dowMap: dowMap\n});\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\nimport React from \"react\";\nimport ReactTable from \"react-table\";\nimport * as CommonUtil from \"../../common/CommonUtil\";\nimport { digitToWordMap } from \"../RateWizardConstants\";\nimport \"./react-table.scss\";\nimport moment from \"moment\";\nexport class RatesDisplayTable extends React.Component {\n dataTableElement = null;\n\n componentDidMount() {\n CommonUtil.addScrollEffectToHeaderWithBody(this.dataTableElement);\n }\n\n render() {\n let { labelsMap, rateItemsDisplay, occupancyCount, dateDisplayFormat } = this.props;\n const columns = [\n {\n Header: labelsMap[\"Start Date\"][0],\n accessor: \"startdate\",\n width: 75,\n Cell: row => moment(row.value).format(dateDisplayFormat)\n },\n {\n Header: labelsMap[\"End Date\"][0],\n accessor: \"enddate\",\n width: 75,\n Cell: row => moment(row.value).format(dateDisplayFormat)\n },\n {\n Header: labelsMap[\"S\"][0],\n accessor: \"sun\",\n width: 25\n },\n {\n Header: labelsMap[\"M\"][0],\n accessor: \"mon\",\n width: 25\n },\n {\n Header: labelsMap[\"T\"][0],\n accessor: \"tue\",\n width: 25\n },\n {\n Header: labelsMap[\"W\"][0],\n accessor: \"wed\",\n width: 25\n },\n {\n Header: labelsMap[\"T\"][0],\n accessor: \"thu\",\n width: 25\n },\n {\n Header: labelsMap[\"F\"][0],\n accessor: \"fri\",\n width: 25\n },\n {\n Header: labelsMap[\"S\"][0],\n accessor: \"sat\",\n width: 25\n },\n {\n Header:
{labelsMap[\"Room Type\"][0]}
,\n accessor: \"roomtype\",\n width: 80\n },\n {\n Header: labelsMap[\"1 Adult\"][0],\n accessor: \"oneadult\",\n width: 50\n },\n {\n Header: labelsMap[\"Extra Adult\"][0],\n accessor: \"extraadult\",\n width: 50\n },\n {\n Header: labelsMap[\"Extra Child\"][0],\n accessor: \"onechild\",\n width: 50\n },\n {\n Header: labelsMap[\"Guarantee\"][0],\n accessor: \"guarantee\"\n },\n {\n Header: labelsMap[\"Cancel\"][0],\n accessor: \"cancel\"\n }\n ];\n\n let extraColumns = [];\n for (var i = 2; i <= occupancyCount; i++) {\n extraColumns.push({\n Header: labelsMap[`${i} Adults`] ? labelsMap[`${i} Adults`][0] : i + \" Adults\",\n accessor: `${digitToWordMap[i]}adults`,\n width: 60\n });\n }\n columns.splice(11, 0, ...extraColumns);\n\n return (\n
\n {\n this.dataTableElement = element;\n }}\n />\n
\n );\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc\n */\n\nimport React from \"react\";\nimport { Button, Row, Card, CardHeader } from \"reactstrap\";\nimport { RateInfo } from \"./RateInfo\";\nimport { RatesEditableTable } from \"./RatesEditableTable\";\nimport * as Constants from \"../../common/Constants\";\nimport { FILTERED_RATE_ITEMS, MAX_ADULTS_NUMBER } from \"../RateWizardConstants\";\nimport {\n updateSeasonalStartDate,\n updateSeasonalEndDate,\n updateRatesData,\n loadRatesData,\n updateDowMap,\n updateRateItems,\n clearRatesData,\n deleteRateRequest\n} from \"../../common/redux/actions/rate-wizard/rates.js\";\n\nimport {\n loadGuaranteePolicies,\n updateSelectedGuaranteePolicy,\n loadCancelPolicies,\n updateSelectedCancelPolicy\n} from \"../../common/redux/actions/rate-wizard/policies.js\";\n\nimport { setValidationError, clearValidationError } from \"../../common/redux/actions/rate-wizard/validation\";\n\nimport { connect } from \"react-redux\";\nimport moment from \"moment\";\nimport { RatesDisplayTable } from \"./RatesDisplayTable\";\nimport { toast } from \"react-toastify\";\n\nexport class Rates extends React.Component {\n constructor() {\n super();\n this.state = {\n occupancyCount: 0\n };\n }\n componentDidMount() {\n let {\n guaranteePolicyOptions,\n acctId,\n labelsMap,\n cancelPolicyOptions,\n rateId,\n itemsMap,\n itemsOrder,\n loadGuaranteePolicies,\n loadCancelPolicies,\n loadRatesData,\n rateWizardData,\n updateSeasonalStartDate,\n updateSeasonalEndDate\n } = this.props;\n\n let { rateItems } = rateWizardData;\n\n let selectedItems = rateItems\n .filter(item => item.eState !== \"DELETE\")\n .filter(item => !FILTERED_RATE_ITEMS.includes(item.lItemID))\n .map(item => item.lItemID);\n\n if (!guaranteePolicyOptions || guaranteePolicyOptions.length === 0) {\n loadGuaranteePolicies(acctId, labelsMap[\"Use Inherited Value\"] ? labelsMap[\"Use Inherited Value\"] : \"Use Inherited Value\");\n }\n\n if (!cancelPolicyOptions || cancelPolicyOptions.length === 0) {\n loadCancelPolicies(acctId, labelsMap[\"Use Inherited Value\"] ? labelsMap[\"Use Inherited Value\"] : \"Use Inherited Value\");\n }\n let {\n rateData: { beginSellDate, endSellDate }\n } = rateWizardData;\n\n let beginDate = beginSellDate ? new Date(beginSellDate) : new Date();\n let endDate = endSellDate ? new Date(endSellDate) : beginSellDate ? new Date(beginSellDate) : new Date();\n updateSeasonalStartDate(beginDate);\n updateSeasonalEndDate(endDate);\n\n if (moment(beginDate).isSame(moment(endDate))) {\n toast.info(\"Please ensure that the seasonal end date is correct.\");\n }\n let selectedItemsObj = [];\n for (let i = 0; i < itemsOrder.length; i++) {\n if (selectedItems.includes(itemsOrder[i])) {\n selectedItemsObj.push(itemsOrder[i]);\n }\n }\n loadRatesData(selectedItemsObj.join(\",\"), moment(beginDate).format(Constants.DISPLAY_DATE_FORMAT), rateId, acctId, itemsMap);\n\n let {\n rateData: { maxQuantityPerRateRequest, maxOccupancy }\n } = rateWizardData;\n let occupancyCount = this.getOccupancyCount(maxQuantityPerRateRequest, maxOccupancy);\n\n this.props.setValidationError({\n type: \"confirm\",\n confirmMessage: \"No rate requests were created.Do you wish to proceed anyway?\",\n yesHandler: () => {\n this.props.clearValidationError();\n }\n });\n\n this.setState({ occupancyCount });\n }\n\n getOccupancyCount = (maxQuantityPerRateRequest, maxOcc) => {\n let maxQuantity = parseInt(maxQuantityPerRateRequest);\n let maxOccupancy = parseInt(maxOcc);\n if (maxQuantity < 0) {\n if (maxOccupancy < 0) {\n maxOccupancy = 1;\n maxQuantity = 1;\n } else {\n maxQuantity = maxOccupancy;\n }\n } else if (maxOccupancy < 0) {\n maxOccupancy = maxQuantity;\n }\n\n let occupancyCount = Math.min(maxQuantity, maxOccupancy);\n // RVNG-7141: Limit the number of adult values that can be entered to 10\n if (occupancyCount > MAX_ADULTS_NUMBER) {\n occupancyCount = MAX_ADULTS_NUMBER;\n }\n\n return occupancyCount;\n };\n\n saveRateItems = () => {\n const {\n rateWizardData: { rateItems, rateData },\n ratesData,\n seasonalEndDate,\n updateSeasonalStartDate,\n updateSeasonalEndDate,\n } = this.props;\n this.props.clearValidationError();\n const { occupancyCount } = this.state;\n\n this.props.updateRateItems(\n this.props.seasonalStartDate,\n this.props.seasonalEndDate,\n this.props.dowMap,\n ratesData,\n this.props.selectedGuaranteePolicy,\n this.props.selectedCancelPolicy,\n this.props.rateId,\n this.props.userId,\n this.props.itemsMap,\n this.props.rateItems,\n this.props.rateItemsDisplay,\n rateItems,\n occupancyCount,\n rateData.calculationMethod\n );\n // The start date should then default to the date following the last saved end date.\n let beginDate = (!rateData.endSellDate || moment(seasonalEndDate).isBefore(rateData.endSellDate)) ? moment(seasonalEndDate).startOf(\"day\").add(1, \"days\").toDate() \n : rateData.beginSellDate ? new Date(rateData.beginSellDate) \n : new Date();\n let endDate = (!rateData.endSellDate || moment(seasonalEndDate).isBefore(rateData.endSellDate)) ? moment(seasonalEndDate).startOf(\"day\").add(1, \"days\").toDate() \n : rateData.endSellDate ? new Date(rateData.endSellDate) \n : new Date();\n updateSeasonalStartDate(beginDate);\n updateSeasonalEndDate(endDate);\n };\n\n clearRatesData = () => {\n this.props.clearRatesData(this.props.ratesData);\n };\n\n render() {\n let { labelsMap, rateItemsDisplay } = this.props;\n let { occupancyCount } = this.state;\n return (\n \n \n {labelsMap[\"Rates and Room Types:\"] ? labelsMap[\"Rates and Room Types:\"] : \"Rates and Room Types:\"}\n \n \n\n \n\n \n
\n \n \n
\n
\n {rateItemsDisplay && rateItemsDisplay.length > 0 && (\n \n
\n {labelsMap[\"Rate Summary:\"] ? labelsMap[\"Rate Summary:\"] : \"Rate Summary:\"}\n {labelsMap[\"These are the rates you have entered so far...\"]\n ? labelsMap[\"These are the rates you have entered so far...\"]\n : \"These are the rates you have entered so far...\"}\n \n
\n
\n )}\n
\n );\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n updateSeasonalStartDate: seasonalStartDate => dispatch(updateSeasonalStartDate(seasonalStartDate)),\n updateSeasonalEndDate: seasonalEndDate => dispatch(updateSeasonalEndDate(seasonalEndDate)),\n loadGuaranteePolicies: (acctId, nullLabel) => dispatch(loadGuaranteePolicies(acctId, nullLabel)),\n updateSelectedGuaranteePolicy: selectedGuaranteePolicy => dispatch(updateSelectedGuaranteePolicy(selectedGuaranteePolicy)),\n loadCancelPolicies: (acctId, nullLabel) => dispatch(loadCancelPolicies(acctId, nullLabel)),\n updateSelectedCancelPolicy: acctId => dispatch(updateSelectedCancelPolicy(acctId)),\n updateRatesData: ratesData => dispatch(updateRatesData(ratesData)),\n clearRatesData: ratesData => dispatch(clearRatesData(ratesData)),\n loadRatesData: (itemIdList, date, rateId, acctId, itemsMap) =>\n dispatch(loadRatesData(itemIdList, date, rateId, acctId, itemsMap)),\n updateDowMap: (dowMap, dayName, checked) => dispatch(updateDowMap(dowMap, dayName, checked)),\n updateRateItems: (\n seasonalStartDate,\n seasonalEndDate,\n dowMap,\n ratesData,\n selectedGuaranteePolicy,\n selectedCancelPolicy,\n rateId,\n userId,\n itemsMap,\n rateItems,\n rateItemsDisplay,\n rateWizardRateItems,\n occupancyCount,\n calculationMethod\n ) =>\n dispatch(\n updateRateItems(\n seasonalStartDate,\n seasonalEndDate,\n dowMap,\n ratesData,\n selectedGuaranteePolicy,\n selectedCancelPolicy,\n rateId,\n userId,\n itemsMap,\n rateItems,\n rateItemsDisplay,\n rateWizardRateItems,\n occupancyCount,\n calculationMethod\n )\n ),\n deleteRateRequest: rateItems => dispatch(deleteRateRequest(rateItems)),\n setValidationError: validationErrorObject => dispatch(setValidationError(validationErrorObject)),\n clearValidationError: () => dispatch(clearValidationError())\n});\n\nconst mapStateToProps = state => {\n return {\n seasonalStartDate: state.rateWizard.seasonalStartDate,\n seasonalEndDate: state.rateWizard.seasonalEndDate,\n guaranteePolicyOptions: state.rateWizard.guaranteePolicyOptions,\n selectedGuaranteePolicy: state.rateWizard.selectedGuaranteePolicy,\n cancelPolicyOptions: state.rateWizard.cancelPolicyOptions,\n selectedCancelPolicy: state.rateWizard.selectedCancelPolicy,\n ratesData: state.rateWizard.ratesData,\n selectedItems: state.rateWizard.selectedItems,\n itemsMap: state.rateWizard.itemsMap,\n itemsOrder: state.rateWizard.itemsOrder,\n dowMap: state.rateWizard.dowMap,\n rateItems: state.rateWizard.rateItems,\n rateItemsDisplay: state.rateWizard.rateItemsDisplay,\n rateWizardData: state.rateWizard.rateWizardData,\n rateCategoryMap: state.rateWizard.rateCategoryMap,\n labelsMap: state.rateWizard.labelMap,\n dateDisplayFormat: state.rateWizard.dateDisplayFormat,\n dateInputFormat: state.rateWizard.dateInputFormat\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Rates);\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { Card, CardBody, Col, Row } from \"reactstrap\";\nimport React from \"react\";\nimport * as rateWizardConstants from \"../RateWizardConstants\";\n\nexport class RoomOptionSelect extends React.Component {\n roomOptionOnChange = value => {\n this.props.roomOptionSelectChanged(value);\n };\n\n render() {\n let { labelsMap } = this.props;\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { Card, CardBody, CardHeader, Col, Row } from \"reactstrap\";\nimport React from \"react\";\nimport { RoomOptionSelect } from \"./RoomOptionSelect\";\nimport CheckboxTree from \"react-checkbox-tree\";\nimport { connect } from \"react-redux\";\nimport { extractParentRoomTypes } from \"../../common/CommonUtil\";\nimport {\n getRoomTypesTree,\n changeSelectedRoomOption,\n updateSelectedItems,\n updateExpandedItems,\n updateRateWizardData\n} from \"../../common/redux/actions/index.js\";\nimport * as Constants from \"../../common/Constants\";\n\n// Parent state fields to be updated\nconst ITEMS_TREE_ROOT_NAME = \"Room Types\";\n\nclass RoomTypes extends React.Component {\n constructor(props) {\n super(props);\n this.originalRateItems = [...props.rateWizardData.rateItems];\n }\n componentDidMount() {\n // Only load rooms if they haven't been loaded before\n if (this.props.itemsTreeNodes.length === 0) {\n this.props.getRoomTypesTree(this.props.acctId, ITEMS_TREE_ROOT_NAME, this.props.selectedRoomOption);\n }\n const {\n rateWizardData: { rateItems, orgRateItems, rateData }\n } = this.props;\n\n if (this.props.selectedItems.length === 0) {\n const checked = rateItems.filter(item => item.eState !== \"DELETE\").map(item => item.lItemID);\n this.props.updateSelectedItems(checked);\n }\n\n // RVNG-6974: eState should be \"INSERT\" for non-standalone new rate \n if (orgRateItems.length === 0 && rateItems.length > 0 && rateData.calculationMethod !== \"CALENDAR\") {\n rateItems.forEach(item => {\n if (item.eState === \"UPDATE\") {\n item.eState = \"INSERT\";\n }\n });\n }\n }\n\n updateRateItems = checked => {\n /**\n * case 1: if value exists in rateItems already and is checked\n * keep value as it is ie. UPDATE\n * case 2: if value exists in rateItems already and is unchecked\n * prev value = UPDATE then new value = DELETE\n * prev value = INSERT then delete entry\n * case 3: if value doesn't exist in rateItems and is checked\n * prev value = no value => value = INSERT \n * case 4: if value doesn't exit in rateItems and is unchecked\n * do nothing\n */\n const { rateWizardData, acctId, rateId } = this.props;\n const partialPayload = {\n lAcctID: acctId,\n lItemGroupID: 1,\n lRateID: rateId,\n lPromotionID: \"-999\",\n szAllowSaleYN: \"Y\"\n };\n\n // create object where key=lItemID and value=lRateItemID. We'll use it to determine which rate/items are new (to insert) and which are existing (to update).\n // The items that have a lRateItemID are existing, the ones that don't are new.\n var rateItemsMap = this.originalRateItems.reduce((rateItemsMap, rateItem) => {\n rateItemsMap[rateItem.lItemID] = rateItem.lRateItemID;\n return rateItemsMap;\n }, {});\n \n let updatedRateItems = checked.reduce((updatedRateItems, item) => {\n //case 3\n if (!rateItemsMap[item]) {\n updatedRateItems.push(Object.assign({}, partialPayload, { lItemID: item, eState: \"INSERT\" }));\n }\n //case 1\n else {\n updatedRateItems.push(\n Object.assign({}, partialPayload, { lItemID: item, lRateItemID: rateItemsMap[item], eState: \"UPDATE\" })\n );\n }\n return updatedRateItems;\n }, []);\n updatedRateItems = this.originalRateItems.reduce((rateItemsArray, rateItem) => {\n //case 2\n if (checked.find(item => item === rateItem.lItemID) === undefined) {\n rateItemsArray.push(Object.assign({}, partialPayload, { lItemID: rateItem.lItemID, eState: \"DELETE\" }));\n }\n return rateItemsArray;\n }, updatedRateItems);\n // Need to recalculate channelsTableData\n if (rateWizardData.rateData.channelsTableData) {\n rateWizardData.rateData.channelsTableData=\"\";\n }\n let updatedRateWizardData = Object.assign({}, rateWizardData, { rateItems: updatedRateItems });\n this.props.updateRateWizardData(updatedRateWizardData);\n this.props.updateSelectedItems(checked);\n };\n\n roomOptionSelectChanged = event => {\n let selectedRoomOption = event.currentTarget.value;\n this.props.changeSelectedRoomOption(selectedRoomOption);\n this.props.getRoomTypesTree(this.props.acctId, ITEMS_TREE_ROOT_NAME, selectedRoomOption);\n if (selectedRoomOption === \"all\") {\n let { itemsMap } = this.props;\n let checked = Object.keys(itemsMap);\n this.updateRateItems(checked);\n }\n };\n\n getChildrenNodes = (node) => {\n let childItems = [];\n node.children.forEach(element => {\n childItems.push(element.value);\n if (element.children && element.children.length > 0) {\n this.getChildrenNodes(element).forEach((node) => {childItems.push(node)});\n }\n });\n return childItems;\n }\n\n checkBoxTreeOnCheck = (checked, targetNode) => {\n let childItems = [];\n if (targetNode.children && targetNode.children.length > 0) {\n this.getChildrenNodes(targetNode).forEach((node) => {childItems.push(node)});\n }\n if (childItems.length > 0) {\n if (checked.includes(targetNode.value)) {\n // checked case\n childItems.forEach((node) => {\n if (!checked.includes(node)) {\n checked.push(node);\n };\n });\n } else {\n // unchecked case\n checked = checked.filter(item => !childItems.includes(item));\n }\n }\n this.updateRateItems(checked);\n };\n\n checkBoxTreeOnExpand = expanded => {\n this.props.updateExpandedItems(expanded);\n };\n\n render() {\n const { labelsMap } = this.props;\n // Get list of parent room types nodes and will be expanded\n if ((this.props.itemsTreeExpanded.length === 0) && (this.props.itemsTreeNodes.length !== 0)) {\n let { children } = this.props.itemsTreeNodes[0];\n let parentRoomTypes = [];\n if (children && children.length > 0) {\n parentRoomTypes = extractParentRoomTypes(children);\n }\n // RVNG-6842: add root node\n parentRoomTypes.push(this.props.itemsTreeNodes[0].value);\n this.props.updateExpandedItems(parentRoomTypes);\n }\n return (\n \n {labelsMap[\"Room Types:\"]? labelsMap[\"Room Types:\"]: \"Room Types:\"}\n \n {Constants.SECTION_HEADER(labelsMap[\"Rates and Room Types:\"]? labelsMap[\"Rates and Room Types:\"]: \"Rates and Room Types:\")}\n \n \n \n\n
\n \n {Constants.SECTION_HEADER(labelsMap[\"Room Types:\"]? labelsMap[\"Room Types:\"]: \"Room Types:\")}\n \n

{labelsMap[\"Select Room Type that can be sold in this rate plan\"]? labelsMap[\"Select Room Type that can be sold in this rate plan\"]\n :\"Select Room Type that can be sold in this rate plan\"}

\n \n
\n \n \n
\n \n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n getRoomTypesTree: (acctId, rootName, selectedRoomOption) => dispatch(getRoomTypesTree(acctId, rootName, selectedRoomOption)),\n changeSelectedRoomOption: selectedRoomOption => dispatch(changeSelectedRoomOption(selectedRoomOption)),\n updateSelectedItems: selectedItems => dispatch(updateSelectedItems(selectedItems)),\n updateExpandedItems: itemsTreeExpanded => dispatch(updateExpandedItems(itemsTreeExpanded)),\n updateRateWizardData: wizardData => dispatch(updateRateWizardData(wizardData))\n});\n\nconst mapStateToProps = state => {\n return {\n itemsTreeNodes: state.rateWizard.itemsTreeNodes,\n itemsTreeDisabled: state.rateWizard.itemsTreeDisabled,\n selectedRoomOption: state.rateWizard.selectedRoomOption,\n itemsTreeExpanded: state.rateWizard.itemsTreeExpanded,\n rateWizardData: state.rateWizard.rateWizardData,\n itemsMap: state.rateWizard.itemsMap,\n labelsMap: state.rateWizard.labelMap\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(RoomTypes);\n","import {\n LOAD_RATE_WIZARD_DATA,\n LOAD_PREFERENCES,\n LOAD_RATE_WIZARD_LABELS,\n CHANGE_SELECTED_MENU_INDEX,\n LOAD_RATE_CATEGORIES,\n LOAD_RATE_ACCESS_CODES,\n UPDATE_RATE_WIZARD_DATA,\n LOAD_CURRENCIES\n} from \"../../actionTypes\";\nimport * as rateWizardService from \"../../../../rate-wizard/services/rate-wizard-service\";\nimport * as rateWizardUtil from \"../../../../rate-wizard/RateWizardUtil\";\nimport * as commonService from \"../../../../common/services/common-service\";\nimport * as commonUtil from \"../../../../common/CommonUtil\";\n\nexport const loadRateWizardData = (rateId, userId) => {\n return dispatch => {\n rateWizardService.getRateWizardData(rateId, userId).then(response => {\n return dispatch({ type: LOAD_RATE_WIZARD_DATA, response: rateWizardUtil.getParsedRateWizardData(response) });\n });\n };\n};\n\nexport const updateRateWizardData = rateWizardData => ({\n type: UPDATE_RATE_WIZARD_DATA,\n rateWizardData: rateWizardData\n});\n\nexport const loadPreferences = (isUser, id) => {\n return dispatch => {\n commonService.getPreferences(isUser, id).then(response => {\n return dispatch({ type: LOAD_PREFERENCES, response: rateWizardUtil.getParsedPreferences(response), isUser: isUser });\n });\n };\n};\n\nexport function loadLabelsAndPaths(fileName, isPropertyLevel, language) {\n return dispatch => {\n commonService.getLabels(fileName, true, language).then(response => {\n let labelMap = commonUtil.getLabelMapFromResponse(response, true);\n dispatch(setLabelsMapAndPaths(isPropertyLevel, labelMap));\n });\n };\n}\n\nconst setLabelsMapAndPaths = (isPropertyLevel, labelMap) => ({\n type: LOAD_RATE_WIZARD_LABELS,\n labelMap: labelMap,\n rateWizardPaths: rateWizardUtil.getRateWizardPaths(isPropertyLevel, labelMap)\n});\n\nexport const changeSelectedMenuIndex = indexToSelect => ({\n type: CHANGE_SELECTED_MENU_INDEX,\n selectedMenuIndex: indexToSelect\n});\n\nexport const loadRateCategories = () => {\n return dispatch => {\n commonService.getRateCategories().then(response => {\n return dispatch({\n type: LOAD_RATE_CATEGORIES,\n rateCategoryMap: rateWizardUtil.buildRateCategoryMap(response)\n });\n });\n };\n};\n\nexport const loadRateAccessCodes = (acctId, rateId) => {\n return dispatch => {\n rateWizardService.getRateAccessCodes(acctId, rateId, 1).then(response => {\n return dispatch({\n type: LOAD_RATE_ACCESS_CODES,\n rateAccessCodes: rateWizardUtil.buildRateAccessCodesMap(response)\n });\n });\n };\n};\n\nexport const loadCurrencies = () => {\n return dispatch => {\n commonService.getCurrencies().then(response => {\n return dispatch({\n type: LOAD_CURRENCIES,\n currencies: rateWizardUtil.buildCurrenciesMap(response)\n });\n });\n };\n};\n","import * as rateWizardConstants from \"../../../../rate-wizard/RateWizardConstants\";\nimport { LOAD_ITEMS_TREE, CHANGE_SELECTED_ROOM_OPTION, CHANGE_SELECTED_ITEMS, CHANGE_EXPANDED_ITEMS } from \"../../actionTypes\";\nimport * as rateWizardService from \"../../../../rate-wizard/services/rate-wizard-service\";\nimport * as rateWizardUtil from \"../../../../rate-wizard/RateWizardUtil\";\n\nexport function getRoomTypesTree(acctId, rootName, selectedRoomOption) {\n return dispatch => {\n rateWizardService\n .getRoomTypesTree(acctId, false, null, false, rootName)\n .then(response => dispatch(loadItemsTree(rateWizardUtil.extractItems(response), selectedRoomOption)));\n };\n}\n\nconst loadItemsTree = (extractedItems, selectedRoomOption) => ({\n type: LOAD_ITEMS_TREE,\n itemsTreeNodes: extractedItems,\n itemsMap: rateWizardUtil.buildItemsMap({}, extractedItems),\n itemsOrder: rateWizardUtil.getAllItemValues([], extractedItems),\n itemsTreeDisabled: selectedRoomOption === rateWizardConstants.ROOM_OPTION_SELECT_ALL ? true : false\n});\n\nexport const changeSelectedRoomOption = selectedRoomOption => ({\n type: CHANGE_SELECTED_ROOM_OPTION,\n selectedRoomOption: selectedRoomOption\n});\n\nexport const updateSelectedItems = selectedItems => ({\n type: CHANGE_SELECTED_ITEMS,\n selectedItems: selectedItems\n});\n\nexport const updateExpandedItems = itemsTreeExpanded => ({\n type: CHANGE_EXPANDED_ITEMS,\n itemsTreeExpanded: itemsTreeExpanded\n});\n// commenting this code out instead of deleting it as it serves as a reference code for future use\n/*\nfunction getSelectedItems(response, selectedRoomOption) {\n var extractedItems = rateWizardUtil.extractItems(response);\n var itemValues = [];\n if (selectedRoomOption === rateWizardConstants.ROOM_OPTION_SELECT_ALL) {\n itemValues = rateWizardUtil.getAllItemValues(itemValues, extractedItems);\n } else {\n itemValues = rateWizardUtil.extractCheckedItemValues(response);\n }\n return itemValues;\n}\n*/\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport { START_DATA_LOAD, END_DATA_LOAD, SAVE_AUTH_INFO } from \"../actionTypes\";\nimport * as commonService from \"../../services/common-service\";\nimport * as Constants from \"../../Constants\";\n\nexport * from \"./rate-wizard/index\";\nexport * from \"./rate-wizard/roomTypes\";\n\n//Action to start loading\nexport const startLoading = () => ({ type: START_DATA_LOAD });\n\n//Action to end loading\nexport const endLoading = () => ({ type: END_DATA_LOAD });\n\n//Action to generate token\nexport const login = (username, password) => {\n return dispatch => {\n commonService.getAuthToken(username, password).then(response => {\n return dispatch(saveAuthInfoAndSetInterval(username, password, response, dispatch));\n });\n };\n};\n\nlet loginInterval;\n\nexport const saveAuthInfoAndSetInterval = (username, password, response, dispatch) => {\n let token;\n let interval;\n let parameters = response.parameters[0];\n if(parameters.parameter[1].$.name === \"timeOutInMillis\") {\n interval = parseFloat(parameters.parameter[1].$.value);\n token = parameters.parameter[0].$.value;\n } else {\n interval = parseFloat(parameters.parameter[0].$.value);\n token = parameters.parameter[1].$.value;\n }\n if (!loginInterval) { \n interval =\n interval > Constants.REFRESH_INTERVAL_BEFORE_TIMEOUT\n ? interval - Constants.REFRESH_INTERVAL_BEFORE_TIMEOUT\n : Constants.DEFAULT_TIMEOUT;\n\n //Calling refresh before the token expires\n loginInterval = setInterval(() => {\n dispatch(login(username, password));\n }, interval);\n }\n\n return {\n type: SAVE_AUTH_INFO,\n username: username,\n token: token\n };\n};\n","import React from 'react';\n\nfunction PageNotFound() {\n\n return (\n
\n \n \n \n \n \n \n \n\n
\n
\n
\n
\n \n \n \n \n
\n The page you have requested cannot be found

\n\n \n The page you have requested might no longer exist, has had its name changed, or is temporarily unavailable.

\n Suggestions:

\n If you typed the page address/URL, make sure it is spelled correctly.

\n Use the \"Back\" button on your browser to return to the previous page.
\n
\n
\n
\n );\n}\n\nexport default PageNotFound;","import React from 'react';\nimport { Route } from 'react-router-dom';\nimport { connect } from \"react-redux\";\nimport { login } from \"./common/redux/actions/index\";\nimport { parse } from \"query-string\";\n\nfunction PrivateRoute({ component: Component, ...props }) {\n // Fetching username password from the url.\n let username = props.location.search ? parse(props.location.search).username : \"\";\n let password = props.location.search ? parse(props.location.search).password : \"\";\n if (!props.token) {\n props.generateToken(username, password);\n }\n return (\n \n {\n props.token &&\n (\n \n ()\n }\n />\n )\n }\n \n );\n}\nconst mapStateToProps = state => {\n return {\n token: state.auth.token\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n generateToken: (username, password) => dispatch(login(username, password))\n };\n};\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(PrivateRoute);","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\nimport React from \"react\";\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\nimport { Container } from \"reactstrap\";\nimport PageNotFound from \"./PageNotFound\";\nimport PrivateRoute from \"./PrivateRoute\";\nimport * as Constants from \"./common/Constants\";\nimport axios from \"axios\";\nimport { ToastContainer, toast } from \"react-toastify\";\nimport { START_DATA_LOAD, END_DATA_LOAD } from \"./common/redux/actionTypes\";\nimport { connect } from \"react-redux\";\nimport \"./App.scss\";\nimport \"./index.scss\";\nimport { isDisplayErrorPopupMsg, modifyInterceptedResponse } from \"./common/CommonUtil\";\n\n// Using React.lazy to only render component when the route is accessed\nconst RateWizard = React.lazy(() => import(\"./rate-wizard/components/\"));\nconst NotificationForm = React.lazy(() => import(\"./notification/components/\"));\nconst RestatusForm = React.lazy(() => import(\"./restatus/components/\"));\nconst ItemWizard = React.lazy(() => import(\"./item-wizard/components/\"));\nconst MassUpdate = React.lazy(() => import(\"./mass-update/components/\"));\nconst SelectAirports = React.lazy(() => import(\"./airports/components/SelectAirports\"));\nconst UpdateAirports = React.lazy(() => import(\"./airports/components/UpdateAirports\"));\nconst RateCalendar = React.lazy(() => import(\"./rate-calendar/components/\"));\nconst RateSequencing = React.lazy(() => import(\"./rate-sequencing/components/index\"));\nconst InternetBookingEngine = React.lazy(() => import(\"./reservation/components\"));\nconst Restaurant = React.lazy(() => import(\"./restaurant/components\"));\nconst MeetingRooms = React.lazy(() => import(\"./meeting-rooms/components/\"));\nconst Attractions = React.lazy(() => import(\"./attractions/components\"));\n\nconst parseString = require(\"xml2js\").parseString;\n\nconst FontAwesome = require(\"react-fontawesome\");\n\nclass App extends React.Component {\n constructor(props) {\n super(props);\n }\n\n componentDidMount() {\n this.props.hideLoader();\n }\n\n render() {\n return (\n \n \n {\n \n \n }>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n \n \n );\n }\n}\n\nclass _Loader extends React.Component {\n constructor(props) {\n super(props);\n\n if (!this.props.moduleLoading) {\n //Adding a request interceptor to show a loader when request is made.\n axios.interceptors.request.use(function(config) {\n props.startLoading();\n return config;\n });\n\n // Adding a response interceptor for error handling and hiding the loader\n axios.interceptors.response.use(\n function(response) {\n let interceptedResponse = null;\n let errorMessage = \"No Data Found\";\n let isError = true;\n let errorCode = \"\";\n if (props) {\n props.endLoading();\n }\n if (response && response.data !== \"\") {\n parseString(response.data, (err, result) => {\n if (result) {\n if (result.response.$.success === \"true\") {\n isError = false;\n interceptedResponse = result.response;\n } else {\n if (result.response.$.message) {\n errorMessage = result.response.$.message;\n }\n if (result.response.$.code) {\n errorCode = result.response.$.code;\n }\n interceptedResponse = Promise.reject(errorMessage);\n }\n } else if (err) {\n errorMessage = err;\n interceptedResponse = Promise.reject(err);\n }\n });\n }\n if (isError) {\n if (isDisplayErrorPopupMsg({ errorCode, errorMessage, response })) {\n toast.error(errorMessage);\n }\n interceptedResponse = modifyInterceptedResponse(response, interceptedResponse);\n }\n return interceptedResponse;\n },\n function(error) {\n let interceptedResponse = Promise.reject(error);\n props.endLoading();\n if (isDisplayErrorPopupMsg({ errorCode: \"\", errorMessage: \"\", response: error })) {\n toast.error(error.message);\n }\n interceptedResponse = modifyInterceptedResponse(error, interceptedResponse);\n return interceptedResponse;\n }\n );\n }\n }\n\n render() {\n return (\n \n {(this.props.isLoading || this.props.moduleLoading) && (\n
\n
\n \n
\n
\n )}\n
\n );\n }\n}\n\nconst mapStateToProps = state => {\n return {\n isLoading: state.loader.loadingCount > 0\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n startLoading: () => dispatch({ type: START_DATA_LOAD }),\n endLoading: () => dispatch({ type: END_DATA_LOAD })\n };\n};\n\nconst Loader = connect(\n mapStateToProps,\n mapDispatchToProps\n)(_Loader);\n\nexport default App;\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\"This web app is being served cache-first by a service worker. To learn more, visit http://bit.ly/CRA-PWA\");\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See http://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (response.status === 404 || (contentType != null && contentType.indexOf(\"javascript\") === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\"No internet connection found. App is running in offline mode.\");\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\nimport \"react-app-polyfill/ie11\";\nimport \"react-app-polyfill/stable\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.scss\";\nimport App from \"./App\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport \"bootstrap/dist/css/bootstrap.css\";\nimport \"react-datepicker/dist/react-datepicker-cssmodules.css\";\nimport \"react-table/react-table.css\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport \"react-checkbox-tree/lib/react-checkbox-tree.css\";\nimport { Provider } from \"react-redux\";\nimport store from \"./common/redux/store\";\nimport { BrowserRouter as Router, Route } from \"react-router-dom\";\n\n// To display a spinner before the react code is rendered.\nconst loader = document.querySelector(\".loader\");\nconst hideLoader = () => loader.classList.add(\"loader--hide\");\n\nReactDOM.render(\n \n \n } />\n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nexport const START_DATA_LOAD = \"START_DATA_LOAD\";\nexport const END_DATA_LOAD = \"END_DATA_LOAD\";\nexport const SAVE_AUTH_INFO = \"SAVE_AUTH_INFO\";\nexport const LOAD_RATE_WIZARD_DATA = \"LOAD_RATE_WIZARD_DATA\";\nexport const UPDATE_RATE_WIZARD_DATA = \"UPDATE_RATE_WIZARD_DATA\";\nexport const LOAD_PREFERENCES = \"LOAD_PREFERENCES\";\nexport const LOAD_ITEMS_TREE = \"LOAD_ITEMS_TREE\";\nexport const LOAD_RATE_WIZARD_LABELS = \"LOAD_RATE_WIZARD_LABELS\";\nexport const CHANGE_SELECTED_ROOM_OPTION = \"CHANGE_SELECTED_ROOM_OPTION\";\nexport const CHANGE_SELECTED_ITEMS = \"CHANGE_SELECTED_ITEMS\";\nexport const CHANGE_EXPANDED_ITEMS = \"CHANGE_EXPANDED_ITEMS\";\nexport const CHANGE_SELECTED_MENU_INDEX = \"CHANGE_SELECTED_MENU_INDEX\";\nexport const CHANGE_SEASONAL_START_DATE = \"CHANGE_SEASONAL_START_DATE\";\nexport const CHANGE_SEASONAL_END_DATE = \"CHANGE_SEASONAL_END_DATE\";\nexport const LOAD_GUARANTEE_SELECT = \"LOAD_GUARANTEE_SELECT\";\nexport const UPDATE_GUARANTEE_POLICY = \"UPDATE_GUARANTEE_POLICY\";\nexport const LOAD_CANCEL_SELECT = \"LOAD_CANCEL_SELECT\";\nexport const UPDATE_CANCEL_POLICY = \"UPDATE_CANCEL_POLICY\";\nexport const UPDATE_RATES_DATA = \"UPDATE_RATES_DATA\";\nexport const BUILD_RATE_DATA = \"BUILD_RATE_DATA\";\nexport const UPDATE_RATE_ITEMS = \"UPDATE_RATE_ITEMS\";\nexport const UPDATE_DOW_MAP = \"UPDATE_DOW_MAP\";\nexport const LOAD_RATE_CATEGORIES = \"LOAD_RATE_CATEGORIES\";\nexport const LOAD_RATE_ACCESS_CODES = 'LOAD_RATE_ACCESS_CODES';\nexport const CLEAR_RATE_WIZARD_VALIDATION_ERROR = 'CLEAR_RATE_WIZARD_VALIDATION_ERROR'\nexport const SET_RATE_WIZARD_VALIDATION_ERROR = 'SET_RATE_WIZARD_VALIDATION_ERROR';\nexport const TOGGLE_REQUIRES_CONTRACT_FLAG = 'TOGGLE_REQUIRES_CONTRACT_FLAG';\nexport const TOGGLE_USE_CONTRACT_DESCRIPTION_FLAG = 'TOGGLE_USE_CONTRACT_DESCRIPTION_FLAG';\nexport const LOAD_COMM_CALC_METHOD = \"LOAD_COMM_CALC_METHOD\";\nexport const LOAD_RATE_CALC_METHOD = \"LOAD_RATE_CALC_METHOD\";\nexport const LOAD_STRIKE_CALC_METHOD = \"LOAD_STRIKE_CALC_METHOD\";\nexport const LOAD_RATE_INDEX_OPTIONS = \"LOAD_RATE_INDEX_OPTIONS\";\n\nexport const LOAD = \"LOAD_POLICY_\";\nexport const UPDATE = \"UPDATE_POLICY_\";\n\nexport const LOAD_CURRENCIES = \"LOAD_CURRENCIES\";\nexport const UPDATE_PARAMETERS_TABLE_DATA = 'UPDATE_PARAMETERS_TABLE_DATA';\nexport const TOGGLE_PARAMETERS_STATUS = 'TOGGLE_PARAMETERS_STATUS';\n\nexport const LOAD_CHANNELS_DATA = 'LOAD_CHANNELS_DATA';\n\nexport const DELETE_RATE_REQUEST = 'DELETE_RATE_REQUEST';\n\nexport const TOGGLE_GDS_CHECKBOX = 'TOGGLE_GDS_CHECKBOX';\nexport const TOGGLE_IBE_CHECKBOX = 'TOGGLE_IBE_CHECKBOX';\nexport const TOGGLE_PMS_CHECKBOX = 'TOGGLE_PMS_CHECKBOX';","/*\n * Copyright (c) 2019 Pegasus Solutions. All rights reserved.\n *\n * This software is the confidential and proprietary information of\n * Pegasus Solutions, Inc.\n */\n\nimport {\n UPDATE_CANCEL_POLICY,\n LOAD,\n UPDATE,\n LOAD_CANCEL_SELECT,\n LOAD_GUARANTEE_SELECT,\n UPDATE_GUARANTEE_POLICY\n} from \"../../actionTypes\";\n\nimport * as commonUtil from \"../../../../common/CommonUtil\";\nimport * as commonService from \"../../../../common/services/common-service\";\nimport * as Constants from \"../../../../common/Constants\";\n\nexport const updateSelectedGuaranteePolicy = selectedGuaranteePolicy => ({\n type: UPDATE_GUARANTEE_POLICY,\n selectedGuaranteePolicy: selectedGuaranteePolicy\n});\n\nexport const updateSelectedCancelPolicy = selectedCancelPolicy => ({\n type: UPDATE_CANCEL_POLICY,\n selectedCancelPolicy: selectedCancelPolicy\n});\n\nexport function loadGuaranteePolicies(acctId, nullLabel) {\n return dispatch => {\n commonService\n .getPolicies(acctId, Constants.GUARANTEE_POLICY_TYPE)\n .then(response => dispatch(loadGuaranteeSelect(response, nullLabel)));\n };\n}\n\nexport const loadGuaranteeSelect = (response, nullLabel) => {\n let policyOptions = commonUtil.getPolicyOptions(response, nullLabel);\n\n return {\n type: LOAD_GUARANTEE_SELECT,\n guaranteePolicyOptions: policyOptions,\n selectedGuaranteePolicy: policyOptions[0]\n };\n};\n\nexport function loadCancelPolicies(acctId, nullLabel) {\n return dispatch => {\n commonService\n .getPolicies(acctId, Constants.CANCEL_POLICY_TYPE)\n .then(response => dispatch(loadCancelSelect(response, nullLabel)));\n };\n}\n\nexport const loadCancelSelect = (response, nullLabel) => {\n let policyOptions = commonUtil.getPolicyOptions(response, nullLabel);\n\n return {\n type: LOAD_CANCEL_SELECT,\n cancelPolicyOptions: policyOptions,\n selectedCancelPolicy: policyOptions[0]\n };\n};\n\nexport function loadPolicies(acctId, nullLabel, policyType) {\n return dispatch => {\n commonService.getPolicies(acctId, policyType).then(response => dispatch(loadSelect(response, nullLabel, policyType)));\n };\n}\n\nconst loadSelect = (response, nullLabel, policyType) => {\n let policyOptions = commonUtil.getPolicyOptions(response, nullLabel);\n\n return {\n type: LOAD + policyType,\n policyOptions: policyOptions,\n selectedPolicy: policyOptions[0], //TODO get selectedPolicy from webservice\n policyType: policyType\n };\n};\n\nexport const updateSelectedPolicy = (selectedPolicy, policyType) => ({\n type: UPDATE + policyType,\n selectedPolicy: selectedPolicy,\n policyType: policyType\n});\n"],"sourceRoot":""}