diff --git a/config/eslint/eslint.seatbelt.tsv b/config/eslint/eslint.seatbelt.tsv index 463f7542bed5..6c15062ace1b 100644 --- a/config/eslint/eslint.seatbelt.tsv +++ b/config/eslint/eslint.seatbelt.tsv @@ -375,7 +375,7 @@ "../../src/components/Search/SearchList/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 7 "../../src/components/Search/SearchMultipleSelectionPicker.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/Search/SearchPageHeader/SearchActionsBarCreateButton.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 -"../../src/components/Search/SearchPageHeader/SearchFilterBar.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 +"../../src/components/Search/SearchPageHeader/SearchFilterBar.tsx" "@typescript-eslint/no-unsafe-type-assertion" 4 "../../src/components/Search/SearchPageHeader/useSearchFiltersBar.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/Search/SearchPageHeader/useSearchPageInput.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/Search/SearchPageHeader/useSearchPageInput.tsx" "react-hooks/set-state-in-effect" 2 @@ -578,6 +578,7 @@ "../../src/libs/Accessibility/moveAccessibilityFocus/types.ts" "@typescript-eslint/no-deprecated/ElementRef" 1 "../../src/libs/AccountingUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/libs/AttendeeUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 3 +"../../src/libs/BankAccountUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/libs/Avatars/InitialAvatars.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/libs/Avatars/PresetAvatarCatalog.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/libs/CardFeedUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 4 @@ -744,7 +745,7 @@ "../../src/libs/ReportUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 33 "../../src/libs/ReportUtils.ts" "rulesdir/no-onyx-connect" 16 "../../src/libs/SearchAutocompleteUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 4 -"../../src/libs/SearchQueryUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 71 +"../../src/libs/SearchQueryUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 73 "../../src/libs/SearchUIUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 69 "../../src/libs/SearchUIUtils.ts" "no-restricted-imports" 1 "../../src/libs/SelectionScraper/index.ts" "@typescript-eslint/no-unsafe-type-assertion" 4 @@ -1819,7 +1820,7 @@ "../../tests/unit/RequireA11yDisableJustificationRuleTest.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../tests/unit/RequireLiveRegionForStatusUpdatesRuleTest.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../tests/unit/Search/SearchListRenderCountTest.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 -"../../tests/unit/Search/SearchQueryUtilsTest.ts" "@typescript-eslint/no-unsafe-type-assertion" 9 +"../../tests/unit/Search/SearchQueryUtilsTest.ts" "@typescript-eslint/no-unsafe-type-assertion" 10 "../../tests/unit/Search/SearchSingleSelectionPickerTest.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../tests/unit/Search/SearchUIUtilsTest.ts" "@typescript-eslint/no-unsafe-type-assertion" 136 "../../tests/unit/Search/buildCardFilterDataTest.ts" "@typescript-eslint/no-unsafe-type-assertion" 22 diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 717baa3fc73d..085927f0e344 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -6804,6 +6804,7 @@ const CONST = { TAX_RATE: 'taxRate', CARD_ID: 'cardID', FEED: 'feed', + BANK_ACCOUNT: 'bankAccount', REPORT_ID: 'reportID', KEYWORD: 'keyword', IN: 'in', @@ -6880,6 +6881,7 @@ const CONST = { TAX_RATE: 'tax-rate', CARD_ID: 'card', FEED: 'feed', + BANK_ACCOUNT: 'bank-account', REPORT_ID: 'report-id', KEYWORD: 'keyword', IN: 'in', diff --git a/src/components/Search/FilterComponents/BankAccountSelector.tsx b/src/components/Search/FilterComponents/BankAccountSelector.tsx new file mode 100644 index 000000000000..c5c45ddac4fc --- /dev/null +++ b/src/components/Search/FilterComponents/BankAccountSelector.tsx @@ -0,0 +1,181 @@ +import React from 'react'; +import {View} from 'react-native'; +import ActivityIndicator from '@components/ActivityIndicator'; +import Icon from '@components/Icon'; +import getBankIcon from '@components/Icon/BankIcons'; +import type {SearchFilterCommonProps} from '@components/Search/types'; +import MultiSelectListItem from '@components/SelectionList/ListItem/MultiSelectListItem'; +import SelectionListWithSections from '@components/SelectionList/SelectionListWithSections'; +import type {TextInputOptions} from '@components/SelectionList/types'; +import useDebouncedState from '@hooks/useDebouncedState'; +import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; +import useResponsiveLayout from '@hooks/useResponsiveLayout'; +import useTheme from '@hooks/useTheme'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {getBankAccountSearchLabel, isFilterableBankAccount} from '@libs/BankAccountUtils'; +import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan'; +import variables from '@styles/variables'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; +import ListFilterView from './ListFilterViewWrapper'; + +type BankAccountSelectorProps = SearchFilterCommonProps; + +/** Row item rendered by SelectionListWithSections for a single bank account. */ +type BankAccountFilterItem = { + /** Display label, e.g. `Chase xx1234`. */ + text: string; + /** Bank account ID stringified — used as both the stable list key and the filter value. */ + keyForList: string; + /** Same as keyForList; kept on the item so onChange logic mirrors CardSelector. */ + value: string; + /** Whether this account is currently selected in the filter. */ + isSelected: boolean; + /** Bank icon wrapper rendered at the start of the row. */ + leftElement: React.JSX.Element; + /** Last four digits of the account number — searched in addition to the display text. */ + lastFour: string; +}; + +function BankAccountSelector({value = [], selectionListTextInputStyle, selectionListStyle, autoFocus, footer, onChange}: BankAccountSelectorProps) { + const theme = useTheme(); + const styles = useThemeStyles(); + const {translate} = useLocalize(); + const {isLargeScreenWidth} = useResponsiveLayout(); + const [bankAccountList, bankAccountListMetadata] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); + const [searchTerm, debouncedSearchTerm, setSearchTerm] = useDebouncedState(''); + + const openItems: BankAccountFilterItem[] = []; + const closedItems: BankAccountFilterItem[] = []; + for (const bankAccount of Object.values(bankAccountList ?? {})) { + const bankAccountID = bankAccount?.accountData?.bankAccountID; + if (!bankAccountID) { + continue; + } + if (!isFilterableBankAccount(bankAccount)) { + continue; + } + + const key = bankAccountID.toString(); + const bankName = bankAccount?.accountData?.additionalData?.bankName; + const accountNumber = bankAccount?.accountData?.accountNumber ?? ''; + const {icon, iconSize, iconStyles} = getBankIcon({bankName, styles, maxIconSize: isLargeScreenWidth ? variables.w28 : undefined}); + const leftElement = ( + + + + ); + + const item: BankAccountFilterItem = { + text: getBankAccountSearchLabel(bankAccount), + keyForList: key, + value: key, + isSelected: value.includes(key), + leftElement, + lastFour: accountNumber.slice(-4), + }; + + if (bankAccount?.accountData?.state === CONST.BANK_ACCOUNT.STATE.OPEN) { + openItems.push(item); + } else { + closedItems.push(item); + } + } + + const shouldShowSearchInput = openItems.length + closedItems.length >= CONST.STANDARD_LIST_ITEM_LIMIT; + + const searchFunction = (item: BankAccountFilterItem) => + item.text.toLocaleLowerCase().includes(debouncedSearchTerm.toLocaleLowerCase()) || item.lastFour.toLocaleLowerCase().includes(debouncedSearchTerm.toLocaleLowerCase()); + + const selectedData = [...openItems, ...closedItems].filter((item) => item.isSelected && searchFunction(item)); + const unselectedOpenData = openItems.filter((item) => !item.isSelected && searchFunction(item)); + const unselectedClosedData = closedItems.filter((item) => !item.isSelected && searchFunction(item)); + + const itemCount = selectedData.length + unselectedOpenData.length + unselectedClosedData.length; + const sectionHeaderCount = unselectedClosedData.length > 0 ? 1 : 0; + + const sections = [ + { + title: undefined, + data: selectedData, + sectionIndex: 0, + }, + { + title: undefined, + data: unselectedOpenData, + sectionIndex: 1, + }, + { + title: translate('search.filters.bankAccount.closedBankAccounts'), + data: unselectedClosedData, + sectionIndex: 2, + }, + ]; + + const updateSelection = (item: BankAccountFilterItem) => { + if (!item.keyForList) { + return; + } + if (item.isSelected) { + onChange(value.filter((id) => id !== item.keyForList)); + return; + } + onChange([...value, item.keyForList]); + }; + + const textInputOptions: TextInputOptions = { + value: searchTerm, + label: translate('common.search'), + onChangeText: setSearchTerm, + headerMessage: debouncedSearchTerm.trim() && sections.every((section) => !section.data.length) ? translate('common.noResultsFound') : '', + style: { + containerStyle: selectionListTextInputStyle, + }, + disableAutoFocus: !autoFocus, + }; + + const isLoadingOnyxData = isLoadingOnyxValue(bankAccountListMetadata); + const reasonAttributes: SkeletonSpanReasonAttributes = {context: 'SearchFiltersBankAccountPage', isLoadingFromOnyx: isLoadingOnyxData}; + + return ( + + {isLoadingOnyxData ? ( + + + + ) : ( + + sections={sections} + ListItem={MultiSelectListItem} + onSelectRow={updateSelection} + shouldPreventDefaultFocusOnSelectRow={false} + shouldShowTextInput={shouldShowSearchInput} + textInputOptions={textInputOptions} + shouldStopPropagation + canSelectMultiple + style={selectionListStyle} + footerContent={footer} + /> + )} + + ); +} + +export default BankAccountSelector; diff --git a/src/components/Search/FilterComponents/index.tsx b/src/components/Search/FilterComponents/index.tsx index 4247529d07a3..f3f54af44310 100644 --- a/src/components/Search/FilterComponents/index.tsx +++ b/src/components/Search/FilterComponents/index.tsx @@ -10,6 +10,7 @@ import type {SearchFilter} from '@libs/SearchUIUtils'; import CONST from '@src/CONST'; import type {SearchAdvancedFiltersForm} from '@src/types/form/SearchAdvancedFiltersForm'; import type {SearchDataTypes} from '@src/types/onyx/SearchResults'; +import BankAccountSelector from './BankAccountSelector'; import CardSelector from './CardSelector'; import CategorySelector from './CategorySelector'; import CurrencySelector from './CurrencySelector'; @@ -126,6 +127,7 @@ function FilterComponents({filterKey, value, type, policyIDs, policyIDQuery, sel switch (filterKey) { case CONST.SEARCH.SYNTAX_FILTER_KEYS.FEED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.CARD_ID: + case CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT: case CONST.SEARCH.SYNTAX_FILTER_KEYS.IN: case CONST.SEARCH.SYNTAX_FILTER_KEYS.TAX_RATE: case CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED_TO: @@ -134,6 +136,7 @@ function FilterComponents({filterKey, value, type, policyIDs, policyIDQuery, sel const Component = { [CONST.SEARCH.SYNTAX_FILTER_KEYS.FEED]: FeedSelector, [CONST.SEARCH.SYNTAX_FILTER_KEYS.CARD_ID]: CardSelector, + [CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT]: BankAccountSelector, [CONST.SEARCH.SYNTAX_FILTER_KEYS.IN]: InSelector, [CONST.SEARCH.SYNTAX_FILTER_KEYS.TAX_RATE]: TaxRateSelector, [CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED_TO]: ExportedToSelector, diff --git a/src/components/Search/SearchAutocompleteList.tsx b/src/components/Search/SearchAutocompleteList.tsx index 270127671392..f0dcbc936708 100644 --- a/src/components/Search/SearchAutocompleteList.tsx +++ b/src/components/Search/SearchAutocompleteList.tsx @@ -170,6 +170,7 @@ function SearchAutocompleteList({ const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT); const [personalAndWorkspaceCards] = useOnyx(ONYXKEYS.DERIVED.PERSONAL_AND_WORKSPACE_CARD_LIST); const [allFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER); + const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); const allCards = personalAndWorkspaceCards ?? CONST.EMPTY_OBJECT; const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); const currentUserPersonalDetails = useCurrentUserPersonalDetails(); @@ -346,6 +347,7 @@ function SearchAutocompleteList({ translate, feedKeysWithCards, reportAttributes, + bankAccountList, }) : query, singleIcon: expensifyIcons.History, @@ -367,6 +369,7 @@ function SearchAutocompleteList({ translate, feedKeysWithCards, reportAttributes, + bankAccountList, expensifyIcons.History, ]); diff --git a/src/components/Search/SearchPageHeader/SearchFilterBar.tsx b/src/components/Search/SearchPageHeader/SearchFilterBar.tsx index 39d3a6e75ed9..ce224e07e324 100644 --- a/src/components/Search/SearchPageHeader/SearchFilterBar.tsx +++ b/src/components/Search/SearchPageHeader/SearchFilterBar.tsx @@ -1,6 +1,7 @@ import React from 'react'; import DropdownButton from '@components/Search/FilterDropdowns/DropdownButton'; import type {DropdownButtonProps} from '@components/Search/FilterDropdowns/DropdownButton'; +import useFilterBankAccountValue from '@components/Search/hooks/useFilterBankAccountValue'; import useFilterCardValue from '@components/Search/hooks/useFilterCardValue'; import useFilterFeedValue from '@components/Search/hooks/useFilterFeedValue'; import useFilterReportValue from '@components/Search/hooks/useFilterReportValue'; @@ -67,6 +68,19 @@ function CardDropdown({label, value, PopoverComponent, sentryLabel, onClosePress ); } +function BankAccountDropdown({label, value, PopoverComponent, sentryLabel, onClosePress}: DropdownProps) { + const bankAccountValue = useFilterBankAccountValue(value); + return ( + + ); +} + function TaxRateDropdown({label, value, PopoverComponent, sentryLabel, onClosePress}: DropdownProps) { const taxRateValue = useFilterTaxRateValue(value as string[]); return ( @@ -103,6 +117,7 @@ const FILTER_COMPONENT_MAP: Partial ids.includes(bankAccount?.accountData?.bankAccountID?.toString() ?? '')) + .map((bankAccount) => getBankAccountSearchLabel(bankAccount)); + + return bankAccountLabels.join(', '); +} + +export default useFilterBankAccountValue; diff --git a/src/hooks/useAdvancedSearchFilters.ts b/src/hooks/useAdvancedSearchFilters.ts index c181f018729f..64c7356381ed 100644 --- a/src/hooks/useAdvancedSearchFilters.ts +++ b/src/hooks/useAdvancedSearchFilters.ts @@ -2,6 +2,7 @@ import {filterCardsHiddenFromSearch} from '@selectors/Card'; import passthroughPolicyTagListSelector from '@selectors/PolicyTagList'; import {emailSelector} from '@selectors/Session'; import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; +import {isFilterableBankAccount} from '@libs/BankAccountUtils'; import {isPolicyFeatureEnabled} from '@libs/PolicyUtils'; import {getAllPolicyValues} from '@libs/SearchQueryUtils'; import CONST from '@src/CONST'; @@ -39,6 +40,7 @@ const typeFiltersKeys = { CONST.SEARCH.SYNTAX_FILTER_KEYS.REIMBURSABLE, CONST.SEARCH.SYNTAX_FILTER_KEYS.BILLABLE, CONST.SEARCH.SYNTAX_FILTER_KEYS.CARD_ID, + CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT, CONST.SEARCH.SYNTAX_FILTER_KEYS.FEED, CONST.SEARCH.SYNTAX_FILTER_KEYS.PURCHASE_AMOUNT, CONST.SEARCH.SYNTAX_FILTER_KEYS.PURCHASE_CURRENCY, @@ -322,6 +324,7 @@ function useAdvancedSearchFilters(type: SearchDataTypes | undefined, policyID: s const [allPolicyTagLists = getEmptyObject>>()] = useOnyx(ONYXKEYS.COLLECTION.POLICY_TAGS, {selector: passthroughPolicyTagListSelector}); const selectedPolicyTagLists = getAllPolicyValues(policyID, ONYXKEYS.COLLECTION.POLICY_TAGS, allPolicyTagLists); const [hasTags] = useOnyx(ONYXKEYS.COLLECTION.POLICY_TAGS, {selector: hasTagsSelector}); + const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); const {workspaces} = useAdvancedSearchFiltersWorkspaces(policies); @@ -335,6 +338,9 @@ function useAdvancedSearchFilters(type: SearchDataTypes | undefined, policyID: s const shouldDisplayCategoryFilter = shouldDisplayFilter(hasNonPersonalPolicyCategories ? 1 : 0, policyDerived?.areCategoriesEnabled ?? false, selectedPolicyCategories?.length > 0); const hasSelectedPolicyTags = selectedPolicyTagLists.some(policyTagListHasTags); const shouldDisplayTagFilter = shouldDisplayFilter(hasTags ? 1 : 0, policyDerived?.areTagsEnabled ?? false, hasSelectedPolicyTags); + // Count business accounts that aren't partially set up, mirroring BankAccountSelector so the row never shows above an empty picker. + const hasFilterableBankAccount = Object.values(bankAccountList ?? {}).some(isFilterableBankAccount); + const shouldDisplayBankAccountFilter = shouldDisplayFilter(hasFilterableBankAccount ? 1 : 0, true); const shouldDisplayTaxFilter = shouldDisplayFilter(policyDerived?.hasAnyTaxRates ? 1 : 0, policyDerived?.areTaxEnabled ?? false); const shouldDisplayWorkspaceFilter = workspaces.some((section) => section.data.length > 1); @@ -360,6 +366,9 @@ function useAdvancedSearchFilters(type: SearchDataTypes | undefined, policyID: s ) { return; } + if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT && !shouldDisplayBankAccountFilter) { + return; + } if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.TAX_RATE && !shouldDisplayTaxFilter) { return; } diff --git a/src/hooks/useAutocompleteSuggestions.ts b/src/hooks/useAutocompleteSuggestions.ts index eb3ad75b1886..997c112161a3 100644 --- a/src/hooks/useAutocompleteSuggestions.ts +++ b/src/hooks/useAutocompleteSuggestions.ts @@ -5,6 +5,7 @@ import type {LocaleContextProps} from '@components/LocaleContextProvider'; import type {SubstitutionMap} from '@components/Search/SearchRouter/getQueryWithSubstitutions'; import {getSubstitutionMapKey, getSubstitutionMapKeyWithIndex} from '@components/Search/SearchRouter/getQueryWithSubstitutions'; import type {SearchFilterKey, UserFriendlyKey} from '@components/Search/types'; +import {getBankAccountSearchLabel, isFilterableBankAccount} from '@libs/BankAccountUtils'; import {getCardFeedsForDisplay} from '@libs/CardFeedUtils'; import {getCardDescription, isCard, isCardHiddenFromSearch} from '@libs/CardUtils'; import {getDecodedCategoryName} from '@libs/CategoryUtils'; @@ -29,6 +30,7 @@ import type {SearchDataTypes} from '@src/types/onyx/SearchResults'; import {useCurrencyListState} from './useCurrencyList'; import useExportedToFilterOptions from './useExportedToFilterOptions'; import type {FeedKeysWithAssignedCards} from './useFeedKeysWithAssignedCards'; +import useLocalize from './useLocalize'; import useOnyx from './useOnyx'; import useSortedActions from './useSortedActions'; @@ -106,12 +108,14 @@ function useAutocompleteSuggestions({ translate, autocompleteSubstitutions, }: UseAutocompleteSuggestionsParams): AutocompleteItemData[] { + const {localeCompare} = useLocalize(); const [allPolicyCategories] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CATEGORIES); const [allRecentCategories] = useOnyx(ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_CATEGORIES); const [recentCurrencyAutocompleteList] = useOnyx(ONYXKEYS.RECENTLY_USED_CURRENCIES); const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); const [allPoliciesTags] = useOnyx(ONYXKEYS.COLLECTION.POLICY_TAGS, {selector: passthroughPolicyTagListSelector}); const [allRecentTags] = useOnyx(ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_TAGS); + const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); const sortedActions = useSortedActions(); const {currencyList} = useCurrencyListState(); const {exportedToFilterOptions} = useExportedToFilterOptions(); @@ -432,6 +436,36 @@ function useAutocompleteSuggestions({ mapKey: CONST.SEARCH.SYNTAX_FILTER_KEYS.CARD_ID, })); } + case CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT: { + const bankAccountSuggestions: Array<{id: string; label: string; accountNumber: string}> = []; + for (const bankAccount of Object.values(bankAccountList ?? {})) { + const bankAccountID = bankAccount?.accountData?.bankAccountID; + if (!bankAccountID) { + continue; + } + if (!isFilterableBankAccount(bankAccount)) { + continue; + } + const accountNumber = bankAccount?.accountData?.accountNumber ?? ''; + const label = getBankAccountSearchLabel(bankAccount); + bankAccountSuggestions.push({id: bankAccountID.toString(), label, accountNumber}); + } + const filteredBankAccounts = bankAccountSuggestions + .filter( + (item) => + (item.label.toLowerCase().includes(autocompleteValue.toLowerCase()) || item.accountNumber.includes(autocompleteValue)) && + !alreadyAutocompletedKeys.has(item.label.toLowerCase()), + ) + .sort((a, b) => localeCompare(a.label, b.label)) + .slice(0, 10); + + return filteredBankAccounts.map((item) => ({ + filterKey: CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.BANK_ACCOUNT, + text: item.label, + autocompleteID: item.id, + mapKey: CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT, + })); + } case CONST.SEARCH.SYNTAX_FILTER_KEYS.REIMBURSABLE: case CONST.SEARCH.SYNTAX_FILTER_KEYS.BILLABLE: { const filteredValues = BOOLEAN_VALUES.filter((value) => value.includes(autocompleteValue.toLowerCase()) && !alreadyAutocompletedKeys.has(value)).sort(); diff --git a/src/hooks/useFilterFormValues.tsx b/src/hooks/useFilterFormValues.tsx index 8100049ed0c1..ec752faa2662 100644 --- a/src/hooks/useFilterFormValues.tsx +++ b/src/hooks/useFilterFormValues.tsx @@ -82,6 +82,7 @@ const useFilterFormValues = (queryJSON?: SearchQueryJSON) => { const [policyTagsLists] = useOnyx(ONYXKEYS.COLLECTION.POLICY_TAGS, {selector: policyTagsSelector}); const [policyCategories] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CATEGORIES, {selector: policyCategoriesSelector}); const [workspaceCardFeeds] = useOnyx(ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST); + const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); // Helps to avoid unnecessary recalculations when user open report details screen. React Compiler does not provide same result. const taxRates = useMemo(() => getAllTaxRates(policies), [policies]); @@ -100,6 +101,7 @@ const useFilterFormValues = (queryJSON?: SearchQueryJSON) => { taxRates, exportedToFilterOptions, currentUserPersonalDetails.accountID, + bankAccountList, ) : getEmptyObject>(); diff --git a/src/languages/de.ts b/src/languages/de.ts index f2cb2dbb1a3a..c10d1bb51faa 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -8503,6 +8503,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Alle importierten CSV-Karten${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: 'Konsolidierte Reiseabrechnung', }, + bankAccount: {banks: 'Bankkonten', closedBankAccounts: 'Geschlossene Bankkonten'}, reportField: (name: string, value: string) => `${name} ist ${value}`, current: 'Aktuell', past: 'Vergangenes', diff --git a/src/languages/en.ts b/src/languages/en.ts index 20209c11444f..3e28bf192af2 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -8593,6 +8593,10 @@ const translations = { `All ${cardFeedBankName}${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `All CSV Imported Cards${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, }, + bankAccount: { + banks: 'Bank accounts', + closedBankAccounts: 'Closed bank accounts', + }, reportField: (name: string, value: string) => `${name} is ${value}`, current: 'Current', past: 'Past', diff --git a/src/languages/es.ts b/src/languages/es.ts index aeec81f2793e..c00abf2bf10c 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -8308,6 +8308,7 @@ ${amount} para ${merchant} - ${date}`, cardFeedName: ({cardFeedBankName, cardFeedLabel}) => `Todo ${cardFeedBankName}${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, cardFeedNameCSV: ({cardFeedLabel}) => `Todas las Tarjetas Importadas desde CSV${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, }, + bankAccount: {banks: 'Cuentas bancarias', closedBankAccounts: 'Cuentas bancarias cerradas'}, amount: { lessThan: (amount) => `Menos de ${amount ?? ''}`, greaterThan: (amount) => `Más que ${amount ?? ''}`, diff --git a/src/languages/fr.ts b/src/languages/fr.ts index c855981fb4ad..60d6e5345164 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -8537,6 +8537,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Toutes les cartes CSV importées${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: 'Facturation de voyages consolidée', }, + bankAccount: {banks: 'Comptes bancaires', closedBankAccounts: 'Comptes bancaires fermés'}, reportField: (name: string, value: string) => `${name} est ${value}`, current: 'Actuel', past: 'Passé', diff --git a/src/languages/it.ts b/src/languages/it.ts index d99da30459d0..4509b09fcd5f 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -8492,6 +8492,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Tutte le carte CSV importate${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: 'Fatturazione viaggio consolidata', }, + bankAccount: {banks: 'Conti bancari', closedBankAccounts: 'Conti bancari chiusi'}, reportField: (name: string, value: string) => `${name} è ${value}`, current: 'Attuale', past: 'Passato', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index f9d6dcc79447..4edcdaf45a54 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -8391,6 +8391,7 @@ ${reportName}`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `すべてのCSVインポート済みカード${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: '出張費の一括請求', }, + bankAccount: {banks: '銀行口座', closedBankAccounts: '解約済み銀行口座'}, reportField: (name: string, value: string) => `${name} は ${value} です`, current: '現在', past: '過去', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 7b52ff0c58f2..eae3e910f6df 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -8463,6 +8463,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Alle geïmporteerde CSV-kaarten${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: 'Geconsolideerde reisfacturatie', }, + bankAccount: {banks: 'Bankrekeningen', closedBankAccounts: 'Gesloten bankrekeningen'}, reportField: (name: string, value: string) => `${name} is ${value}`, current: 'Huidig', past: 'Verleden', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 74c1156b2615..31e1f02cf59d 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -8452,6 +8452,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Wszystkie zaimportowane karty CSV${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: 'Zbiorcze rozliczanie podróży', }, + bankAccount: {banks: 'Konta bankowe', closedBankAccounts: 'Zamknięte konta bankowe'}, reportField: (name: string, value: string) => `${name} to ${value}`, current: 'Bieżące', past: 'Przeszłe', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index b0895f48bae6..a8e0286cbbfc 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -8450,6 +8450,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Todos os cartões CSV importados${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: 'Faturamento de Viagens Consolidado', }, + bankAccount: {banks: 'Contas bancárias', closedBankAccounts: 'Contas bancárias encerradas'}, reportField: (name: string, value: string) => `${name} é ${value}`, current: 'Atual', past: 'Passado', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 78a0e176c233..7d3488462792 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -8221,6 +8221,7 @@ ${reportName}`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `所有导入的 CSV 卡片${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, travelInvoicing: '合并差旅账单', }, + bankAccount: {banks: '银行账户', closedBankAccounts: '已关闭的银行账户'}, reportField: (name: string, value: string) => `${name} 为 ${value}`, current: '当前', past: '过去', diff --git a/src/libs/BankAccountUtils.ts b/src/libs/BankAccountUtils.ts index 15c284aca46d..4cf632ec5a8a 100644 --- a/src/libs/BankAccountUtils.ts +++ b/src/libs/BankAccountUtils.ts @@ -17,10 +17,32 @@ function getLastFourDigits(bankAccountNumber: string): string { return bankAccountNumber ? bankAccountNumber.slice(-4) : ''; } +/** + * Renders a bank account as `${friendlyBankName} xx${last4}` for Search filter + * pickers, chips, and autocomplete suggestions. Falls back to GENERIC_BANK when + * the bank name is missing or not in CONST.BANK_NAMES_USER_FRIENDLY. + */ +function getBankAccountSearchLabel(bankAccount: OnyxEntry): string { + // BE returns bankName with the first letter uppercase (e.g. "Chase") but CONST.BANK_NAMES_USER_FRIENDLY keys are lowercase, so lowercase before the lookup. + const bankName = bankAccount?.accountData?.additionalData?.bankName?.toLowerCase() as keyof typeof CONST.BANK_NAMES_USER_FRIENDLY | undefined; + const accountNumber = bankAccount?.accountData?.accountNumber ?? ''; + const formattedBankName = (bankName ? CONST.BANK_NAMES_USER_FRIENDLY[bankName] : undefined) ?? CONST.BANK_NAMES_USER_FRIENDLY[CONST.BANK_NAMES.GENERIC_BANK]; + const maskedNumber = accountNumber ? `xx${getLastFourDigits(accountNumber)}` : ''; + return maskedNumber ? `${formattedBankName} ${maskedNumber}` : formattedBankName; +} + function isBankAccountPartiallySetup(state: string | undefined) { return state === CONST.BANK_ACCOUNT.STATE.SETUP || state === CONST.BANK_ACCOUNT.STATE.VERIFYING || state === CONST.BANK_ACCOUNT.STATE.PENDING; } +/** + * A BUSINESS account in a state that has actually been usable for paying expenses (anything other than SETUP / VERIFYING / PENDING). + * Used by the search picker, the autocomplete suggestions, and the advanced-filter visibility gate so all three surfaces accept and count the same set of accounts. + */ +function isFilterableBankAccount(bankAccount: OnyxEntry): boolean { + return bankAccount?.accountData?.type === CONST.BANK_ACCOUNT.TYPE.BUSINESS && !isBankAccountPartiallySetup(bankAccount?.accountData?.state); +} + function doesPolicyHavePartiallySetupBankAccount(bankAccountList: OnyxEntry, policyID: string) { if (!bankAccountList) { return false; @@ -174,6 +196,8 @@ function getRequiredKYBDocuments(externalApiResponses: KYBVerificationResponses) } export { + getBankAccountSearchLabel, + isFilterableBankAccount, getDefaultCompanyWebsite, getRequiredKYBDocuments, getLastFourDigits, diff --git a/src/libs/SearchAutocompleteUtils.ts b/src/libs/SearchAutocompleteUtils.ts index d773521a80ac..584d5ecf324e 100644 --- a/src/libs/SearchAutocompleteUtils.ts +++ b/src/libs/SearchAutocompleteUtils.ts @@ -181,6 +181,7 @@ function filterOutRangesWithCorrectValue( case CONST.SEARCH.SYNTAX_FILTER_KEYS.TAX_RATE: case CONST.SEARCH.SYNTAX_FILTER_KEYS.FEED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.CARD_ID: + case CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT: case CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID: return substitutionMap[`${range.key}:${range.value}`] !== undefined; diff --git a/src/libs/SearchParser/autocompleteParser.js b/src/libs/SearchParser/autocompleteParser.js index 985ecde36cea..bef3b4887875 100644 --- a/src/libs/SearchParser/autocompleteParser.js +++ b/src/libs/SearchParser/autocompleteParser.js @@ -207,88 +207,89 @@ function peg$parse(input, options) { var peg$c21 = "tax-rate"; var peg$c22 = "cardID"; var peg$c23 = "card"; - var peg$c24 = "from"; - var peg$c25 = "attendee"; - var peg$c26 = "expenseType"; - var peg$c27 = "expense-type"; - var peg$c28 = "receiptType"; - var peg$c29 = "receipt-type"; - var peg$c30 = "withdrawalType"; - var peg$c31 = "withdrawal-type"; - var peg$c32 = "withdrawalStatus"; - var peg$c33 = "withdrawal-status"; - var peg$c34 = "withdrawalid"; - var peg$c35 = "withdrawal-id"; - var peg$c36 = "billable"; - var peg$c37 = "reimbursable"; - var peg$c38 = "type"; - var peg$c39 = "status"; - var peg$c40 = "sortBy"; - var peg$c41 = "sort-by"; - var peg$c42 = "sortOrder"; - var peg$c43 = "sort-order"; - var peg$c44 = "policyID"; - var peg$c45 = "workspace"; - var peg$c46 = "submitted"; - var peg$c47 = "approved"; - var peg$c48 = "paid"; - var peg$c49 = "exported"; - var peg$c50 = "posted"; - var peg$c51 = "withdrawn"; - var peg$c52 = "groupby"; - var peg$c53 = "group-by"; - var peg$c54 = "limit"; - var peg$c55 = "feed"; - var peg$c56 = "title"; - var peg$c57 = "assignee"; - var peg$c58 = "createdby"; - var peg$c59 = "created-by"; - var peg$c60 = "action"; - var peg$c61 = "total"; - var peg$c62 = "has"; - var peg$c63 = "is"; - var peg$c64 = "purchaseamount"; - var peg$c65 = "purchase-amount"; - var peg$c66 = "purchasecurrency"; - var peg$c67 = "purchase-currency"; - var peg$c68 = "columns"; - var peg$c69 = "view"; - var peg$c70 = "per-diem"; - var peg$c71 = "drafts"; - var peg$c72 = "draft"; - var peg$c73 = "original-amount"; - var peg$c74 = "tax"; - var peg$c75 = "policy-name"; - var peg$c76 = "bank-account"; - var peg$c77 = "long-report-id"; - var peg$c78 = "exported-to"; - var peg$c79 = "exportedto"; - var peg$c80 = "exchange-rate"; - var peg$c81 = "reimbursable-total"; - var peg$c82 = "non-reimbursable-total"; - var peg$c83 = "group-from"; - var peg$c84 = "group-expenses"; - var peg$c85 = "group-total"; - var peg$c86 = "group-card"; - var peg$c87 = "group-feed"; - var peg$c88 = "group-bank-account"; - var peg$c89 = "group-withdrawn"; - var peg$c90 = "group-withdrawal-id"; - var peg$c91 = "group-category"; - var peg$c92 = "group-tag"; - var peg$c93 = "group-merchant"; - var peg$c94 = "group-month"; - var peg$c95 = "group-week"; - var peg$c96 = "group-year"; - var peg$c97 = "group-quarter"; - var peg$c98 = "!="; - var peg$c99 = ">="; - var peg$c100 = ">"; - var peg$c101 = "<="; - var peg$c102 = "<"; - var peg$c103 = "\u201C"; - var peg$c104 = "\u201D"; - var peg$c105 = "\""; + var peg$c24 = "bankAccount"; + var peg$c25 = "bank-account"; + var peg$c26 = "from"; + var peg$c27 = "attendee"; + var peg$c28 = "expenseType"; + var peg$c29 = "expense-type"; + var peg$c30 = "receiptType"; + var peg$c31 = "receipt-type"; + var peg$c32 = "withdrawalType"; + var peg$c33 = "withdrawal-type"; + var peg$c34 = "withdrawalStatus"; + var peg$c35 = "withdrawal-status"; + var peg$c36 = "withdrawalid"; + var peg$c37 = "withdrawal-id"; + var peg$c38 = "billable"; + var peg$c39 = "reimbursable"; + var peg$c40 = "type"; + var peg$c41 = "status"; + var peg$c42 = "sortBy"; + var peg$c43 = "sort-by"; + var peg$c44 = "sortOrder"; + var peg$c45 = "sort-order"; + var peg$c46 = "policyID"; + var peg$c47 = "workspace"; + var peg$c48 = "submitted"; + var peg$c49 = "approved"; + var peg$c50 = "paid"; + var peg$c51 = "exported"; + var peg$c52 = "posted"; + var peg$c53 = "withdrawn"; + var peg$c54 = "groupby"; + var peg$c55 = "group-by"; + var peg$c56 = "limit"; + var peg$c57 = "feed"; + var peg$c58 = "title"; + var peg$c59 = "assignee"; + var peg$c60 = "createdby"; + var peg$c61 = "created-by"; + var peg$c62 = "action"; + var peg$c63 = "total"; + var peg$c64 = "has"; + var peg$c65 = "is"; + var peg$c66 = "purchaseamount"; + var peg$c67 = "purchase-amount"; + var peg$c68 = "purchasecurrency"; + var peg$c69 = "purchase-currency"; + var peg$c70 = "columns"; + var peg$c71 = "view"; + var peg$c72 = "per-diem"; + var peg$c73 = "drafts"; + var peg$c74 = "draft"; + var peg$c75 = "original-amount"; + var peg$c76 = "tax"; + var peg$c77 = "policy-name"; + var peg$c78 = "long-report-id"; + var peg$c79 = "exported-to"; + var peg$c80 = "exportedto"; + var peg$c81 = "exchange-rate"; + var peg$c82 = "reimbursable-total"; + var peg$c83 = "non-reimbursable-total"; + var peg$c84 = "group-from"; + var peg$c85 = "group-expenses"; + var peg$c86 = "group-total"; + var peg$c87 = "group-card"; + var peg$c88 = "group-feed"; + var peg$c89 = "group-bank-account"; + var peg$c90 = "group-withdrawn"; + var peg$c91 = "group-withdrawal-id"; + var peg$c92 = "group-category"; + var peg$c93 = "group-tag"; + var peg$c94 = "group-merchant"; + var peg$c95 = "group-month"; + var peg$c96 = "group-week"; + var peg$c97 = "group-year"; + var peg$c98 = "group-quarter"; + var peg$c99 = "!="; + var peg$c100 = ">="; + var peg$c101 = ">"; + var peg$c102 = "<="; + var peg$c103 = "<"; + var peg$c104 = "\u201C"; + var peg$c105 = "\u201D"; + var peg$c106 = "\""; var peg$r0 = /^[ \t\r\n\xA0,:=<>!]/; var peg$r1 = /^[:=]/; @@ -331,104 +332,105 @@ function peg$parse(input, options) { var peg$e24 = peg$literalExpectation("tax-rate", true); var peg$e25 = peg$literalExpectation("cardID", false); var peg$e26 = peg$literalExpectation("card", true); - var peg$e27 = peg$literalExpectation("from", true); - var peg$e28 = peg$literalExpectation("attendee", true); - var peg$e29 = peg$literalExpectation("expenseType", false); - var peg$e30 = peg$literalExpectation("expense-type", true); - var peg$e31 = peg$literalExpectation("receiptType", false); - var peg$e32 = peg$literalExpectation("receipt-type", true); - var peg$e33 = peg$literalExpectation("withdrawalType", false); - var peg$e34 = peg$literalExpectation("withdrawal-type", true); - var peg$e35 = peg$literalExpectation("withdrawalStatus", false); - var peg$e36 = peg$literalExpectation("withdrawal-status", true); - var peg$e37 = peg$literalExpectation("withdrawalID", true); - var peg$e38 = peg$literalExpectation("withdrawal-id", true); - var peg$e39 = peg$literalExpectation("billable", true); - var peg$e40 = peg$literalExpectation("reimbursable", true); - var peg$e41 = peg$literalExpectation("type", true); - var peg$e42 = peg$literalExpectation("status", true); - var peg$e43 = peg$literalExpectation("sortBy", false); - var peg$e44 = peg$literalExpectation("sort-by", true); - var peg$e45 = peg$literalExpectation("sortOrder", false); - var peg$e46 = peg$literalExpectation("sort-order", true); - var peg$e47 = peg$literalExpectation("policyID", false); - var peg$e48 = peg$literalExpectation("workspace", true); - var peg$e49 = peg$literalExpectation("submitted", true); - var peg$e50 = peg$literalExpectation("approved", true); - var peg$e51 = peg$literalExpectation("paid", true); - var peg$e52 = peg$literalExpectation("exported", true); - var peg$e53 = peg$literalExpectation("posted", true); - var peg$e54 = peg$literalExpectation("withdrawn", true); - var peg$e55 = peg$literalExpectation("groupBy", true); - var peg$e56 = peg$literalExpectation("group-by", true); - var peg$e57 = peg$literalExpectation("limit", true); - var peg$e58 = peg$literalExpectation("feed", true); - var peg$e59 = peg$literalExpectation("title", true); - var peg$e60 = peg$literalExpectation("assignee", true); - var peg$e61 = peg$literalExpectation("createdBy", true); - var peg$e62 = peg$literalExpectation("created-by", true); - var peg$e63 = peg$literalExpectation("action", true); - var peg$e64 = peg$literalExpectation("total", true); - var peg$e65 = peg$literalExpectation("has", true); - var peg$e66 = peg$literalExpectation("is", true); - var peg$e67 = peg$literalExpectation("purchaseAmount", true); - var peg$e68 = peg$literalExpectation("purchase-amount", true); - var peg$e69 = peg$literalExpectation("purchaseCurrency", true); - var peg$e70 = peg$literalExpectation("purchase-currency", true); - var peg$e71 = peg$literalExpectation("columns", true); - var peg$e72 = peg$literalExpectation("view", true); - var peg$e73 = peg$literalExpectation("per-diem", true); - var peg$e74 = peg$literalExpectation("drafts", true); - var peg$e75 = peg$literalExpectation("draft", true); - var peg$e76 = peg$literalExpectation("original-amount", true); - var peg$e77 = peg$literalExpectation("tax", true); - var peg$e78 = peg$literalExpectation("policy-name", true); - var peg$e79 = peg$literalExpectation("bank-account", true); - var peg$e80 = peg$literalExpectation("long-report-id", true); - var peg$e81 = peg$literalExpectation("exported-to", true); - var peg$e82 = peg$classExpectation([":", "="], false, false); - var peg$e83 = peg$literalExpectation("exportedTo", true); - var peg$e84 = peg$literalExpectation("exchange-rate", true); - var peg$e85 = peg$literalExpectation("reimbursable-total", true); - var peg$e86 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e87 = peg$literalExpectation("group-from", true); - var peg$e88 = peg$literalExpectation("group-expenses", true); - var peg$e89 = peg$literalExpectation("group-total", true); - var peg$e90 = peg$literalExpectation("group-card", true); - var peg$e91 = peg$literalExpectation("group-feed", true); - var peg$e92 = peg$literalExpectation("group-bank-account", true); - var peg$e93 = peg$literalExpectation("group-withdrawn", true); - var peg$e94 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e95 = peg$literalExpectation("group-category", true); - var peg$e96 = peg$literalExpectation("group-tag", true); - var peg$e97 = peg$literalExpectation("group-merchant", true); - var peg$e98 = peg$literalExpectation("group-month", true); - var peg$e99 = peg$literalExpectation("group-week", true); - var peg$e100 = peg$literalExpectation("group-year", true); - var peg$e101 = peg$literalExpectation("group-quarter", true); - var peg$e102 = peg$otherExpectation("operator"); - var peg$e103 = peg$literalExpectation("!=", false); - var peg$e104 = peg$literalExpectation(">=", false); - var peg$e105 = peg$literalExpectation(">", false); - var peg$e106 = peg$literalExpectation("<=", false); - var peg$e107 = peg$literalExpectation("<", false); - var peg$e108 = peg$otherExpectation("word"); - var peg$e109 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e110 = peg$otherExpectation("whitespace"); - var peg$e111 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e112 = peg$otherExpectation("quote"); - var peg$e113 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e114 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e115 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e116 = peg$literalExpectation("\u201C", false); - var peg$e117 = peg$literalExpectation("\u201D", false); - var peg$e118 = peg$literalExpectation("\"", false); - var peg$e119 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e120 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e121 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e122 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e123 = peg$classExpectation([","], false, false); - var peg$e124 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e27 = peg$literalExpectation("bankAccount", false); + var peg$e28 = peg$literalExpectation("bank-account", true); + var peg$e29 = peg$literalExpectation("from", true); + var peg$e30 = peg$literalExpectation("attendee", true); + var peg$e31 = peg$literalExpectation("expenseType", false); + var peg$e32 = peg$literalExpectation("expense-type", true); + var peg$e33 = peg$literalExpectation("receiptType", false); + var peg$e34 = peg$literalExpectation("receipt-type", true); + var peg$e35 = peg$literalExpectation("withdrawalType", false); + var peg$e36 = peg$literalExpectation("withdrawal-type", true); + var peg$e37 = peg$literalExpectation("withdrawalStatus", false); + var peg$e38 = peg$literalExpectation("withdrawal-status", true); + var peg$e39 = peg$literalExpectation("withdrawalID", true); + var peg$e40 = peg$literalExpectation("withdrawal-id", true); + var peg$e41 = peg$literalExpectation("billable", true); + var peg$e42 = peg$literalExpectation("reimbursable", true); + var peg$e43 = peg$literalExpectation("type", true); + var peg$e44 = peg$literalExpectation("status", true); + var peg$e45 = peg$literalExpectation("sortBy", false); + var peg$e46 = peg$literalExpectation("sort-by", true); + var peg$e47 = peg$literalExpectation("sortOrder", false); + var peg$e48 = peg$literalExpectation("sort-order", true); + var peg$e49 = peg$literalExpectation("policyID", false); + var peg$e50 = peg$literalExpectation("workspace", true); + var peg$e51 = peg$literalExpectation("submitted", true); + var peg$e52 = peg$literalExpectation("approved", true); + var peg$e53 = peg$literalExpectation("paid", true); + var peg$e54 = peg$literalExpectation("exported", true); + var peg$e55 = peg$literalExpectation("posted", true); + var peg$e56 = peg$literalExpectation("withdrawn", true); + var peg$e57 = peg$literalExpectation("groupBy", true); + var peg$e58 = peg$literalExpectation("group-by", true); + var peg$e59 = peg$literalExpectation("limit", true); + var peg$e60 = peg$literalExpectation("feed", true); + var peg$e61 = peg$literalExpectation("title", true); + var peg$e62 = peg$literalExpectation("assignee", true); + var peg$e63 = peg$literalExpectation("createdBy", true); + var peg$e64 = peg$literalExpectation("created-by", true); + var peg$e65 = peg$literalExpectation("action", true); + var peg$e66 = peg$literalExpectation("total", true); + var peg$e67 = peg$literalExpectation("has", true); + var peg$e68 = peg$literalExpectation("is", true); + var peg$e69 = peg$literalExpectation("purchaseAmount", true); + var peg$e70 = peg$literalExpectation("purchase-amount", true); + var peg$e71 = peg$literalExpectation("purchaseCurrency", true); + var peg$e72 = peg$literalExpectation("purchase-currency", true); + var peg$e73 = peg$literalExpectation("columns", true); + var peg$e74 = peg$literalExpectation("view", true); + var peg$e75 = peg$literalExpectation("per-diem", true); + var peg$e76 = peg$literalExpectation("drafts", true); + var peg$e77 = peg$literalExpectation("draft", true); + var peg$e78 = peg$literalExpectation("original-amount", true); + var peg$e79 = peg$literalExpectation("tax", true); + var peg$e80 = peg$literalExpectation("policy-name", true); + var peg$e81 = peg$literalExpectation("long-report-id", true); + var peg$e82 = peg$literalExpectation("exported-to", true); + var peg$e83 = peg$classExpectation([":", "="], false, false); + var peg$e84 = peg$literalExpectation("exportedTo", true); + var peg$e85 = peg$literalExpectation("exchange-rate", true); + var peg$e86 = peg$literalExpectation("reimbursable-total", true); + var peg$e87 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e88 = peg$literalExpectation("group-from", true); + var peg$e89 = peg$literalExpectation("group-expenses", true); + var peg$e90 = peg$literalExpectation("group-total", true); + var peg$e91 = peg$literalExpectation("group-card", true); + var peg$e92 = peg$literalExpectation("group-feed", true); + var peg$e93 = peg$literalExpectation("group-bank-account", true); + var peg$e94 = peg$literalExpectation("group-withdrawn", true); + var peg$e95 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e96 = peg$literalExpectation("group-category", true); + var peg$e97 = peg$literalExpectation("group-tag", true); + var peg$e98 = peg$literalExpectation("group-merchant", true); + var peg$e99 = peg$literalExpectation("group-month", true); + var peg$e100 = peg$literalExpectation("group-week", true); + var peg$e101 = peg$literalExpectation("group-year", true); + var peg$e102 = peg$literalExpectation("group-quarter", true); + var peg$e103 = peg$otherExpectation("operator"); + var peg$e104 = peg$literalExpectation("!=", false); + var peg$e105 = peg$literalExpectation(">=", false); + var peg$e106 = peg$literalExpectation(">", false); + var peg$e107 = peg$literalExpectation("<=", false); + var peg$e108 = peg$literalExpectation("<", false); + var peg$e109 = peg$otherExpectation("word"); + var peg$e110 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e111 = peg$otherExpectation("whitespace"); + var peg$e112 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e113 = peg$otherExpectation("quote"); + var peg$e114 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e115 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e116 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e117 = peg$literalExpectation("\u201C", false); + var peg$e118 = peg$literalExpectation("\u201D", false); + var peg$e119 = peg$literalExpectation("\"", false); + var peg$e120 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e121 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e122 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e123 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e124 = peg$classExpectation([","], false, false); + var peg$e125 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); var peg$f0 = function(ranges) { return { autocomplete, ranges }; }; var peg$f1 = function(filters) { return filters.filter(Boolean).flat(); }; @@ -508,101 +510,102 @@ function peg$parse(input, options) { var peg$f20 = function() { return "payer"; }; var peg$f21 = function() { return "taxRate"; }; var peg$f22 = function() { return "cardID"; }; - var peg$f23 = function() { return "from"; }; - var peg$f24 = function() {return "attendee"}; - var peg$f25 = function() { return "expenseType"; }; - var peg$f26 = function() { return "receiptType"; }; - var peg$f27 = function() { return "withdrawalType"; }; - var peg$f28 = function() { return "withdrawalStatus"; }; - var peg$f29 = function() { return "withdrawalID"; }; - var peg$f30 = function() { return "billable"; }; - var peg$f31 = function() { return "reimbursable"; }; - var peg$f32 = function() { return "type"; }; - var peg$f33 = function() { return "status"; }; - var peg$f34 = function() { return "sortBy"; }; - var peg$f35 = function() { return "sortOrder"; }; - var peg$f36 = function() { return "policyID"; }; - var peg$f37 = function() { return "submitted"; }; - var peg$f38 = function() { return "approved"; }; - var peg$f39 = function() { return "paid"; }; - var peg$f40 = function() { return "exported"; }; - var peg$f41 = function() { return "posted"; }; - var peg$f42 = function() { return "withdrawn"; }; - var peg$f43 = function() { return "groupBy"; }; - var peg$f44 = function() { return "limit"; }; - var peg$f45 = function() { return "feed"; }; - var peg$f46 = function() { return "title"; }; - var peg$f47 = function() { return "assignee"; }; - var peg$f48 = function() { return "createdBy"; }; - var peg$f49 = function() { return "action"; }; - var peg$f50 = function() {return "total"; }; - var peg$f51 = function() {return "has"; }; - var peg$f52 = function() {return "is"; }; - var peg$f53 = function() {return "purchaseAmount"}; - var peg$f54 = function() {return "purchaseCurrency"}; - var peg$f55 = function() { + var peg$f23 = function() { return "bankAccount"; }; + var peg$f24 = function() { return "from"; }; + var peg$f25 = function() {return "attendee"}; + var peg$f26 = function() { return "expenseType"; }; + var peg$f27 = function() { return "receiptType"; }; + var peg$f28 = function() { return "withdrawalType"; }; + var peg$f29 = function() { return "withdrawalStatus"; }; + var peg$f30 = function() { return "withdrawalID"; }; + var peg$f31 = function() { return "billable"; }; + var peg$f32 = function() { return "reimbursable"; }; + var peg$f33 = function() { return "type"; }; + var peg$f34 = function() { return "status"; }; + var peg$f35 = function() { return "sortBy"; }; + var peg$f36 = function() { return "sortOrder"; }; + var peg$f37 = function() { return "policyID"; }; + var peg$f38 = function() { return "submitted"; }; + var peg$f39 = function() { return "approved"; }; + var peg$f40 = function() { return "paid"; }; + var peg$f41 = function() { return "exported"; }; + var peg$f42 = function() { return "posted"; }; + var peg$f43 = function() { return "withdrawn"; }; + var peg$f44 = function() { return "groupBy"; }; + var peg$f45 = function() { return "limit"; }; + var peg$f46 = function() { return "feed"; }; + var peg$f47 = function() { return "title"; }; + var peg$f48 = function() { return "assignee"; }; + var peg$f49 = function() { return "createdBy"; }; + var peg$f50 = function() { return "action"; }; + var peg$f51 = function() {return "total"; }; + var peg$f52 = function() {return "has"; }; + var peg$f53 = function() {return "is"; }; + var peg$f54 = function() {return "purchaseAmount"}; + var peg$f55 = function() {return "purchaseCurrency"}; + var peg$f56 = function() { isColumnsContext = true; return "columns"; }; - var peg$f56 = function() {return "view"}; - var peg$f57 = function() { return isColumnsContext; }; - var peg$f58 = function() { return "perDiem"; }; - var peg$f59 = function() { return "drafts"; }; - var peg$f60 = function() { return "originalamount"; }; - var peg$f61 = function() { return "taxAmount"; }; - var peg$f62 = function() { return "taxrate"; }; - var peg$f63 = function() { return "policyname"; }; - var peg$f64 = function() { return "withdrawalID"; }; - var peg$f65 = function() { return "bankAccount"; }; - var peg$f66 = function() { return "reportID"; }; - var peg$f67 = function() { return "base62ReportID"; }; - var peg$f68 = function() { return "exportedto"; }; - var peg$f69 = function() { return "exportedTo"; }; + var peg$f57 = function() {return "view"}; + var peg$f58 = function() { return isColumnsContext; }; + var peg$f59 = function() { return "perDiem"; }; + var peg$f60 = function() { return "drafts"; }; + var peg$f61 = function() { return "originalamount"; }; + var peg$f62 = function() { return "taxAmount"; }; + var peg$f63 = function() { return "taxrate"; }; + var peg$f64 = function() { return "policyname"; }; + var peg$f65 = function() { return "withdrawalID"; }; + var peg$f66 = function() { return "bankAccount"; }; + var peg$f67 = function() { return "reportID"; }; + var peg$f68 = function() { return "base62ReportID"; }; + var peg$f69 = function() { return "exportedto"; }; var peg$f70 = function() { return "exportedTo"; }; - var peg$f71 = function() { return "exchangeRate"; }; - var peg$f72 = function() { return "reimbursableTotal"; }; - var peg$f73 = function() { return "nonReimbursableTotal"; }; - var peg$f74 = function() { return "groupFrom"; }; - var peg$f75 = function() { return "groupExpenses"; }; - var peg$f76 = function() { return "groupTotal"; }; - var peg$f77 = function() { return "groupCard"; }; - var peg$f78 = function() { return "groupFeed"; }; - var peg$f79 = function() { return "groupBankAccount"; }; - var peg$f80 = function() { return "groupWithdrawn"; }; - var peg$f81 = function() { return "groupWithdrawalID"; }; - var peg$f82 = function() { return "groupCategory"; }; - var peg$f83 = function() { return "groupTag"; }; - var peg$f84 = function() { return "groupMerchant"; }; - var peg$f85 = function() { return "groupmonth"; }; - var peg$f86 = function() { return "groupweek"; }; - var peg$f87 = function() { return "groupyear"; }; - var peg$f88 = function() { return "groupquarter"; }; - var peg$f89 = function() { return "eq"; }; - var peg$f90 = function() { return "neq"; }; - var peg$f91 = function() { return "gte"; }; - var peg$f92 = function() { return "gt"; }; - var peg$f93 = function() { return "lte"; }; - var peg$f94 = function() { return "lt"; }; - var peg$f95 = function(o) { + var peg$f71 = function() { return "exportedTo"; }; + var peg$f72 = function() { return "exchangeRate"; }; + var peg$f73 = function() { return "reimbursableTotal"; }; + var peg$f74 = function() { return "nonReimbursableTotal"; }; + var peg$f75 = function() { return "groupFrom"; }; + var peg$f76 = function() { return "groupExpenses"; }; + var peg$f77 = function() { return "groupTotal"; }; + var peg$f78 = function() { return "groupCard"; }; + var peg$f79 = function() { return "groupFeed"; }; + var peg$f80 = function() { return "groupBankAccount"; }; + var peg$f81 = function() { return "groupWithdrawn"; }; + var peg$f82 = function() { return "groupWithdrawalID"; }; + var peg$f83 = function() { return "groupCategory"; }; + var peg$f84 = function() { return "groupTag"; }; + var peg$f85 = function() { return "groupMerchant"; }; + var peg$f86 = function() { return "groupmonth"; }; + var peg$f87 = function() { return "groupweek"; }; + var peg$f88 = function() { return "groupyear"; }; + var peg$f89 = function() { return "groupquarter"; }; + var peg$f90 = function() { return "eq"; }; + var peg$f91 = function() { return "neq"; }; + var peg$f92 = function() { return "gte"; }; + var peg$f93 = function() { return "gt"; }; + var peg$f94 = function() { return "lte"; }; + var peg$f95 = function() { return "lt"; }; + var peg$f96 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } isColumnsContext = false; return o; }; - var peg$f96 = function(chars) { return chars.join("").trim(); }; - var peg$f97 = function() { + var peg$f97 = function(chars) { return chars.join("").trim(); }; + var peg$f98 = function() { isColumnsContext = false; return "and"; }; - var peg$f98 = function() { return expectingNestedQuote; }; - var peg$f99 = function(start, inner, end) { //handle no-breaking space + var peg$f99 = function() { return expectingNestedQuote; }; + var peg$f100 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f100 = function(start) {return "“"}; - var peg$f101 = function(start) {return "”"}; - var peg$f102 = function(start) {return "\""}; - var peg$f103 = function(start, inner, end) { + var peg$f101 = function(start) {return "“"}; + var peg$f102 = function(start) {return "”"}; + var peg$f103 = function(start) {return "\""}; + var peg$f104 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -1057,61 +1060,64 @@ function peg$parse(input, options) { if (s1 === peg$FAILED) { s1 = peg$parsecardID(); if (s1 === peg$FAILED) { - s1 = peg$parsefeed(); + s1 = peg$parsebankAccount(); if (s1 === peg$FAILED) { - s1 = peg$parsegroupBy(); + s1 = peg$parsefeed(); if (s1 === peg$FAILED) { - s1 = peg$parseview(); + s1 = peg$parsegroupBy(); if (s1 === peg$FAILED) { - s1 = peg$parsereimbursable(); + s1 = peg$parseview(); if (s1 === peg$FAILED) { - s1 = peg$parsebillable(); + s1 = peg$parsereimbursable(); if (s1 === peg$FAILED) { - s1 = peg$parsepolicyID(); + s1 = peg$parsebillable(); if (s1 === peg$FAILED) { - s1 = peg$parseaction(); + s1 = peg$parsepolicyID(); if (s1 === peg$FAILED) { - s1 = peg$parsedate(); + s1 = peg$parseaction(); if (s1 === peg$FAILED) { - s1 = peg$parsesubmitted(); + s1 = peg$parsedate(); if (s1 === peg$FAILED) { - s1 = peg$parseapproved(); + s1 = peg$parsesubmitted(); if (s1 === peg$FAILED) { - s1 = peg$parsepaid(); + s1 = peg$parseapproved(); if (s1 === peg$FAILED) { - s1 = peg$parseexportedTo(); + s1 = peg$parsepaid(); if (s1 === peg$FAILED) { - s1 = peg$parseexported(); + s1 = peg$parseexportedTo(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawn(); + s1 = peg$parseexported(); if (s1 === peg$FAILED) { - s1 = peg$parseposted(); + s1 = peg$parsewithdrawn(); if (s1 === peg$FAILED) { - s1 = peg$parsehas(); + s1 = peg$parseposted(); if (s1 === peg$FAILED) { - s1 = peg$parseis(); + s1 = peg$parsehas(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseCurrency(); + s1 = peg$parseis(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseAmount(); + s1 = peg$parsepurchaseCurrency(); if (s1 === peg$FAILED) { - s1 = peg$parseamount(); + s1 = peg$parsepurchaseAmount(); if (s1 === peg$FAILED) { - s1 = peg$parsemerchant(); + s1 = peg$parseamount(); if (s1 === peg$FAILED) { - s1 = peg$parsedescription(); + s1 = peg$parsemerchant(); if (s1 === peg$FAILED) { - s1 = peg$parsereportID(); + s1 = peg$parsedescription(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawalID(); + s1 = peg$parsereportID(); if (s1 === peg$FAILED) { - s1 = peg$parsetitle(); + s1 = peg$parsewithdrawalID(); if (s1 === peg$FAILED) { - s1 = peg$parsereportFieldDynamic(); + s1 = peg$parsetitle(); if (s1 === peg$FAILED) { - s1 = peg$parsecolumns(); + s1 = peg$parsereportFieldDynamic(); if (s1 === peg$FAILED) { - s1 = peg$parselimit(); + s1 = peg$parsecolumns(); + if (s1 === peg$FAILED) { + s1 = peg$parselimit(); + } } } } @@ -1607,20 +1613,49 @@ function peg$parse(input, options) { return s0; } + function peg$parsebankAccount() { + var s0, s1; + + if (input.substr(peg$currPos, 11) === peg$c24) { + s0 = peg$c24; + peg$currPos += 11; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e27); } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 12); + if (s1.toLowerCase() === peg$c25) { + peg$currPos += 12; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e28); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f23(); + } + s0 = s1; + } + + return s0; + } + function peg$parsefrom() { var s0, s1; s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c24) { + if (s1.toLowerCase() === peg$c26) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e29); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f23(); + s1 = peg$f24(); } s0 = s1; @@ -1632,15 +1667,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c25) { + if (s1.toLowerCase() === peg$c27) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e28); } + if (peg$silentFails === 0) { peg$fail(peg$e30); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f24(); + s1 = peg$f25(); } s0 = s1; @@ -1650,25 +1685,25 @@ function peg$parse(input, options) { function peg$parseexpenseType() { var s0, s1; - if (input.substr(peg$currPos, 11) === peg$c26) { - s0 = peg$c26; + if (input.substr(peg$currPos, 11) === peg$c28) { + s0 = peg$c28; peg$currPos += 11; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e29); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c27) { + if (s1.toLowerCase() === peg$c29) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f25(); + s1 = peg$f26(); } s0 = s1; } @@ -1679,25 +1714,25 @@ function peg$parse(input, options) { function peg$parsereceiptType() { var s0, s1; - if (input.substr(peg$currPos, 11) === peg$c28) { - s0 = peg$c28; + if (input.substr(peg$currPos, 11) === peg$c30) { + s0 = peg$c30; peg$currPos += 11; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e33); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c29) { + if (s1.toLowerCase() === peg$c31) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e32); } + if (peg$silentFails === 0) { peg$fail(peg$e34); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f26(); + s1 = peg$f27(); } s0 = s1; } @@ -1708,25 +1743,25 @@ function peg$parse(input, options) { function peg$parsewithdrawalType() { var s0, s1; - if (input.substr(peg$currPos, 14) === peg$c30) { - s0 = peg$c30; + if (input.substr(peg$currPos, 14) === peg$c32) { + s0 = peg$c32; peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e33); } + if (peg$silentFails === 0) { peg$fail(peg$e35); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c31) { + if (s1.toLowerCase() === peg$c33) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e36); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f27(); + s1 = peg$f28(); } s0 = s1; } @@ -1737,25 +1772,25 @@ function peg$parse(input, options) { function peg$parsewithdrawalStatus() { var s0, s1; - if (input.substr(peg$currPos, 16) === peg$c32) { - s0 = peg$c32; + if (input.substr(peg$currPos, 16) === peg$c34) { + s0 = peg$c34; peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e35); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c33) { + if (s1.toLowerCase() === peg$c35) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e36); } + if (peg$silentFails === 0) { peg$fail(peg$e38); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f28(); + s1 = peg$f29(); } s0 = s1; } @@ -1767,24 +1802,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 12); - if (s0.toLowerCase() === peg$c34) { + if (s0.toLowerCase() === peg$c36) { peg$currPos += 12; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e37); } + if (peg$silentFails === 0) { peg$fail(peg$e39); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c35) { + if (s1.toLowerCase() === peg$c37) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f29(); + s1 = peg$f30(); } s0 = s1; } @@ -1797,15 +1832,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c36) { + if (s1.toLowerCase() === peg$c38) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e39); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f30(); + s1 = peg$f31(); } s0 = s1; @@ -1817,15 +1852,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c37) { + if (s1.toLowerCase() === peg$c39) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e40); } + if (peg$silentFails === 0) { peg$fail(peg$e42); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f31(); + s1 = peg$f32(); } s0 = s1; @@ -1837,15 +1872,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c38) { + if (s1.toLowerCase() === peg$c40) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e41); } + if (peg$silentFails === 0) { peg$fail(peg$e43); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f32(); + s1 = peg$f33(); } s0 = s1; @@ -1857,15 +1892,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c39) { + if (s1.toLowerCase() === peg$c41) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e42); } + if (peg$silentFails === 0) { peg$fail(peg$e44); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f33(); + s1 = peg$f34(); } s0 = s1; @@ -1875,25 +1910,25 @@ function peg$parse(input, options) { function peg$parsesortBy() { var s0, s1; - if (input.substr(peg$currPos, 6) === peg$c40) { - s0 = peg$c40; + if (input.substr(peg$currPos, 6) === peg$c42) { + s0 = peg$c42; peg$currPos += 6; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e43); } + if (peg$silentFails === 0) { peg$fail(peg$e45); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c41) { + if (s1.toLowerCase() === peg$c43) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e44); } + if (peg$silentFails === 0) { peg$fail(peg$e46); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f34(); + s1 = peg$f35(); } s0 = s1; } @@ -1904,25 +1939,25 @@ function peg$parse(input, options) { function peg$parsesortOrder() { var s0, s1; - if (input.substr(peg$currPos, 9) === peg$c42) { - s0 = peg$c42; + if (input.substr(peg$currPos, 9) === peg$c44) { + s0 = peg$c44; peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e45); } + if (peg$silentFails === 0) { peg$fail(peg$e47); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c43) { + if (s1.toLowerCase() === peg$c45) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e46); } + if (peg$silentFails === 0) { peg$fail(peg$e48); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f35(); + s1 = peg$f36(); } s0 = s1; } @@ -1933,25 +1968,25 @@ function peg$parse(input, options) { function peg$parsepolicyID() { var s0, s1; - if (input.substr(peg$currPos, 8) === peg$c44) { - s0 = peg$c44; + if (input.substr(peg$currPos, 8) === peg$c46) { + s0 = peg$c46; peg$currPos += 8; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e47); } + if (peg$silentFails === 0) { peg$fail(peg$e49); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c45) { + if (s1.toLowerCase() === peg$c47) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e48); } + if (peg$silentFails === 0) { peg$fail(peg$e50); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f36(); + s1 = peg$f37(); } s0 = s1; } @@ -1964,15 +1999,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c46) { + if (s1.toLowerCase() === peg$c48) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e49); } + if (peg$silentFails === 0) { peg$fail(peg$e51); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f37(); + s1 = peg$f38(); } s0 = s1; @@ -1984,15 +2019,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c47) { + if (s1.toLowerCase() === peg$c49) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e50); } + if (peg$silentFails === 0) { peg$fail(peg$e52); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f38(); + s1 = peg$f39(); } s0 = s1; @@ -2004,15 +2039,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c48) { + if (s1.toLowerCase() === peg$c50) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e51); } + if (peg$silentFails === 0) { peg$fail(peg$e53); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f39(); + s1 = peg$f40(); } s0 = s1; @@ -2024,15 +2059,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c49) { + if (s1.toLowerCase() === peg$c51) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e52); } + if (peg$silentFails === 0) { peg$fail(peg$e54); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f40(); + s1 = peg$f41(); } s0 = s1; @@ -2044,15 +2079,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c50) { + if (s1.toLowerCase() === peg$c52) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e53); } + if (peg$silentFails === 0) { peg$fail(peg$e55); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f41(); + s1 = peg$f42(); } s0 = s1; @@ -2064,15 +2099,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c51) { + if (s1.toLowerCase() === peg$c53) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e54); } + if (peg$silentFails === 0) { peg$fail(peg$e56); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f42(); + s1 = peg$f43(); } s0 = s1; @@ -2083,24 +2118,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 7); - if (s0.toLowerCase() === peg$c52) { + if (s0.toLowerCase() === peg$c54) { peg$currPos += 7; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e55); } + if (peg$silentFails === 0) { peg$fail(peg$e57); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c53) { + if (s1.toLowerCase() === peg$c55) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e56); } + if (peg$silentFails === 0) { peg$fail(peg$e58); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f43(); + s1 = peg$f44(); } s0 = s1; } @@ -2113,15 +2148,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c54) { + if (s1.toLowerCase() === peg$c56) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e57); } + if (peg$silentFails === 0) { peg$fail(peg$e59); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f44(); + s1 = peg$f45(); } s0 = s1; @@ -2133,15 +2168,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c55) { + if (s1.toLowerCase() === peg$c57) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f45(); + s1 = peg$f46(); } s0 = s1; @@ -2153,15 +2188,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c56) { + if (s1.toLowerCase() === peg$c58) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e59); } + if (peg$silentFails === 0) { peg$fail(peg$e61); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f46(); + s1 = peg$f47(); } s0 = s1; @@ -2173,15 +2208,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c57) { + if (s1.toLowerCase() === peg$c59) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f47(); + s1 = peg$f48(); } s0 = s1; @@ -2192,24 +2227,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 9); - if (s0.toLowerCase() === peg$c58) { + if (s0.toLowerCase() === peg$c60) { peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c59) { + if (s1.toLowerCase() === peg$c61) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f48(); + s1 = peg$f49(); } s0 = s1; } @@ -2222,15 +2257,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c60) { + if (s1.toLowerCase() === peg$c62) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f49(); + s1 = peg$f50(); } s0 = s1; @@ -2242,15 +2277,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c61) { + if (s1.toLowerCase() === peg$c63) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f50(); + s1 = peg$f51(); } s0 = s1; @@ -2262,15 +2297,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c62) { + if (s1.toLowerCase() === peg$c64) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f51(); + s1 = peg$f52(); } s0 = s1; @@ -2282,15 +2317,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 2); - if (s1.toLowerCase() === peg$c63) { + if (s1.toLowerCase() === peg$c65) { peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f52(); + s1 = peg$f53(); } s0 = s1; @@ -2301,24 +2336,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 14); - if (s0.toLowerCase() === peg$c64) { + if (s0.toLowerCase() === peg$c66) { peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c65) { + if (s1.toLowerCase() === peg$c67) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f53(); + s1 = peg$f54(); } s0 = s1; } @@ -2330,24 +2365,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c66) { + if (s0.toLowerCase() === peg$c68) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c67) { + if (s1.toLowerCase() === peg$c69) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f54(); + s1 = peg$f55(); } s0 = s1; } @@ -2360,15 +2395,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c68) { + if (s1.toLowerCase() === peg$c70) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f55(); + s1 = peg$f56(); } s0 = s1; @@ -2380,15 +2415,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c69) { + if (s1.toLowerCase() === peg$c71) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f56(); + s1 = peg$f57(); } s0 = s1; @@ -2400,7 +2435,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f57(); + s1 = peg$f58(); if (s1) { s1 = undefined; } else { @@ -2442,7 +2477,7 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$parsewithdrawalId(); if (s0 === peg$FAILED) { - s0 = peg$parsebankAccount(); + s0 = peg$parsebankAccountColumn(); if (s0 === peg$FAILED) { s0 = peg$parsereportId(); if (s0 === peg$FAILED) { @@ -2520,11 +2555,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c70) { + if (s1.toLowerCase() === peg$c72) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2539,7 +2574,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f58(); + s0 = peg$f59(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2557,19 +2592,19 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c71) { + if (s1.toLowerCase() === peg$c73) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e74); } + if (peg$silentFails === 0) { peg$fail(peg$e76); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c72) { + if (s1.toLowerCase() === peg$c74) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e75); } + if (peg$silentFails === 0) { peg$fail(peg$e77); } } } if (s1 !== peg$FAILED) { @@ -2585,7 +2620,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f59(); + s0 = peg$f60(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2603,11 +2638,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c73) { + if (s1.toLowerCase() === peg$c75) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e76); } + if (peg$silentFails === 0) { peg$fail(peg$e78); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2622,7 +2657,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f60(); + s0 = peg$f61(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2640,11 +2675,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c74) { + if (s1.toLowerCase() === peg$c76) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e77); } + if (peg$silentFails === 0) { peg$fail(peg$e79); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2659,7 +2694,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f61(); + s0 = peg$f62(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2696,7 +2731,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f62(); + s0 = peg$f63(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2714,11 +2749,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c75) { + if (s1.toLowerCase() === peg$c77) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e78); } + if (peg$silentFails === 0) { peg$fail(peg$e80); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2733,7 +2768,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f63(); + s0 = peg$f64(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2751,11 +2786,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c35) { + if (s1.toLowerCase() === peg$c37) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2770,7 +2805,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f64(); + s0 = peg$f65(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2783,16 +2818,16 @@ function peg$parse(input, options) { return s0; } - function peg$parsebankAccount() { + function peg$parsebankAccountColumn() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c76) { + if (s1.toLowerCase() === peg$c25) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e79); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2807,7 +2842,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f65(); + s0 = peg$f66(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2825,11 +2860,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c78) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e80); } + if (peg$silentFails === 0) { peg$fail(peg$e81); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2844,7 +2879,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f66(); + s0 = peg$f67(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2881,7 +2916,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f67(); + s0 = peg$f68(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2899,11 +2934,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c78) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e81); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2918,7 +2953,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f68(); + s0 = peg$f69(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2943,7 +2978,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e82); } + if (peg$silentFails === 0) { peg$fail(peg$e83); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -2962,11 +2997,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c79) { + if (s1.toLowerCase() === peg$c80) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e83); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2981,7 +3016,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f69(); + s0 = peg$f70(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2993,11 +3028,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c78) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e81); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3012,7 +3047,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f70(); + s0 = peg$f71(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3031,11 +3066,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c80) { + if (s1.toLowerCase() === peg$c81) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e84); } + if (peg$silentFails === 0) { peg$fail(peg$e85); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3050,7 +3085,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f71(); + s0 = peg$f72(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3068,11 +3103,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c82) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e85); } + if (peg$silentFails === 0) { peg$fail(peg$e86); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3087,7 +3122,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f72(); + s0 = peg$f73(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3105,11 +3140,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 22); - if (s1.toLowerCase() === peg$c82) { + if (s1.toLowerCase() === peg$c83) { peg$currPos += 22; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e87); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3124,7 +3159,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f73(); + s0 = peg$f74(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3142,11 +3177,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c84) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e87); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3161,7 +3196,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f74(); + s0 = peg$f75(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3179,11 +3214,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c84) { + if (s1.toLowerCase() === peg$c85) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e88); } + if (peg$silentFails === 0) { peg$fail(peg$e89); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3198,7 +3233,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f75(); + s0 = peg$f76(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3216,11 +3251,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c85) { + if (s1.toLowerCase() === peg$c86) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e89); } + if (peg$silentFails === 0) { peg$fail(peg$e90); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3235,7 +3270,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f76(); + s0 = peg$f77(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3253,11 +3288,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c86) { + if (s1.toLowerCase() === peg$c87) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e90); } + if (peg$silentFails === 0) { peg$fail(peg$e91); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3272,7 +3307,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f77(); + s0 = peg$f78(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3290,11 +3325,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c88) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e91); } + if (peg$silentFails === 0) { peg$fail(peg$e92); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3309,7 +3344,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f78(); + s0 = peg$f79(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3327,11 +3362,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c88) { + if (s1.toLowerCase() === peg$c89) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e92); } + if (peg$silentFails === 0) { peg$fail(peg$e93); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3346,7 +3381,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f79(); + s0 = peg$f80(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3364,11 +3399,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e93); } + if (peg$silentFails === 0) { peg$fail(peg$e94); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3383,7 +3418,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f80(); + s0 = peg$f81(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3401,11 +3436,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 19); - if (s1.toLowerCase() === peg$c90) { + if (s1.toLowerCase() === peg$c91) { peg$currPos += 19; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e94); } + if (peg$silentFails === 0) { peg$fail(peg$e95); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3420,7 +3455,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f81(); + s0 = peg$f82(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3438,11 +3473,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c91) { + if (s1.toLowerCase() === peg$c92) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e95); } + if (peg$silentFails === 0) { peg$fail(peg$e96); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3457,7 +3492,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f82(); + s0 = peg$f83(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3475,11 +3510,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c93) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e96); } + if (peg$silentFails === 0) { peg$fail(peg$e97); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3494,7 +3529,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f83(); + s0 = peg$f84(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3512,11 +3547,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c93) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e97); } + if (peg$silentFails === 0) { peg$fail(peg$e98); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3531,7 +3566,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f84(); + s0 = peg$f85(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3549,11 +3584,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c94) { + if (s1.toLowerCase() === peg$c95) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e98); } + if (peg$silentFails === 0) { peg$fail(peg$e99); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3568,7 +3603,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f85(); + s0 = peg$f86(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3586,11 +3621,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c95) { + if (s1.toLowerCase() === peg$c96) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e99); } + if (peg$silentFails === 0) { peg$fail(peg$e100); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3605,7 +3640,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f86(); + s0 = peg$f87(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3623,11 +3658,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c96) { + if (s1.toLowerCase() === peg$c97) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e100); } + if (peg$silentFails === 0) { peg$fail(peg$e101); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3642,7 +3677,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f87(); + s0 = peg$f88(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3660,11 +3695,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c97) { + if (s1.toLowerCase() === peg$c98) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e101); } + if (peg$silentFails === 0) { peg$fail(peg$e102); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3679,7 +3714,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f88(); + s0 = peg$f89(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3702,81 +3737,81 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e82); } + if (peg$silentFails === 0) { peg$fail(peg$e83); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f89(); + s1 = peg$f90(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c98) { - s1 = peg$c98; + if (input.substr(peg$currPos, 2) === peg$c99) { + s1 = peg$c99; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e103); } + if (peg$silentFails === 0) { peg$fail(peg$e104); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f90(); + s1 = peg$f91(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c99) { - s1 = peg$c99; + if (input.substr(peg$currPos, 2) === peg$c100) { + s1 = peg$c100; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e104); } + if (peg$silentFails === 0) { peg$fail(peg$e105); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f91(); + s1 = peg$f92(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c100; + s1 = peg$c101; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e105); } + if (peg$silentFails === 0) { peg$fail(peg$e106); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f92(); + s1 = peg$f93(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c101) { - s1 = peg$c101; + if (input.substr(peg$currPos, 2) === peg$c102) { + s1 = peg$c102; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e106); } + if (peg$silentFails === 0) { peg$fail(peg$e107); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f93(); + s1 = peg$f94(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c102; + s1 = peg$c103; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e107); } + if (peg$silentFails === 0) { peg$fail(peg$e108); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f94(); + s1 = peg$f95(); } s0 = s1; } @@ -3787,7 +3822,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e102); } + if (peg$silentFails === 0) { peg$fail(peg$e103); } } return s0; @@ -3800,7 +3835,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f95(s1); + s1 = peg$f96(s1); } s0 = s1; @@ -3818,7 +3853,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } if (s2 !== peg$FAILED) { while (s2 !== peg$FAILED) { @@ -3828,7 +3863,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } } } else { @@ -3836,13 +3871,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f96(s1); + s1 = peg$f97(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e108); } + if (peg$silentFails === 0) { peg$fail(peg$e109); } } return s0; @@ -3854,7 +3889,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f97(); + s1 = peg$f98(); s0 = s1; return s0; @@ -3870,7 +3905,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -3879,12 +3914,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e110); } + if (peg$silentFails === 0) { peg$fail(peg$e111); } return s0; } @@ -3894,7 +3929,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f98(); + s1 = peg$f99(); if (s1) { s1 = undefined; } else { @@ -3931,7 +3966,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -3940,7 +3975,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } } s2 = input.charAt(peg$currPos); @@ -3948,7 +3983,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } if (s2 !== peg$FAILED) { s3 = []; @@ -3957,7 +3992,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -3966,7 +4001,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } } s4 = input.charAt(peg$currPos); @@ -3974,7 +4009,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } if (s4 !== peg$FAILED) { s5 = []; @@ -3983,7 +4018,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -3992,11 +4027,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } } peg$savedPos = s0; - s0 = peg$f99(s1, s3, s5); + s0 = peg$f100(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4008,7 +4043,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e112); } + if (peg$silentFails === 0) { peg$fail(peg$e113); } } return s0; @@ -4025,7 +4060,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4034,7 +4069,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } } s2 = input.charAt(peg$currPos); @@ -4042,7 +4077,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4051,7 +4086,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4067,15 +4102,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c103; + s6 = peg$c104; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f100(s1); + s4 = peg$f101(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4098,15 +4133,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c104; + s6 = peg$c105; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f101(s1); + s4 = peg$f102(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4129,15 +4164,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c105; + s6 = peg$c106; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f102(s1); + s4 = peg$f103(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4156,7 +4191,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4172,15 +4207,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c103; + s6 = peg$c104; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f100(s1); + s4 = peg$f101(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4203,15 +4238,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c104; + s6 = peg$c105; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f101(s1); + s4 = peg$f102(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4234,15 +4269,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c105; + s6 = peg$c106; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f102(s1); + s4 = peg$f103(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4258,7 +4293,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f103(s1, s3, s4); + s0 = peg$f104(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4270,7 +4305,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e112); } + if (peg$silentFails === 0) { peg$fail(peg$e113); } } return s0; @@ -4285,7 +4320,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4323,7 +4358,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4332,7 +4367,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } } s2 = []; @@ -4341,7 +4376,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -4350,7 +4385,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } } s3 = []; @@ -4359,7 +4394,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -4368,7 +4403,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } } s4 = peg$parseoperator(); @@ -4387,7 +4422,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4396,7 +4431,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } } s2 = peg$currPos; @@ -4443,7 +4478,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } } } @@ -4459,7 +4494,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } if (s0 === peg$FAILED) { s0 = peg$currPos; diff --git a/src/libs/SearchParser/autocompleteParser.peggy b/src/libs/SearchParser/autocompleteParser.peggy index c3a08c9f5b43..d7d8ea805784 100644 --- a/src/libs/SearchParser/autocompleteParser.peggy +++ b/src/libs/SearchParser/autocompleteParser.peggy @@ -96,6 +96,7 @@ autocompleteKey "key" / type / status / cardID + / bankAccount / feed / groupBy / view diff --git a/src/libs/SearchParser/baseRules.peggy b/src/libs/SearchParser/baseRules.peggy index 643433218def..7b07bd74584e 100644 --- a/src/libs/SearchParser/baseRules.peggy +++ b/src/libs/SearchParser/baseRules.peggy @@ -38,6 +38,9 @@ taxRate cardID = "cardID" / "card"i { return "cardID"; } +bankAccount + = "bankAccount" + / "bank-account"i { return "bankAccount"; } from = "from"i { return "from"; } attendee = "attendee"i {return "attendee"} expenseType @@ -104,7 +107,7 @@ columnsValues / taxAmount / policyName / withdrawalId - / bankAccount + / bankAccountColumn / reportId / base62ReportId / exportedToColumnValue @@ -134,7 +137,7 @@ taxAmount = "tax"i &wordBoundary { return "ta taxRateValue = "tax-rate"i &wordBoundary { return "taxrate"; } policyName = "policy-name"i &wordBoundary { return "policyname"; } withdrawalId = "withdrawal-id"i &wordBoundary { return "withdrawalID"; } -bankAccount = "bank-account"i &wordBoundary { return "bankAccount"; } +bankAccountColumn = "bank-account"i &wordBoundary { return "bankAccount"; } reportId = "long-report-id"i &wordBoundary { return "reportID"; } base62ReportId = "report-id"i &wordBoundary { return "base62ReportID"; } exportedToColumnValue = "exported-to"i &wordBoundary { return "exportedto"; } diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index ac9f09f1c8a3..68e284cb64e2 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -208,88 +208,89 @@ function peg$parse(input, options) { var peg$c21 = "tax-rate"; var peg$c22 = "cardID"; var peg$c23 = "card"; - var peg$c24 = "from"; - var peg$c25 = "attendee"; - var peg$c26 = "expenseType"; - var peg$c27 = "expense-type"; - var peg$c28 = "receiptType"; - var peg$c29 = "receipt-type"; - var peg$c30 = "withdrawalType"; - var peg$c31 = "withdrawal-type"; - var peg$c32 = "withdrawalStatus"; - var peg$c33 = "withdrawal-status"; - var peg$c34 = "withdrawalid"; - var peg$c35 = "withdrawal-id"; - var peg$c36 = "billable"; - var peg$c37 = "reimbursable"; - var peg$c38 = "type"; - var peg$c39 = "status"; - var peg$c40 = "sortBy"; - var peg$c41 = "sort-by"; - var peg$c42 = "sortOrder"; - var peg$c43 = "sort-order"; - var peg$c44 = "policyID"; - var peg$c45 = "workspace"; - var peg$c46 = "submitted"; - var peg$c47 = "approved"; - var peg$c48 = "paid"; - var peg$c49 = "exported"; - var peg$c50 = "posted"; - var peg$c51 = "withdrawn"; - var peg$c52 = "groupby"; - var peg$c53 = "group-by"; - var peg$c54 = "limit"; - var peg$c55 = "feed"; - var peg$c56 = "title"; - var peg$c57 = "assignee"; - var peg$c58 = "createdby"; - var peg$c59 = "created-by"; - var peg$c60 = "action"; - var peg$c61 = "total"; - var peg$c62 = "has"; - var peg$c63 = "is"; - var peg$c64 = "purchaseamount"; - var peg$c65 = "purchase-amount"; - var peg$c66 = "purchasecurrency"; - var peg$c67 = "purchase-currency"; - var peg$c68 = "columns"; - var peg$c69 = "view"; - var peg$c70 = "per-diem"; - var peg$c71 = "drafts"; - var peg$c72 = "draft"; - var peg$c73 = "original-amount"; - var peg$c74 = "tax"; - var peg$c75 = "policy-name"; - var peg$c76 = "bank-account"; - var peg$c77 = "long-report-id"; - var peg$c78 = "exported-to"; - var peg$c79 = "exportedto"; - var peg$c80 = "exchange-rate"; - var peg$c81 = "reimbursable-total"; - var peg$c82 = "non-reimbursable-total"; - var peg$c83 = "group-from"; - var peg$c84 = "group-expenses"; - var peg$c85 = "group-total"; - var peg$c86 = "group-card"; - var peg$c87 = "group-feed"; - var peg$c88 = "group-bank-account"; - var peg$c89 = "group-withdrawn"; - var peg$c90 = "group-withdrawal-id"; - var peg$c91 = "group-category"; - var peg$c92 = "group-tag"; - var peg$c93 = "group-merchant"; - var peg$c94 = "group-month"; - var peg$c95 = "group-week"; - var peg$c96 = "group-year"; - var peg$c97 = "group-quarter"; - var peg$c98 = "!="; - var peg$c99 = ">="; - var peg$c100 = ">"; - var peg$c101 = "<="; - var peg$c102 = "<"; - var peg$c103 = "\u201C"; - var peg$c104 = "\u201D"; - var peg$c105 = "\""; + var peg$c24 = "bankAccount"; + var peg$c25 = "bank-account"; + var peg$c26 = "from"; + var peg$c27 = "attendee"; + var peg$c28 = "expenseType"; + var peg$c29 = "expense-type"; + var peg$c30 = "receiptType"; + var peg$c31 = "receipt-type"; + var peg$c32 = "withdrawalType"; + var peg$c33 = "withdrawal-type"; + var peg$c34 = "withdrawalStatus"; + var peg$c35 = "withdrawal-status"; + var peg$c36 = "withdrawalid"; + var peg$c37 = "withdrawal-id"; + var peg$c38 = "billable"; + var peg$c39 = "reimbursable"; + var peg$c40 = "type"; + var peg$c41 = "status"; + var peg$c42 = "sortBy"; + var peg$c43 = "sort-by"; + var peg$c44 = "sortOrder"; + var peg$c45 = "sort-order"; + var peg$c46 = "policyID"; + var peg$c47 = "workspace"; + var peg$c48 = "submitted"; + var peg$c49 = "approved"; + var peg$c50 = "paid"; + var peg$c51 = "exported"; + var peg$c52 = "posted"; + var peg$c53 = "withdrawn"; + var peg$c54 = "groupby"; + var peg$c55 = "group-by"; + var peg$c56 = "limit"; + var peg$c57 = "feed"; + var peg$c58 = "title"; + var peg$c59 = "assignee"; + var peg$c60 = "createdby"; + var peg$c61 = "created-by"; + var peg$c62 = "action"; + var peg$c63 = "total"; + var peg$c64 = "has"; + var peg$c65 = "is"; + var peg$c66 = "purchaseamount"; + var peg$c67 = "purchase-amount"; + var peg$c68 = "purchasecurrency"; + var peg$c69 = "purchase-currency"; + var peg$c70 = "columns"; + var peg$c71 = "view"; + var peg$c72 = "per-diem"; + var peg$c73 = "drafts"; + var peg$c74 = "draft"; + var peg$c75 = "original-amount"; + var peg$c76 = "tax"; + var peg$c77 = "policy-name"; + var peg$c78 = "long-report-id"; + var peg$c79 = "exported-to"; + var peg$c80 = "exportedto"; + var peg$c81 = "exchange-rate"; + var peg$c82 = "reimbursable-total"; + var peg$c83 = "non-reimbursable-total"; + var peg$c84 = "group-from"; + var peg$c85 = "group-expenses"; + var peg$c86 = "group-total"; + var peg$c87 = "group-card"; + var peg$c88 = "group-feed"; + var peg$c89 = "group-bank-account"; + var peg$c90 = "group-withdrawn"; + var peg$c91 = "group-withdrawal-id"; + var peg$c92 = "group-category"; + var peg$c93 = "group-tag"; + var peg$c94 = "group-merchant"; + var peg$c95 = "group-month"; + var peg$c96 = "group-week"; + var peg$c97 = "group-year"; + var peg$c98 = "group-quarter"; + var peg$c99 = "!="; + var peg$c100 = ">="; + var peg$c101 = ">"; + var peg$c102 = "<="; + var peg$c103 = "<"; + var peg$c104 = "\u201C"; + var peg$c105 = "\u201D"; + var peg$c106 = "\""; var peg$r0 = /^[^ \t\r\n\xA0]/; var peg$r1 = /^[ \t\r\n\xA0,:=<>!]/; @@ -335,104 +336,105 @@ function peg$parse(input, options) { var peg$e26 = peg$literalExpectation("tax-rate", true); var peg$e27 = peg$literalExpectation("cardID", false); var peg$e28 = peg$literalExpectation("card", true); - var peg$e29 = peg$literalExpectation("from", true); - var peg$e30 = peg$literalExpectation("attendee", true); - var peg$e31 = peg$literalExpectation("expenseType", false); - var peg$e32 = peg$literalExpectation("expense-type", true); - var peg$e33 = peg$literalExpectation("receiptType", false); - var peg$e34 = peg$literalExpectation("receipt-type", true); - var peg$e35 = peg$literalExpectation("withdrawalType", false); - var peg$e36 = peg$literalExpectation("withdrawal-type", true); - var peg$e37 = peg$literalExpectation("withdrawalStatus", false); - var peg$e38 = peg$literalExpectation("withdrawal-status", true); - var peg$e39 = peg$literalExpectation("withdrawalID", true); - var peg$e40 = peg$literalExpectation("withdrawal-id", true); - var peg$e41 = peg$literalExpectation("billable", true); - var peg$e42 = peg$literalExpectation("reimbursable", true); - var peg$e43 = peg$literalExpectation("type", true); - var peg$e44 = peg$literalExpectation("status", true); - var peg$e45 = peg$literalExpectation("sortBy", false); - var peg$e46 = peg$literalExpectation("sort-by", true); - var peg$e47 = peg$literalExpectation("sortOrder", false); - var peg$e48 = peg$literalExpectation("sort-order", true); - var peg$e49 = peg$literalExpectation("policyID", false); - var peg$e50 = peg$literalExpectation("workspace", true); - var peg$e51 = peg$literalExpectation("submitted", true); - var peg$e52 = peg$literalExpectation("approved", true); - var peg$e53 = peg$literalExpectation("paid", true); - var peg$e54 = peg$literalExpectation("exported", true); - var peg$e55 = peg$literalExpectation("posted", true); - var peg$e56 = peg$literalExpectation("withdrawn", true); - var peg$e57 = peg$literalExpectation("groupBy", true); - var peg$e58 = peg$literalExpectation("group-by", true); - var peg$e59 = peg$literalExpectation("limit", true); - var peg$e60 = peg$literalExpectation("feed", true); - var peg$e61 = peg$literalExpectation("title", true); - var peg$e62 = peg$literalExpectation("assignee", true); - var peg$e63 = peg$literalExpectation("createdBy", true); - var peg$e64 = peg$literalExpectation("created-by", true); - var peg$e65 = peg$literalExpectation("action", true); - var peg$e66 = peg$literalExpectation("total", true); - var peg$e67 = peg$literalExpectation("has", true); - var peg$e68 = peg$literalExpectation("is", true); - var peg$e69 = peg$literalExpectation("purchaseAmount", true); - var peg$e70 = peg$literalExpectation("purchase-amount", true); - var peg$e71 = peg$literalExpectation("purchaseCurrency", true); - var peg$e72 = peg$literalExpectation("purchase-currency", true); - var peg$e73 = peg$literalExpectation("columns", true); - var peg$e74 = peg$literalExpectation("view", true); - var peg$e75 = peg$literalExpectation("per-diem", true); - var peg$e76 = peg$literalExpectation("drafts", true); - var peg$e77 = peg$literalExpectation("draft", true); - var peg$e78 = peg$literalExpectation("original-amount", true); - var peg$e79 = peg$literalExpectation("tax", true); - var peg$e80 = peg$literalExpectation("policy-name", true); - var peg$e81 = peg$literalExpectation("bank-account", true); - var peg$e82 = peg$literalExpectation("long-report-id", true); - var peg$e83 = peg$literalExpectation("exported-to", true); - var peg$e84 = peg$classExpectation([":", "="], false, false); - var peg$e85 = peg$literalExpectation("exportedTo", true); - var peg$e86 = peg$literalExpectation("exchange-rate", true); - var peg$e87 = peg$literalExpectation("reimbursable-total", true); - var peg$e88 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e89 = peg$literalExpectation("group-from", true); - var peg$e90 = peg$literalExpectation("group-expenses", true); - var peg$e91 = peg$literalExpectation("group-total", true); - var peg$e92 = peg$literalExpectation("group-card", true); - var peg$e93 = peg$literalExpectation("group-feed", true); - var peg$e94 = peg$literalExpectation("group-bank-account", true); - var peg$e95 = peg$literalExpectation("group-withdrawn", true); - var peg$e96 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e97 = peg$literalExpectation("group-category", true); - var peg$e98 = peg$literalExpectation("group-tag", true); - var peg$e99 = peg$literalExpectation("group-merchant", true); - var peg$e100 = peg$literalExpectation("group-month", true); - var peg$e101 = peg$literalExpectation("group-week", true); - var peg$e102 = peg$literalExpectation("group-year", true); - var peg$e103 = peg$literalExpectation("group-quarter", true); - var peg$e104 = peg$otherExpectation("operator"); - var peg$e105 = peg$literalExpectation("!=", false); - var peg$e106 = peg$literalExpectation(">=", false); - var peg$e107 = peg$literalExpectation(">", false); - var peg$e108 = peg$literalExpectation("<=", false); - var peg$e109 = peg$literalExpectation("<", false); - var peg$e110 = peg$otherExpectation("word"); - var peg$e111 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e112 = peg$otherExpectation("whitespace"); - var peg$e113 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e114 = peg$otherExpectation("quote"); - var peg$e115 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e116 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e117 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e118 = peg$literalExpectation("\u201C", false); - var peg$e119 = peg$literalExpectation("\u201D", false); - var peg$e120 = peg$literalExpectation("\"", false); - var peg$e121 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e122 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e123 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e124 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e125 = peg$classExpectation([","], false, false); - var peg$e126 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e29 = peg$literalExpectation("bankAccount", false); + var peg$e30 = peg$literalExpectation("bank-account", true); + var peg$e31 = peg$literalExpectation("from", true); + var peg$e32 = peg$literalExpectation("attendee", true); + var peg$e33 = peg$literalExpectation("expenseType", false); + var peg$e34 = peg$literalExpectation("expense-type", true); + var peg$e35 = peg$literalExpectation("receiptType", false); + var peg$e36 = peg$literalExpectation("receipt-type", true); + var peg$e37 = peg$literalExpectation("withdrawalType", false); + var peg$e38 = peg$literalExpectation("withdrawal-type", true); + var peg$e39 = peg$literalExpectation("withdrawalStatus", false); + var peg$e40 = peg$literalExpectation("withdrawal-status", true); + var peg$e41 = peg$literalExpectation("withdrawalID", true); + var peg$e42 = peg$literalExpectation("withdrawal-id", true); + var peg$e43 = peg$literalExpectation("billable", true); + var peg$e44 = peg$literalExpectation("reimbursable", true); + var peg$e45 = peg$literalExpectation("type", true); + var peg$e46 = peg$literalExpectation("status", true); + var peg$e47 = peg$literalExpectation("sortBy", false); + var peg$e48 = peg$literalExpectation("sort-by", true); + var peg$e49 = peg$literalExpectation("sortOrder", false); + var peg$e50 = peg$literalExpectation("sort-order", true); + var peg$e51 = peg$literalExpectation("policyID", false); + var peg$e52 = peg$literalExpectation("workspace", true); + var peg$e53 = peg$literalExpectation("submitted", true); + var peg$e54 = peg$literalExpectation("approved", true); + var peg$e55 = peg$literalExpectation("paid", true); + var peg$e56 = peg$literalExpectation("exported", true); + var peg$e57 = peg$literalExpectation("posted", true); + var peg$e58 = peg$literalExpectation("withdrawn", true); + var peg$e59 = peg$literalExpectation("groupBy", true); + var peg$e60 = peg$literalExpectation("group-by", true); + var peg$e61 = peg$literalExpectation("limit", true); + var peg$e62 = peg$literalExpectation("feed", true); + var peg$e63 = peg$literalExpectation("title", true); + var peg$e64 = peg$literalExpectation("assignee", true); + var peg$e65 = peg$literalExpectation("createdBy", true); + var peg$e66 = peg$literalExpectation("created-by", true); + var peg$e67 = peg$literalExpectation("action", true); + var peg$e68 = peg$literalExpectation("total", true); + var peg$e69 = peg$literalExpectation("has", true); + var peg$e70 = peg$literalExpectation("is", true); + var peg$e71 = peg$literalExpectation("purchaseAmount", true); + var peg$e72 = peg$literalExpectation("purchase-amount", true); + var peg$e73 = peg$literalExpectation("purchaseCurrency", true); + var peg$e74 = peg$literalExpectation("purchase-currency", true); + var peg$e75 = peg$literalExpectation("columns", true); + var peg$e76 = peg$literalExpectation("view", true); + var peg$e77 = peg$literalExpectation("per-diem", true); + var peg$e78 = peg$literalExpectation("drafts", true); + var peg$e79 = peg$literalExpectation("draft", true); + var peg$e80 = peg$literalExpectation("original-amount", true); + var peg$e81 = peg$literalExpectation("tax", true); + var peg$e82 = peg$literalExpectation("policy-name", true); + var peg$e83 = peg$literalExpectation("long-report-id", true); + var peg$e84 = peg$literalExpectation("exported-to", true); + var peg$e85 = peg$classExpectation([":", "="], false, false); + var peg$e86 = peg$literalExpectation("exportedTo", true); + var peg$e87 = peg$literalExpectation("exchange-rate", true); + var peg$e88 = peg$literalExpectation("reimbursable-total", true); + var peg$e89 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e90 = peg$literalExpectation("group-from", true); + var peg$e91 = peg$literalExpectation("group-expenses", true); + var peg$e92 = peg$literalExpectation("group-total", true); + var peg$e93 = peg$literalExpectation("group-card", true); + var peg$e94 = peg$literalExpectation("group-feed", true); + var peg$e95 = peg$literalExpectation("group-bank-account", true); + var peg$e96 = peg$literalExpectation("group-withdrawn", true); + var peg$e97 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e98 = peg$literalExpectation("group-category", true); + var peg$e99 = peg$literalExpectation("group-tag", true); + var peg$e100 = peg$literalExpectation("group-merchant", true); + var peg$e101 = peg$literalExpectation("group-month", true); + var peg$e102 = peg$literalExpectation("group-week", true); + var peg$e103 = peg$literalExpectation("group-year", true); + var peg$e104 = peg$literalExpectation("group-quarter", true); + var peg$e105 = peg$otherExpectation("operator"); + var peg$e106 = peg$literalExpectation("!=", false); + var peg$e107 = peg$literalExpectation(">=", false); + var peg$e108 = peg$literalExpectation(">", false); + var peg$e109 = peg$literalExpectation("<=", false); + var peg$e110 = peg$literalExpectation("<", false); + var peg$e111 = peg$otherExpectation("word"); + var peg$e112 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e113 = peg$otherExpectation("whitespace"); + var peg$e114 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e115 = peg$otherExpectation("quote"); + var peg$e116 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e117 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e118 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e119 = peg$literalExpectation("\u201C", false); + var peg$e120 = peg$literalExpectation("\u201D", false); + var peg$e121 = peg$literalExpectation("\"", false); + var peg$e122 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e123 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e124 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e125 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e126 = peg$classExpectation([","], false, false); + var peg$e127 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); var peg$f0 = function(filters) { return applyDefaults(filters); }; var peg$f1 = function(head, tail) { @@ -535,101 +537,102 @@ function peg$parse(input, options) { var peg$f21 = function() { return "payer"; }; var peg$f22 = function() { return "taxRate"; }; var peg$f23 = function() { return "cardID"; }; - var peg$f24 = function() { return "from"; }; - var peg$f25 = function() {return "attendee"}; - var peg$f26 = function() { return "expenseType"; }; - var peg$f27 = function() { return "receiptType"; }; - var peg$f28 = function() { return "withdrawalType"; }; - var peg$f29 = function() { return "withdrawalStatus"; }; - var peg$f30 = function() { return "withdrawalID"; }; - var peg$f31 = function() { return "billable"; }; - var peg$f32 = function() { return "reimbursable"; }; - var peg$f33 = function() { return "type"; }; - var peg$f34 = function() { return "status"; }; - var peg$f35 = function() { return "sortBy"; }; - var peg$f36 = function() { return "sortOrder"; }; - var peg$f37 = function() { return "policyID"; }; - var peg$f38 = function() { return "submitted"; }; - var peg$f39 = function() { return "approved"; }; - var peg$f40 = function() { return "paid"; }; - var peg$f41 = function() { return "exported"; }; - var peg$f42 = function() { return "posted"; }; - var peg$f43 = function() { return "withdrawn"; }; - var peg$f44 = function() { return "groupBy"; }; - var peg$f45 = function() { return "limit"; }; - var peg$f46 = function() { return "feed"; }; - var peg$f47 = function() { return "title"; }; - var peg$f48 = function() { return "assignee"; }; - var peg$f49 = function() { return "createdBy"; }; - var peg$f50 = function() { return "action"; }; - var peg$f51 = function() {return "total"; }; - var peg$f52 = function() {return "has"; }; - var peg$f53 = function() {return "is"; }; - var peg$f54 = function() {return "purchaseAmount"}; - var peg$f55 = function() {return "purchaseCurrency"}; - var peg$f56 = function() { + var peg$f24 = function() { return "bankAccount"; }; + var peg$f25 = function() { return "from"; }; + var peg$f26 = function() {return "attendee"}; + var peg$f27 = function() { return "expenseType"; }; + var peg$f28 = function() { return "receiptType"; }; + var peg$f29 = function() { return "withdrawalType"; }; + var peg$f30 = function() { return "withdrawalStatus"; }; + var peg$f31 = function() { return "withdrawalID"; }; + var peg$f32 = function() { return "billable"; }; + var peg$f33 = function() { return "reimbursable"; }; + var peg$f34 = function() { return "type"; }; + var peg$f35 = function() { return "status"; }; + var peg$f36 = function() { return "sortBy"; }; + var peg$f37 = function() { return "sortOrder"; }; + var peg$f38 = function() { return "policyID"; }; + var peg$f39 = function() { return "submitted"; }; + var peg$f40 = function() { return "approved"; }; + var peg$f41 = function() { return "paid"; }; + var peg$f42 = function() { return "exported"; }; + var peg$f43 = function() { return "posted"; }; + var peg$f44 = function() { return "withdrawn"; }; + var peg$f45 = function() { return "groupBy"; }; + var peg$f46 = function() { return "limit"; }; + var peg$f47 = function() { return "feed"; }; + var peg$f48 = function() { return "title"; }; + var peg$f49 = function() { return "assignee"; }; + var peg$f50 = function() { return "createdBy"; }; + var peg$f51 = function() { return "action"; }; + var peg$f52 = function() {return "total"; }; + var peg$f53 = function() {return "has"; }; + var peg$f54 = function() {return "is"; }; + var peg$f55 = function() {return "purchaseAmount"}; + var peg$f56 = function() {return "purchaseCurrency"}; + var peg$f57 = function() { isColumnsContext = true; return "columns"; }; - var peg$f57 = function() {return "view"}; - var peg$f58 = function() { return isColumnsContext; }; - var peg$f59 = function() { return "perDiem"; }; - var peg$f60 = function() { return "drafts"; }; - var peg$f61 = function() { return "originalamount"; }; - var peg$f62 = function() { return "taxAmount"; }; - var peg$f63 = function() { return "taxrate"; }; - var peg$f64 = function() { return "policyname"; }; - var peg$f65 = function() { return "withdrawalID"; }; - var peg$f66 = function() { return "bankAccount"; }; - var peg$f67 = function() { return "reportID"; }; - var peg$f68 = function() { return "base62ReportID"; }; - var peg$f69 = function() { return "exportedto"; }; - var peg$f70 = function() { return "exportedTo"; }; + var peg$f58 = function() {return "view"}; + var peg$f59 = function() { return isColumnsContext; }; + var peg$f60 = function() { return "perDiem"; }; + var peg$f61 = function() { return "drafts"; }; + var peg$f62 = function() { return "originalamount"; }; + var peg$f63 = function() { return "taxAmount"; }; + var peg$f64 = function() { return "taxrate"; }; + var peg$f65 = function() { return "policyname"; }; + var peg$f66 = function() { return "withdrawalID"; }; + var peg$f67 = function() { return "bankAccount"; }; + var peg$f68 = function() { return "reportID"; }; + var peg$f69 = function() { return "base62ReportID"; }; + var peg$f70 = function() { return "exportedto"; }; var peg$f71 = function() { return "exportedTo"; }; - var peg$f72 = function() { return "exchangeRate"; }; - var peg$f73 = function() { return "reimbursableTotal"; }; - var peg$f74 = function() { return "nonReimbursableTotal"; }; - var peg$f75 = function() { return "groupFrom"; }; - var peg$f76 = function() { return "groupExpenses"; }; - var peg$f77 = function() { return "groupTotal"; }; - var peg$f78 = function() { return "groupCard"; }; - var peg$f79 = function() { return "groupFeed"; }; - var peg$f80 = function() { return "groupBankAccount"; }; - var peg$f81 = function() { return "groupWithdrawn"; }; - var peg$f82 = function() { return "groupWithdrawalID"; }; - var peg$f83 = function() { return "groupCategory"; }; - var peg$f84 = function() { return "groupTag"; }; - var peg$f85 = function() { return "groupMerchant"; }; - var peg$f86 = function() { return "groupmonth"; }; - var peg$f87 = function() { return "groupweek"; }; - var peg$f88 = function() { return "groupyear"; }; - var peg$f89 = function() { return "groupquarter"; }; - var peg$f90 = function() { return "eq"; }; - var peg$f91 = function() { return "neq"; }; - var peg$f92 = function() { return "gte"; }; - var peg$f93 = function() { return "gt"; }; - var peg$f94 = function() { return "lte"; }; - var peg$f95 = function() { return "lt"; }; - var peg$f96 = function(o) { + var peg$f72 = function() { return "exportedTo"; }; + var peg$f73 = function() { return "exchangeRate"; }; + var peg$f74 = function() { return "reimbursableTotal"; }; + var peg$f75 = function() { return "nonReimbursableTotal"; }; + var peg$f76 = function() { return "groupFrom"; }; + var peg$f77 = function() { return "groupExpenses"; }; + var peg$f78 = function() { return "groupTotal"; }; + var peg$f79 = function() { return "groupCard"; }; + var peg$f80 = function() { return "groupFeed"; }; + var peg$f81 = function() { return "groupBankAccount"; }; + var peg$f82 = function() { return "groupWithdrawn"; }; + var peg$f83 = function() { return "groupWithdrawalID"; }; + var peg$f84 = function() { return "groupCategory"; }; + var peg$f85 = function() { return "groupTag"; }; + var peg$f86 = function() { return "groupMerchant"; }; + var peg$f87 = function() { return "groupmonth"; }; + var peg$f88 = function() { return "groupweek"; }; + var peg$f89 = function() { return "groupyear"; }; + var peg$f90 = function() { return "groupquarter"; }; + var peg$f91 = function() { return "eq"; }; + var peg$f92 = function() { return "neq"; }; + var peg$f93 = function() { return "gte"; }; + var peg$f94 = function() { return "gt"; }; + var peg$f95 = function() { return "lte"; }; + var peg$f96 = function() { return "lt"; }; + var peg$f97 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } isColumnsContext = false; return o; }; - var peg$f97 = function(chars) { return chars.join("").trim(); }; - var peg$f98 = function() { + var peg$f98 = function(chars) { return chars.join("").trim(); }; + var peg$f99 = function() { isColumnsContext = false; return "and"; }; - var peg$f99 = function() { return expectingNestedQuote; }; - var peg$f100 = function(start, inner, end) { //handle no-breaking space + var peg$f100 = function() { return expectingNestedQuote; }; + var peg$f101 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f101 = function(start) {return "“"}; - var peg$f102 = function(start) {return "”"}; - var peg$f103 = function(start) {return "\""}; - var peg$f104 = function(start, inner, end) { + var peg$f102 = function(start) {return "“"}; + var peg$f103 = function(start) {return "”"}; + var peg$f104 = function(start) {return "\""}; + var peg$f105 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -1141,61 +1144,64 @@ function peg$parse(input, options) { if (s1 === peg$FAILED) { s1 = peg$parsecardID(); if (s1 === peg$FAILED) { - s1 = peg$parsefrom(); + s1 = peg$parsebankAccount(); if (s1 === peg$FAILED) { - s1 = peg$parseattendee(); + s1 = peg$parsefrom(); if (s1 === peg$FAILED) { - s1 = peg$parsepayer(); + s1 = peg$parseattendee(); if (s1 === peg$FAILED) { - s1 = peg$parseexporter(); + s1 = peg$parsepayer(); if (s1 === peg$FAILED) { - s1 = peg$parseexpenseType(); + s1 = peg$parseexporter(); if (s1 === peg$FAILED) { - s1 = peg$parsereceiptType(); + s1 = peg$parseexpenseType(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawalType(); + s1 = peg$parsereceiptType(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawalStatus(); + s1 = peg$parsewithdrawalType(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawalID(); + s1 = peg$parsewithdrawalStatus(); if (s1 === peg$FAILED) { - s1 = peg$parsesubmitted(); + s1 = peg$parsewithdrawalID(); if (s1 === peg$FAILED) { - s1 = peg$parseapproved(); + s1 = peg$parsesubmitted(); if (s1 === peg$FAILED) { - s1 = peg$parsepaid(); + s1 = peg$parseapproved(); if (s1 === peg$FAILED) { - s1 = peg$parseexportedTo(); + s1 = peg$parsepaid(); if (s1 === peg$FAILED) { - s1 = peg$parseexported(); + s1 = peg$parseexportedTo(); if (s1 === peg$FAILED) { - s1 = peg$parseposted(); + s1 = peg$parseexported(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawn(); + s1 = peg$parseposted(); if (s1 === peg$FAILED) { - s1 = peg$parsefeed(); + s1 = peg$parsewithdrawn(); if (s1 === peg$FAILED) { - s1 = peg$parsetitle(); + s1 = peg$parsefeed(); if (s1 === peg$FAILED) { - s1 = peg$parseassignee(); + s1 = peg$parsetitle(); if (s1 === peg$FAILED) { - s1 = peg$parsecreatedBy(); + s1 = peg$parseassignee(); if (s1 === peg$FAILED) { - s1 = peg$parsereimbursable(); + s1 = peg$parsecreatedBy(); if (s1 === peg$FAILED) { - s1 = peg$parsebillable(); + s1 = peg$parsereimbursable(); if (s1 === peg$FAILED) { - s1 = peg$parseaction(); + s1 = peg$parsebillable(); if (s1 === peg$FAILED) { - s1 = peg$parsehas(); + s1 = peg$parseaction(); if (s1 === peg$FAILED) { - s1 = peg$parseis(); + s1 = peg$parsehas(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseCurrency(); + s1 = peg$parseis(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseAmount(); + s1 = peg$parsepurchaseCurrency(); if (s1 === peg$FAILED) { - s1 = peg$parsereportFieldDynamic(); + s1 = peg$parsepurchaseAmount(); + if (s1 === peg$FAILED) { + s1 = peg$parsereportFieldDynamic(); + } } } } @@ -1791,20 +1797,49 @@ function peg$parse(input, options) { return s0; } + function peg$parsebankAccount() { + var s0, s1; + + if (input.substr(peg$currPos, 11) === peg$c24) { + s0 = peg$c24; + peg$currPos += 11; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e29); } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 12); + if (s1.toLowerCase() === peg$c25) { + peg$currPos += 12; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e30); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f24(); + } + s0 = s1; + } + + return s0; + } + function peg$parsefrom() { var s0, s1; s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c24) { + if (s1.toLowerCase() === peg$c26) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e29); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f24(); + s1 = peg$f25(); } s0 = s1; @@ -1816,15 +1851,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c25) { + if (s1.toLowerCase() === peg$c27) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f25(); + s1 = peg$f26(); } s0 = s1; @@ -1834,25 +1869,25 @@ function peg$parse(input, options) { function peg$parseexpenseType() { var s0, s1; - if (input.substr(peg$currPos, 11) === peg$c26) { - s0 = peg$c26; + if (input.substr(peg$currPos, 11) === peg$c28) { + s0 = peg$c28; peg$currPos += 11; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e33); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c27) { + if (s1.toLowerCase() === peg$c29) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e32); } + if (peg$silentFails === 0) { peg$fail(peg$e34); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f26(); + s1 = peg$f27(); } s0 = s1; } @@ -1863,25 +1898,25 @@ function peg$parse(input, options) { function peg$parsereceiptType() { var s0, s1; - if (input.substr(peg$currPos, 11) === peg$c28) { - s0 = peg$c28; + if (input.substr(peg$currPos, 11) === peg$c30) { + s0 = peg$c30; peg$currPos += 11; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e33); } + if (peg$silentFails === 0) { peg$fail(peg$e35); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c29) { + if (s1.toLowerCase() === peg$c31) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e36); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f27(); + s1 = peg$f28(); } s0 = s1; } @@ -1892,25 +1927,25 @@ function peg$parse(input, options) { function peg$parsewithdrawalType() { var s0, s1; - if (input.substr(peg$currPos, 14) === peg$c30) { - s0 = peg$c30; + if (input.substr(peg$currPos, 14) === peg$c32) { + s0 = peg$c32; peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e35); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c31) { + if (s1.toLowerCase() === peg$c33) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e36); } + if (peg$silentFails === 0) { peg$fail(peg$e38); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f28(); + s1 = peg$f29(); } s0 = s1; } @@ -1921,25 +1956,25 @@ function peg$parse(input, options) { function peg$parsewithdrawalStatus() { var s0, s1; - if (input.substr(peg$currPos, 16) === peg$c32) { - s0 = peg$c32; + if (input.substr(peg$currPos, 16) === peg$c34) { + s0 = peg$c34; peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e37); } + if (peg$silentFails === 0) { peg$fail(peg$e39); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c33) { + if (s1.toLowerCase() === peg$c35) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f29(); + s1 = peg$f30(); } s0 = s1; } @@ -1951,24 +1986,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 12); - if (s0.toLowerCase() === peg$c34) { + if (s0.toLowerCase() === peg$c36) { peg$currPos += 12; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e39); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c35) { + if (s1.toLowerCase() === peg$c37) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e40); } + if (peg$silentFails === 0) { peg$fail(peg$e42); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f30(); + s1 = peg$f31(); } s0 = s1; } @@ -1981,15 +2016,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c36) { + if (s1.toLowerCase() === peg$c38) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e41); } + if (peg$silentFails === 0) { peg$fail(peg$e43); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f31(); + s1 = peg$f32(); } s0 = s1; @@ -2001,15 +2036,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c37) { + if (s1.toLowerCase() === peg$c39) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e42); } + if (peg$silentFails === 0) { peg$fail(peg$e44); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f32(); + s1 = peg$f33(); } s0 = s1; @@ -2021,15 +2056,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c38) { + if (s1.toLowerCase() === peg$c40) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e43); } + if (peg$silentFails === 0) { peg$fail(peg$e45); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f33(); + s1 = peg$f34(); } s0 = s1; @@ -2041,15 +2076,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c39) { + if (s1.toLowerCase() === peg$c41) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e44); } + if (peg$silentFails === 0) { peg$fail(peg$e46); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f34(); + s1 = peg$f35(); } s0 = s1; @@ -2059,25 +2094,25 @@ function peg$parse(input, options) { function peg$parsesortBy() { var s0, s1; - if (input.substr(peg$currPos, 6) === peg$c40) { - s0 = peg$c40; + if (input.substr(peg$currPos, 6) === peg$c42) { + s0 = peg$c42; peg$currPos += 6; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e45); } + if (peg$silentFails === 0) { peg$fail(peg$e47); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c41) { + if (s1.toLowerCase() === peg$c43) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e46); } + if (peg$silentFails === 0) { peg$fail(peg$e48); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f35(); + s1 = peg$f36(); } s0 = s1; } @@ -2088,25 +2123,25 @@ function peg$parse(input, options) { function peg$parsesortOrder() { var s0, s1; - if (input.substr(peg$currPos, 9) === peg$c42) { - s0 = peg$c42; + if (input.substr(peg$currPos, 9) === peg$c44) { + s0 = peg$c44; peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e47); } + if (peg$silentFails === 0) { peg$fail(peg$e49); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c43) { + if (s1.toLowerCase() === peg$c45) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e48); } + if (peg$silentFails === 0) { peg$fail(peg$e50); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f36(); + s1 = peg$f37(); } s0 = s1; } @@ -2117,25 +2152,25 @@ function peg$parse(input, options) { function peg$parsepolicyID() { var s0, s1; - if (input.substr(peg$currPos, 8) === peg$c44) { - s0 = peg$c44; + if (input.substr(peg$currPos, 8) === peg$c46) { + s0 = peg$c46; peg$currPos += 8; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e49); } + if (peg$silentFails === 0) { peg$fail(peg$e51); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c45) { + if (s1.toLowerCase() === peg$c47) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e50); } + if (peg$silentFails === 0) { peg$fail(peg$e52); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f37(); + s1 = peg$f38(); } s0 = s1; } @@ -2148,15 +2183,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c46) { + if (s1.toLowerCase() === peg$c48) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e51); } + if (peg$silentFails === 0) { peg$fail(peg$e53); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f38(); + s1 = peg$f39(); } s0 = s1; @@ -2168,15 +2203,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c47) { + if (s1.toLowerCase() === peg$c49) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e52); } + if (peg$silentFails === 0) { peg$fail(peg$e54); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f39(); + s1 = peg$f40(); } s0 = s1; @@ -2188,15 +2223,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c48) { + if (s1.toLowerCase() === peg$c50) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e53); } + if (peg$silentFails === 0) { peg$fail(peg$e55); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f40(); + s1 = peg$f41(); } s0 = s1; @@ -2208,15 +2243,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c49) { + if (s1.toLowerCase() === peg$c51) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e54); } + if (peg$silentFails === 0) { peg$fail(peg$e56); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f41(); + s1 = peg$f42(); } s0 = s1; @@ -2228,15 +2263,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c50) { + if (s1.toLowerCase() === peg$c52) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e55); } + if (peg$silentFails === 0) { peg$fail(peg$e57); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f42(); + s1 = peg$f43(); } s0 = s1; @@ -2248,15 +2283,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c51) { + if (s1.toLowerCase() === peg$c53) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e56); } + if (peg$silentFails === 0) { peg$fail(peg$e58); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f43(); + s1 = peg$f44(); } s0 = s1; @@ -2267,24 +2302,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 7); - if (s0.toLowerCase() === peg$c52) { + if (s0.toLowerCase() === peg$c54) { peg$currPos += 7; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e57); } + if (peg$silentFails === 0) { peg$fail(peg$e59); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c53) { + if (s1.toLowerCase() === peg$c55) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f44(); + s1 = peg$f45(); } s0 = s1; } @@ -2297,15 +2332,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c54) { + if (s1.toLowerCase() === peg$c56) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e59); } + if (peg$silentFails === 0) { peg$fail(peg$e61); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f45(); + s1 = peg$f46(); } s0 = s1; @@ -2317,15 +2352,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c55) { + if (s1.toLowerCase() === peg$c57) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f46(); + s1 = peg$f47(); } s0 = s1; @@ -2337,15 +2372,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c56) { + if (s1.toLowerCase() === peg$c58) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f47(); + s1 = peg$f48(); } s0 = s1; @@ -2357,15 +2392,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c57) { + if (s1.toLowerCase() === peg$c59) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f48(); + s1 = peg$f49(); } s0 = s1; @@ -2376,24 +2411,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 9); - if (s0.toLowerCase() === peg$c58) { + if (s0.toLowerCase() === peg$c60) { peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c59) { + if (s1.toLowerCase() === peg$c61) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f49(); + s1 = peg$f50(); } s0 = s1; } @@ -2406,15 +2441,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c60) { + if (s1.toLowerCase() === peg$c62) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f50(); + s1 = peg$f51(); } s0 = s1; @@ -2426,15 +2461,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c61) { + if (s1.toLowerCase() === peg$c63) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f51(); + s1 = peg$f52(); } s0 = s1; @@ -2446,15 +2481,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c62) { + if (s1.toLowerCase() === peg$c64) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f52(); + s1 = peg$f53(); } s0 = s1; @@ -2466,15 +2501,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 2); - if (s1.toLowerCase() === peg$c63) { + if (s1.toLowerCase() === peg$c65) { peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f53(); + s1 = peg$f54(); } s0 = s1; @@ -2485,24 +2520,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 14); - if (s0.toLowerCase() === peg$c64) { + if (s0.toLowerCase() === peg$c66) { peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c65) { + if (s1.toLowerCase() === peg$c67) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f54(); + s1 = peg$f55(); } s0 = s1; } @@ -2514,24 +2549,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c66) { + if (s0.toLowerCase() === peg$c68) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c67) { + if (s1.toLowerCase() === peg$c69) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f55(); + s1 = peg$f56(); } s0 = s1; } @@ -2544,15 +2579,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c68) { + if (s1.toLowerCase() === peg$c70) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f56(); + s1 = peg$f57(); } s0 = s1; @@ -2564,15 +2599,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c69) { + if (s1.toLowerCase() === peg$c71) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e74); } + if (peg$silentFails === 0) { peg$fail(peg$e76); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f57(); + s1 = peg$f58(); } s0 = s1; @@ -2584,7 +2619,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f58(); + s1 = peg$f59(); if (s1) { s1 = undefined; } else { @@ -2626,7 +2661,7 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$parsewithdrawalId(); if (s0 === peg$FAILED) { - s0 = peg$parsebankAccount(); + s0 = peg$parsebankAccountColumn(); if (s0 === peg$FAILED) { s0 = peg$parsereportId(); if (s0 === peg$FAILED) { @@ -2704,11 +2739,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c70) { + if (s1.toLowerCase() === peg$c72) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e75); } + if (peg$silentFails === 0) { peg$fail(peg$e77); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2723,7 +2758,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f59(); + s0 = peg$f60(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2741,19 +2776,19 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c71) { + if (s1.toLowerCase() === peg$c73) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e76); } + if (peg$silentFails === 0) { peg$fail(peg$e78); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c72) { + if (s1.toLowerCase() === peg$c74) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e77); } + if (peg$silentFails === 0) { peg$fail(peg$e79); } } } if (s1 !== peg$FAILED) { @@ -2769,7 +2804,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f60(); + s0 = peg$f61(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2787,11 +2822,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c73) { + if (s1.toLowerCase() === peg$c75) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e78); } + if (peg$silentFails === 0) { peg$fail(peg$e80); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2806,7 +2841,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f61(); + s0 = peg$f62(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2824,11 +2859,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c74) { + if (s1.toLowerCase() === peg$c76) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e79); } + if (peg$silentFails === 0) { peg$fail(peg$e81); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2843,7 +2878,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f62(); + s0 = peg$f63(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2880,7 +2915,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f63(); + s0 = peg$f64(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2898,11 +2933,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c75) { + if (s1.toLowerCase() === peg$c77) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e80); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2917,7 +2952,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f64(); + s0 = peg$f65(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2935,11 +2970,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c35) { + if (s1.toLowerCase() === peg$c37) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e40); } + if (peg$silentFails === 0) { peg$fail(peg$e42); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2954,7 +2989,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f65(); + s0 = peg$f66(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2967,16 +3002,16 @@ function peg$parse(input, options) { return s0; } - function peg$parsebankAccount() { + function peg$parsebankAccountColumn() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c76) { + if (s1.toLowerCase() === peg$c25) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e81); } + if (peg$silentFails === 0) { peg$fail(peg$e30); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2991,7 +3026,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f66(); + s0 = peg$f67(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3009,11 +3044,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c78) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e82); } + if (peg$silentFails === 0) { peg$fail(peg$e83); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3028,7 +3063,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f67(); + s0 = peg$f68(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3065,7 +3100,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f68(); + s0 = peg$f69(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3083,11 +3118,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c78) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e83); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3102,7 +3137,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f69(); + s0 = peg$f70(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3127,7 +3162,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e84); } + if (peg$silentFails === 0) { peg$fail(peg$e85); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -3146,11 +3181,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c79) { + if (s1.toLowerCase() === peg$c80) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e85); } + if (peg$silentFails === 0) { peg$fail(peg$e86); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3165,7 +3200,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f70(); + s0 = peg$f71(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3177,11 +3212,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c78) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e83); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3196,7 +3231,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f71(); + s0 = peg$f72(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3215,11 +3250,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c80) { + if (s1.toLowerCase() === peg$c81) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e87); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3234,7 +3269,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f72(); + s0 = peg$f73(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3252,11 +3287,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c82) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e87); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3271,7 +3306,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f73(); + s0 = peg$f74(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3289,11 +3324,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 22); - if (s1.toLowerCase() === peg$c82) { + if (s1.toLowerCase() === peg$c83) { peg$currPos += 22; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e88); } + if (peg$silentFails === 0) { peg$fail(peg$e89); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3308,7 +3343,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f74(); + s0 = peg$f75(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3326,11 +3361,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c84) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e89); } + if (peg$silentFails === 0) { peg$fail(peg$e90); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3345,7 +3380,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f75(); + s0 = peg$f76(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3363,11 +3398,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c84) { + if (s1.toLowerCase() === peg$c85) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e90); } + if (peg$silentFails === 0) { peg$fail(peg$e91); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3382,7 +3417,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f76(); + s0 = peg$f77(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3400,11 +3435,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c85) { + if (s1.toLowerCase() === peg$c86) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e91); } + if (peg$silentFails === 0) { peg$fail(peg$e92); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3419,7 +3454,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f77(); + s0 = peg$f78(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3437,11 +3472,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c86) { + if (s1.toLowerCase() === peg$c87) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e92); } + if (peg$silentFails === 0) { peg$fail(peg$e93); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3456,7 +3491,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f78(); + s0 = peg$f79(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3474,11 +3509,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c88) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e93); } + if (peg$silentFails === 0) { peg$fail(peg$e94); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3493,7 +3528,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f79(); + s0 = peg$f80(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3511,11 +3546,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c88) { + if (s1.toLowerCase() === peg$c89) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e94); } + if (peg$silentFails === 0) { peg$fail(peg$e95); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3530,7 +3565,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f80(); + s0 = peg$f81(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3548,11 +3583,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e95); } + if (peg$silentFails === 0) { peg$fail(peg$e96); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3567,7 +3602,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f81(); + s0 = peg$f82(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3585,11 +3620,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 19); - if (s1.toLowerCase() === peg$c90) { + if (s1.toLowerCase() === peg$c91) { peg$currPos += 19; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e96); } + if (peg$silentFails === 0) { peg$fail(peg$e97); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3604,7 +3639,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f82(); + s0 = peg$f83(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3622,11 +3657,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c91) { + if (s1.toLowerCase() === peg$c92) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e97); } + if (peg$silentFails === 0) { peg$fail(peg$e98); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3641,7 +3676,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f83(); + s0 = peg$f84(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3659,11 +3694,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c93) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e98); } + if (peg$silentFails === 0) { peg$fail(peg$e99); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3678,7 +3713,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f84(); + s0 = peg$f85(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3696,11 +3731,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c93) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e99); } + if (peg$silentFails === 0) { peg$fail(peg$e100); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3715,7 +3750,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f85(); + s0 = peg$f86(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3733,11 +3768,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c94) { + if (s1.toLowerCase() === peg$c95) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e100); } + if (peg$silentFails === 0) { peg$fail(peg$e101); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3752,7 +3787,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f86(); + s0 = peg$f87(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3770,11 +3805,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c95) { + if (s1.toLowerCase() === peg$c96) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e101); } + if (peg$silentFails === 0) { peg$fail(peg$e102); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3789,7 +3824,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f87(); + s0 = peg$f88(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3807,11 +3842,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c96) { + if (s1.toLowerCase() === peg$c97) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e102); } + if (peg$silentFails === 0) { peg$fail(peg$e103); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3826,7 +3861,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f88(); + s0 = peg$f89(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3844,11 +3879,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c97) { + if (s1.toLowerCase() === peg$c98) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e103); } + if (peg$silentFails === 0) { peg$fail(peg$e104); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3863,7 +3898,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f89(); + s0 = peg$f90(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3886,81 +3921,81 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e84); } + if (peg$silentFails === 0) { peg$fail(peg$e85); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f90(); + s1 = peg$f91(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c98) { - s1 = peg$c98; + if (input.substr(peg$currPos, 2) === peg$c99) { + s1 = peg$c99; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e105); } + if (peg$silentFails === 0) { peg$fail(peg$e106); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f91(); + s1 = peg$f92(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c99) { - s1 = peg$c99; + if (input.substr(peg$currPos, 2) === peg$c100) { + s1 = peg$c100; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e106); } + if (peg$silentFails === 0) { peg$fail(peg$e107); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f92(); + s1 = peg$f93(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c100; + s1 = peg$c101; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e107); } + if (peg$silentFails === 0) { peg$fail(peg$e108); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f93(); + s1 = peg$f94(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c101) { - s1 = peg$c101; + if (input.substr(peg$currPos, 2) === peg$c102) { + s1 = peg$c102; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e108); } + if (peg$silentFails === 0) { peg$fail(peg$e109); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f94(); + s1 = peg$f95(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c102; + s1 = peg$c103; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f95(); + s1 = peg$f96(); } s0 = s1; } @@ -3971,7 +4006,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e104); } + if (peg$silentFails === 0) { peg$fail(peg$e105); } } return s0; @@ -3984,7 +4019,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f96(s1); + s1 = peg$f97(s1); } s0 = s1; @@ -4002,7 +4037,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } if (s2 !== peg$FAILED) { while (s2 !== peg$FAILED) { @@ -4012,7 +4047,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } } } else { @@ -4020,13 +4055,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f97(s1); + s1 = peg$f98(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e110); } + if (peg$silentFails === 0) { peg$fail(peg$e111); } } return s0; @@ -4038,7 +4073,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f98(); + s1 = peg$f99(); s0 = s1; return s0; @@ -4054,7 +4089,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -4063,12 +4098,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e112); } + if (peg$silentFails === 0) { peg$fail(peg$e113); } return s0; } @@ -4078,7 +4113,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f99(); + s1 = peg$f100(); if (s1) { s1 = undefined; } else { @@ -4115,7 +4150,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4124,7 +4159,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } } s2 = input.charAt(peg$currPos); @@ -4132,7 +4167,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4141,7 +4176,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -4150,7 +4185,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } } s4 = input.charAt(peg$currPos); @@ -4158,7 +4193,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s4 !== peg$FAILED) { s5 = []; @@ -4167,7 +4202,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -4176,11 +4211,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } } peg$savedPos = s0; - s0 = peg$f100(s1, s3, s5); + s0 = peg$f101(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4192,7 +4227,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } return s0; @@ -4209,7 +4244,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4218,7 +4253,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } } s2 = input.charAt(peg$currPos); @@ -4226,7 +4261,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4235,7 +4270,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4251,15 +4286,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c103; + s6 = peg$c104; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f101(s1); + s4 = peg$f102(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4282,15 +4317,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c104; + s6 = peg$c105; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f102(s1); + s4 = peg$f103(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4313,15 +4348,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c105; + s6 = peg$c106; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f103(s1); + s4 = peg$f104(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4340,7 +4375,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4356,15 +4391,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c103; + s6 = peg$c104; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f101(s1); + s4 = peg$f102(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4387,15 +4422,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c104; + s6 = peg$c105; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f102(s1); + s4 = peg$f103(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4418,15 +4453,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c105; + s6 = peg$c106; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f103(s1); + s4 = peg$f104(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4442,7 +4477,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f104(s1, s3, s4); + s0 = peg$f105(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4454,7 +4489,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } return s0; @@ -4469,7 +4504,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4507,7 +4542,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4516,7 +4551,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } } s2 = []; @@ -4525,7 +4560,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -4534,7 +4569,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } } s3 = []; @@ -4543,7 +4578,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -4552,7 +4587,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } } s4 = peg$parseoperator(); @@ -4571,7 +4606,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4580,7 +4615,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } } s2 = peg$currPos; @@ -4627,7 +4662,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e125); } + if (peg$silentFails === 0) { peg$fail(peg$e126); } } } } @@ -4643,7 +4678,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e126); } + if (peg$silentFails === 0) { peg$fail(peg$e127); } } if (s0 === peg$FAILED) { s0 = peg$currPos; diff --git a/src/libs/SearchParser/searchParser.peggy b/src/libs/SearchParser/searchParser.peggy index 697b3779f057..6b3df3a7a508 100644 --- a/src/libs/SearchParser/searchParser.peggy +++ b/src/libs/SearchParser/searchParser.peggy @@ -276,6 +276,7 @@ key "key" / to / taxRate / cardID + / bankAccount / from / attendee / payer diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index f51bebb4428c..eaf59716c165 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -45,6 +45,7 @@ import type { } from '@src/types/form/SearchAdvancedFiltersForm'; import type * as OnyxTypes from '@src/types/onyx'; import type {SearchDataTypes, SearchResultDataType} from '@src/types/onyx/SearchResults'; +import {getBankAccountSearchLabel, isBankAccountPartiallySetup} from './BankAccountUtils'; import {getCardFeedsForDisplay} from './CardFeedUtils'; import {getCardDescription} from './CardUtils'; import {convertToBackendAmount, convertToFrontendAmountAsInteger} from './CurrencyUtils'; @@ -969,6 +970,7 @@ function buildQueryStringFromFilterFormValues(filterValues: Partial, @@ -1108,6 +1112,7 @@ function buildFilterFormValuesFromQuery( taxRates: Record, exportedToFilterOptions?: string[], currentUserAccountID?: number, + bankAccountList?: OnyxTypes.BankAccountList, ) { const filters = queryJSON.flatFilters; const filtersForm = {} as Partial; @@ -1181,6 +1186,20 @@ function buildFilterFormValuesFromQuery( if (filterKey === CONST.SEARCH.SYNTAX_FILTER_KEYS.CARD_ID) { filtersForm[key as typeof filterKey] = filterValues.filter((card) => cardList?.[card]); } + if (filterKey === CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT) { + // Drop unknown IDs and partially-setup accounts (SETUP/VERIFYING/PENDING). The filter looks backward at + // withdrawals that already paid expenses, so a saved search should survive an account changing state + // (BUSINESS -> LOCKED, etc), but a partially-setup account has paid no expenses and can never match - + // keeping its ID would leave the chip visible while the picker hides it. When bankAccountList is still + // loading (undefined), keep the saved IDs as-is so useSearchFilterSync does not record an empty signature + // and skip the re-sync once Onyx hydrates. + filtersForm[key as typeof filterKey] = bankAccountList + ? filterValues.filter((bankAccountID) => { + const bankAccount = bankAccountList[bankAccountID]; + return !!bankAccount && !isBankAccountPartiallySetup(bankAccount.accountData?.state); + }) + : filterValues; + } if (filterKey === CONST.SEARCH.SYNTAX_FILTER_KEYS.FEED) { filtersForm[key as typeof filterKey] = filterValues.filter((feed) => feed); } @@ -1480,6 +1499,7 @@ type GetFilterDisplayValueParams = { translate: LocalizedTranslate; reportAttributes?: OnyxTypes.ReportAttributesDerivedValue['reports']; feedKeysWithCards?: FeedKeysWithAssignedCards; + bankAccountList?: OnyxTypes.BankAccountList; }; /** @@ -1497,6 +1517,7 @@ function getFilterDisplayValue({ translate, reportAttributes, feedKeysWithCards, + bankAccountList, }: GetFilterDisplayValueParams) { if ( filterName === CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM || @@ -1518,6 +1539,13 @@ function getFilterDisplayValue({ } return getCardDescription(cardList?.[cardID], translate) || filterValue; } + if (filterName === CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT) { + const bankAccount = bankAccountList?.[filterValue]; + if (!bankAccount) { + return filterValue; + } + return getBankAccountSearchLabel(bankAccount); + } if (filterName === CONST.SEARCH.SYNTAX_FILTER_KEYS.IN) { return getReportName(reports?.[`${ONYXKEYS.COLLECTION.REPORT}${filterValue}`], reportAttributes) || filterValue; } @@ -1562,6 +1590,7 @@ function getDisplayQueryFiltersForKey( translate: LocalizedTranslate, reportAttributes?: OnyxTypes.ReportAttributesDerivedValue['reports'], feedKeysWithCards?: FeedKeysWithAssignedCards, + bankAccountList?: OnyxTypes.BankAccountList, ) { if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.TAX_RATE) { const taxRateIDs = queryFilter.map((filter) => filter.value.toString()); @@ -1613,6 +1642,26 @@ function getDisplayQueryFiltersForKey( }, [] as QueryFilter[]); } + if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT) { + return queryFilter.map((filter) => ({ + operator: filter.operator, + value: getFilterDisplayValue({ + filterName: key, + filterValue: filter.value.toString(), + personalDetails, + reports, + cardList, + cardFeeds, + policies, + currentUserAccountID, + translate, + reportAttributes, + feedKeysWithCards, + bankAccountList, + }), + })); + } + return queryFilter.map((filter) => ({ operator: filter.operator, value: getFilterDisplayValue({ @@ -1627,6 +1676,7 @@ function getDisplayQueryFiltersForKey( translate, reportAttributes, feedKeysWithCards, + bankAccountList, }), })); } @@ -1706,6 +1756,7 @@ type BuildUserReadableQueryStringParams = { translate: LocalizedTranslate; feedKeysWithCards?: FeedKeysWithAssignedCards; reportAttributes: OnyxTypes.ReportAttributesDerivedValue['reports'] | undefined; + bankAccountList?: OnyxTypes.BankAccountList; }; function buildUserReadableQueryString({ @@ -1721,6 +1772,7 @@ function buildUserReadableQueryString({ translate, feedKeysWithCards, reportAttributes, + bankAccountList, }: BuildUserReadableQueryStringParams) { const {type, status, groupBy, view, columns, policyID, rawFilterList, flatFilters: filters = [], limit} = queryJSON; @@ -1766,6 +1818,7 @@ function buildUserReadableQueryString({ translate, reportAttributes, feedKeysWithCards, + bankAccountList, ); if (!displayQueryFilters.length) { @@ -1820,6 +1873,7 @@ function buildUserReadableQueryString({ translate, reportAttributes, feedKeysWithCards, + bankAccountList, ); if (!displayQueryFilters.length) { diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index e376e160f0ea..18ef13fc5e83 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -5001,6 +5001,10 @@ const FILTER_VIEW_MAP = { labelKey: 'iou.attendees', icon: 'Users', }, + [CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT]: { + labelKey: 'common.bankAccount', + icon: 'Bank', + }, [CONST.SEARCH.SYNTAX_FILTER_KEYS.BILLABLE]: { labelKey: 'search.filters.billable', icon: 'Paycheck', @@ -5331,7 +5335,15 @@ function getDisplayValue( return formValue?.map((option) => translate(`common.${option}`)).join(', '); } - if (key === FILTER_KEYS.FROM || key === FILTER_KEYS.TO || key === FILTER_KEYS.ATTENDEE || key === FILTER_KEYS.ASSIGNEE || key === FILTER_KEYS.TAX_RATE || key === FILTER_KEYS.IN) { + if ( + key === FILTER_KEYS.FROM || + key === FILTER_KEYS.TO || + key === FILTER_KEYS.ATTENDEE || + key === FILTER_KEYS.ASSIGNEE || + key === FILTER_KEYS.TAX_RATE || + key === FILTER_KEYS.IN || + key === FILTER_KEYS.BANK_ACCOUNT + ) { return form[key]; } diff --git a/src/pages/Search/SavedSearchList.tsx b/src/pages/Search/SavedSearchList.tsx index 04c4ea535461..41a51231f12e 100644 --- a/src/pages/Search/SavedSearchList.tsx +++ b/src/pages/Search/SavedSearchList.tsx @@ -110,6 +110,7 @@ function SavedSearchList({hash, areAllSectionsExpanded}: SavedSearchListProps) { const [workspaceCardList] = useOnyx(ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST); const [reports] = useOnyx(ONYXKEYS.COLLECTION.REPORT); const [allFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER); + const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); const feedKeysWithCards = useFeedKeysWithAssignedCards(); const [currentUserAccountID = -1] = useOnyx(ONYXKEYS.SESSION, {selector: accountIDSelector}); const reportAttributes = useReportAttributes(); @@ -139,6 +140,7 @@ function SavedSearchList({hash, areAllSectionsExpanded}: SavedSearchListProps) { translate, feedKeysWithCards, reportAttributes, + bankAccountList, }); const getOverflowMenu = (itemName: string, itemHash: number, itemQuery: string) => diff --git a/src/pages/Search/SearchSavePage.tsx b/src/pages/Search/SearchSavePage.tsx index b39f3422d764..1befef88e66c 100644 --- a/src/pages/Search/SearchSavePage.tsx +++ b/src/pages/Search/SearchSavePage.tsx @@ -5,6 +5,7 @@ import InputWrapper from '@components/Form/InputWrapper'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import type {LocalizedTranslate} from '@components/LocaleContextProvider'; import ScreenWrapper from '@components/ScreenWrapper'; +import useFilterBankAccountValue from '@components/Search/hooks/useFilterBankAccountValue'; import useFilterCardValue from '@components/Search/hooks/useFilterCardValue'; import useFilterFeedValue from '@components/Search/hooks/useFilterFeedValue'; import useFilterReportValue from '@components/Search/hooks/useFilterReportValue'; @@ -62,6 +63,10 @@ function FilterReportValue({value}: FilterValueProps) { return useFilterReportValue(value); } +function FilterBankAccountValue({value}: FilterValueProps) { + return useFilterBankAccountValue(value); +} + function FilterValue({filterKey, value}: FilterValueWithKeyProps) { if ( filterKey === CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM || @@ -92,6 +97,10 @@ function FilterValue({filterKey, value}: FilterValueWithKeyProps) { return ; } + if (filterKey === CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT) { + return ; + } + return value; } diff --git a/src/pages/Search/SearchTypeMenuNarrow.tsx b/src/pages/Search/SearchTypeMenuNarrow.tsx index cefced738a69..441e48296724 100644 --- a/src/pages/Search/SearchTypeMenuNarrow.tsx +++ b/src/pages/Search/SearchTypeMenuNarrow.tsx @@ -90,6 +90,7 @@ function SearchTypeMenuNarrow({queryJSON, onTabPress}: SearchTypeMenuNarrowProps const [allFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER); const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); const [cardList] = useOnyx(ONYXKEYS.CARD_LIST); + const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); const [workspaceCardList] = useOnyx(ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST); const [savedSearches] = useOnyx(ONYXKEYS.SAVED_SEARCHES); const [reportCounts = CONST.EMPTY_TODOS_REPORT_COUNTS] = useOnyx(ONYXKEYS.DERIVED.TODOS, {selector: todosReportCountsSelector}); @@ -110,6 +111,7 @@ function SearchTypeMenuNarrow({queryJSON, onTabPress}: SearchTypeMenuNarrowProps translate, feedKeysWithCards, reportAttributes, + bankAccountList, enabled: !!queryJSON, }); diff --git a/src/pages/Search/hooks/useSavedSearchTitles.ts b/src/pages/Search/hooks/useSavedSearchTitles.ts index 12393e79f52f..5b2d68ae88eb 100644 --- a/src/pages/Search/hooks/useSavedSearchTitles.ts +++ b/src/pages/Search/hooks/useSavedSearchTitles.ts @@ -16,7 +16,7 @@ function useSavedSearchTitles({savedSearches, translate, enabled = true, ...rest // `savedSearches` drives which items appear in the list — deferring it would cause a flash // `translate` is a stable function reference that never triggers heavy re-computation on its own. const deferredRest = useDeferredValue(rest); - const {PersonalDetails, reports, taxRates, cardList, cardFeeds, policies, currentUserAccountID, feedKeysWithCards, reportAttributes} = deferredRest; + const {PersonalDetails, reports, taxRates, cardList, cardFeeds, policies, currentUserAccountID, feedKeysWithCards, reportAttributes, bankAccountList} = deferredRest; const titles = new Map(); @@ -47,6 +47,7 @@ function useSavedSearchTitles({savedSearches, translate, enabled = true, ...rest translate, feedKeysWithCards, reportAttributes, + bankAccountList, }); titles.set(item.query, title); } diff --git a/src/types/form/SearchAdvancedFiltersForm.ts b/src/types/form/SearchAdvancedFiltersForm.ts index 96cd7d232484..6ac6a91e5108 100644 --- a/src/types/form/SearchAdvancedFiltersForm.ts +++ b/src/types/form/SearchAdvancedFiltersForm.ts @@ -96,6 +96,9 @@ const FILTER_KEYS = { FEED_NOT: 'feedNot', FEED: 'feed', + BANK_ACCOUNT_NOT: 'bankAccountNot', + BANK_ACCOUNT: 'bankAccount', + MERCHANT_NOT: 'merchantNot', MERCHANT: 'merchant', @@ -233,6 +236,8 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.CARD_ID_NOT, FILTER_KEYS.FEED, FILTER_KEYS.FEED_NOT, + FILTER_KEYS.BANK_ACCOUNT, + FILTER_KEYS.BANK_ACCOUNT_NOT, FILTER_KEYS.POSTED_AFTER, FILTER_KEYS.POSTED_BEFORE, FILTER_KEYS.POSTED_ON, @@ -674,6 +679,9 @@ type SearchAdvancedFiltersForm = Form< [FILTER_KEYS.FEED]: string[]; [FILTER_KEYS.FEED_NOT]: string[]; + [FILTER_KEYS.BANK_ACCOUNT]: string[]; + [FILTER_KEYS.BANK_ACCOUNT_NOT]: string[]; + [FILTER_KEYS.MERCHANT]: string; [FILTER_KEYS.MERCHANT_NOT]: string; diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index 68aefe1288ca..87b4f24be70b 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -2788,6 +2788,50 @@ describe('SearchQueryUtils', () => { expect(result).toBe('GL:travel'); }); + + it('should format bankAccount filter as " xx" using bankAccountList', () => { + const bankAccountList: OnyxTypes.BankAccountList = { + 42: { + accountData: { + bankAccountID: 42, + accountNumber: '123456789012', + additionalData: {bankName: CONST.BANK_NAMES.CHASE}, + }, + } as OnyxTypes.BankAccountList[string], + }; + + const result = getFilterDisplayValue({ + filterName: CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT, + filterValue: '42', + personalDetails: {}, + reports: {}, + cardList: mockCardList, + cardFeeds: mockCardFeeds, + policies: mockPolicies, + currentUserAccountID, + translate: translateLocal, + bankAccountList, + }); + + expect(result).toBe('Chase xx9012'); + }); + + it('should return the bankAccountID when no matching bank account is found', () => { + const result = getFilterDisplayValue({ + filterName: CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT, + filterValue: '99', + personalDetails: {}, + reports: {}, + cardList: mockCardList, + cardFeeds: mockCardFeeds, + policies: mockPolicies, + currentUserAccountID, + translate: translateLocal, + bankAccountList: {}, + }); + + expect(result).toBe('99'); + }); }); describe('getDisplayQueryFiltersForKey', () => { diff --git a/tests/unit/SearchAutocompleteParserTest.ts b/tests/unit/SearchAutocompleteParserTest.ts index 3902e20f1a5d..d0395abd9482 100644 --- a/tests/unit/SearchAutocompleteParserTest.ts +++ b/tests/unit/SearchAutocompleteParserTest.ts @@ -297,6 +297,13 @@ const tests = [ ranges: [{key: 'expenseType', value: 'per-diem', negated: false, start: 13, length: 8}], }, }, + { + query: 'bankAccount:42', + expected: { + autocomplete: {key: 'bankAccount', value: '42', start: 12, length: 2, negated: false}, + ranges: [{key: 'bankAccount', value: '42', negated: false, start: 12, length: 2}], + }, + }, { query: 'receipt-type:ereceipt', expected: { diff --git a/tests/unit/SearchAutocompleteUtilsTest.ts b/tests/unit/SearchAutocompleteUtilsTest.ts index 5683689297f6..f55979691e69 100644 --- a/tests/unit/SearchAutocompleteUtilsTest.ts +++ b/tests/unit/SearchAutocompleteUtilsTest.ts @@ -300,6 +300,27 @@ describe('SearchAutocompleteUtils', () => { expect(result).toEqual([]); }); + it('should highlight bankAccount filter when value is in substitution map', () => { + const input = 'bankAccount:Chase'; + const substitutionMapWithBankAccount: SubstitutionMap = { + ...mockSubstitutionMap, + // eslint-disable-next-line @typescript-eslint/naming-convention + 'bankAccount:Chase': '42', + }; + + const result = parseForLiveMarkdown(input, currentUserName, substitutionMapWithBankAccount, mockUserLogins, mockCurrencyList, mockCategoryList, mockTagList, mockExportedToList); + + expect(result).toEqual([{start: 12, type: 'mention-user', length: 5}]); + }); + + it('should not highlight bankAccount filter when value is missing from substitution map', () => { + const input = 'bankAccount:99'; + + const result = parseForLiveMarkdown(input, currentUserName, mockSubstitutionMap, mockUserLogins, mockCurrencyList, mockCategoryList, mockTagList, mockExportedToList); + + expect(result).toEqual([]); + }); + describe('limit filter highlighting', () => { it('highlights valid positive integer', () => { const input = 'limit:10'; diff --git a/tests/unit/SearchParserTest.ts b/tests/unit/SearchParserTest.ts index d798c5cec9de..8680fd85dbb3 100644 --- a/tests/unit/SearchParserTest.ts +++ b/tests/unit/SearchParserTest.ts @@ -844,6 +844,36 @@ const tests = [ }, }, }, + { + query: 'bankAccount:42', + expected: { + type: 'expense', + status: CONST.SEARCH.STATUS.EXPENSE.ALL, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT, + right: '42', + }, + }, + }, + { + query: 'bankAccount:42,99', + expected: { + type: 'expense', + status: CONST.SEARCH.STATUS.EXPENSE.ALL, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT, + right: ['42', '99'], + }, + }, + }, ]; /* diff --git a/tests/unit/hooks/useAdvancedSearchFilters.test.ts b/tests/unit/hooks/useAdvancedSearchFilters.test.ts index 5c1e17e8bd22..6ae232b9aad0 100644 --- a/tests/unit/hooks/useAdvancedSearchFilters.test.ts +++ b/tests/unit/hooks/useAdvancedSearchFilters.test.ts @@ -403,6 +403,127 @@ describe('useAdvancedSearchFilters', () => { }); }); + describe('bank account filter visibility', () => { + it('hides bank account filter when no bank accounts exist', async () => { + const {result} = renderHook(() => useAdvancedSearchFilters(undefined, undefined), {wrapper}); + + await waitFor(() => { + const allKeys = result.current.flat(); + expect(allKeys).not.toContain(CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT); + }); + }); + + it('shows bank account filter for expense type when at least one settlement-eligible bank account exists', async () => { + const bankAccountID = 42; + await Onyx.merge(ONYXKEYS.BANK_ACCOUNT_LIST, { + [bankAccountID]: { + accountData: { + bankAccountID, + accountNumber: '123456789012', + type: CONST.BANK_ACCOUNT.TYPE.BUSINESS, + state: CONST.BANK_ACCOUNT.STATE.OPEN, + additionalData: {bankName: CONST.BANK_NAMES.CHASE}, + }, + }, + }); + + const {result} = renderHook(() => useAdvancedSearchFilters(undefined, undefined), {wrapper}); + + await waitFor(() => { + const allKeys = result.current.flat(); + expect(allKeys).toContain(CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT); + }); + }); + + it('hides bank account filter when only personal deposit accounts are present', async () => { + const bankAccountID = 42; + await Onyx.merge(ONYXKEYS.BANK_ACCOUNT_LIST, { + [bankAccountID]: { + accountData: { + bankAccountID, + accountNumber: '123456789012', + type: CONST.BANK_ACCOUNT.TYPE.PERSONAL, + state: CONST.BANK_ACCOUNT.STATE.OPEN, + additionalData: {bankName: CONST.BANK_NAMES.CHASE}, + }, + }, + }); + + const {result} = renderHook(() => useAdvancedSearchFilters(undefined, undefined), {wrapper}); + + await waitFor(() => { + const allKeys = result.current.flat(); + expect(allKeys).not.toContain(CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT); + }); + }); + + it('shows bank account filter when business accounts are LOCKED so historical expenses paid from a closed account stay searchable', async () => { + const bankAccountID = 42; + await Onyx.merge(ONYXKEYS.BANK_ACCOUNT_LIST, { + [bankAccountID]: { + accountData: { + bankAccountID, + accountNumber: '123456789012', + type: CONST.BANK_ACCOUNT.TYPE.BUSINESS, + state: CONST.BANK_ACCOUNT.STATE.LOCKED, + additionalData: {bankName: CONST.BANK_NAMES.CHASE}, + }, + }, + }); + + const {result} = renderHook(() => useAdvancedSearchFilters(undefined, undefined), {wrapper}); + + await waitFor(() => { + const allKeys = result.current.flat(); + expect(allKeys).toContain(CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT); + }); + }); + + it('hides bank account filter when the only business account is in a partial-setup state (SETUP / VERIFYING / PENDING) since it has paid no expenses', async () => { + const bankAccountID = 42; + await Onyx.merge(ONYXKEYS.BANK_ACCOUNT_LIST, { + [bankAccountID]: { + accountData: { + bankAccountID, + accountNumber: '123456789012', + type: CONST.BANK_ACCOUNT.TYPE.BUSINESS, + state: CONST.BANK_ACCOUNT.STATE.PENDING, + additionalData: {bankName: CONST.BANK_NAMES.CHASE}, + }, + }, + }); + + const {result} = renderHook(() => useAdvancedSearchFilters(undefined, undefined), {wrapper}); + + await waitFor(() => { + const allKeys = result.current.flat(); + expect(allKeys).not.toContain(CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT); + }); + }); + + it('does not include bank account filter for non-expense types even when settlement-eligible accounts exist', async () => { + const bankAccountID = 42; + await Onyx.merge(ONYXKEYS.BANK_ACCOUNT_LIST, { + [bankAccountID]: { + accountData: { + bankAccountID, + accountNumber: '123456789012', + type: CONST.BANK_ACCOUNT.TYPE.BUSINESS, + state: CONST.BANK_ACCOUNT.STATE.OPEN, + additionalData: {bankName: CONST.BANK_NAMES.CHASE}, + }, + }, + }); + + const {result} = renderHook(() => useAdvancedSearchFilters(CONST.SEARCH.DATA_TYPES.CHAT, undefined), {wrapper}); + + await waitFor(() => { + const allKeys = result.current.flat(); + expect(allKeys).not.toContain(CONST.SEARCH.SYNTAX_FILTER_KEYS.BANK_ACCOUNT); + }); + }); + }); + describe('cross-feature interaction', () => { it('shows multiple filters when multiple features are enabled', async () => { const policy = buildPolicy(1, {