diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 24f59d7d8175..a5a1d696240a 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -8008,6 +8008,7 @@ const CONST = { WEEK: 'week', YEAR: 'year', QUARTER: 'quarter', + APPROVER: 'approver', }, /** * Single source of truth for which transaction-level columns are available in each column-picker surface: @@ -8335,6 +8336,12 @@ const CONST = { EXPENSES: this.TABLE_COLUMNS.GROUP_EXPENSES, TOTAL: this.TABLE_COLUMNS.GROUP_TOTAL, }, + APPROVER: { + AVATAR: this.TABLE_COLUMNS.AVATAR, + APPROVER: this.TABLE_COLUMNS.GROUP_APPROVER, + EXPENSES: this.TABLE_COLUMNS.GROUP_EXPENSES, + TOTAL: this.TABLE_COLUMNS.GROUP_TOTAL, + }, }; }, get TYPE_DEFAULT_COLUMNS() { @@ -8388,6 +8395,7 @@ const CONST = { WEEK: [this.TABLE_COLUMNS.GROUP_WEEK, this.TABLE_COLUMNS.GROUP_EXPENSES, this.TABLE_COLUMNS.GROUP_TOTAL], YEAR: [this.TABLE_COLUMNS.GROUP_YEAR, this.TABLE_COLUMNS.GROUP_EXPENSES, this.TABLE_COLUMNS.GROUP_TOTAL], QUARTER: [this.TABLE_COLUMNS.GROUP_QUARTER, this.TABLE_COLUMNS.GROUP_EXPENSES, this.TABLE_COLUMNS.GROUP_TOTAL], + APPROVER: [this.TABLE_COLUMNS.AVATAR, this.TABLE_COLUMNS.GROUP_APPROVER, this.TABLE_COLUMNS.GROUP_EXPENSES, this.TABLE_COLUMNS.GROUP_TOTAL], }; }, BOOLEAN: { @@ -8508,6 +8516,7 @@ const CONST = { GROUP_WITHDRAWAL_STATUS: 'groupWithdrawalStatus', GROUP_AMOUNT_DEBITED: 'groupAmountDebited', GROUP_AMOUNT_REIMBURSED: 'groupAmountReimbursed', + GROUP_APPROVER: 'groupApprover', }, SYNTAX_OPERATORS: { AND: 'and', @@ -8616,6 +8625,7 @@ const CONST = { SUBMITTER_USER_ID: 'submitterUserID', SUBMITTER_PAYROLL_ID: 'submitterPayrollID', ORDER_DEAL_NUMBERS: 'orderDealNumbers', + APPROVER: 'approver', // The Spend footer's display selections. They travel as filters because that is where the backend reads // them from, but they never narrow the result set: only `footerTotal` changes the response, by swapping // which aggregate comes back as the search total. @@ -8708,6 +8718,7 @@ const CONST = { SUBMITTER_USER_ID: 'submitter-user-id', SUBMITTER_PAYROLL_ID: 'submitter-payroll-id', ORDER_DEAL_NUMBERS: 'order-deal-numbers', + APPROVER: 'approver', COLUMNS: 'columns', LIMIT: 'limit', FOOTER_COUNT: 'footer-count', @@ -8785,6 +8796,7 @@ const CONST = { [this.TABLE_COLUMNS.GROUP_WITHDRAWAL_STATUS]: 'group-withdrawal-status', [this.TABLE_COLUMNS.GROUP_AMOUNT_DEBITED]: 'group-amount-debited', [this.TABLE_COLUMNS.GROUP_AMOUNT_REIMBURSED]: 'group-amount-reimbursed', + [this.TABLE_COLUMNS.GROUP_APPROVER]: 'group-approver', [this.TABLE_COLUMNS.AMOUNT_DEBITED]: 'amount-debited', [this.TABLE_COLUMNS.AMOUNT_REIMBURSED]: 'amount-reimbursed', }; diff --git a/src/components/Search/SearchList/ListItem/ApproverListItemHeader.tsx b/src/components/Search/SearchList/ListItem/ApproverListItemHeader.tsx new file mode 100644 index 000000000000..d27a98a00421 --- /dev/null +++ b/src/components/Search/SearchList/ListItem/ApproverListItemHeader.tsx @@ -0,0 +1,192 @@ +import UserAvatar from '@components/Avatar/UserAvatar'; +import Checkbox from '@components/Checkbox'; +import type {SearchColumnType} from '@components/Search/types'; +import type {ListItem} from '@components/SelectionList/types'; +import TextWithTooltip from '@components/TextWithTooltip'; +import UserDetailsTooltip from '@components/UserDetailsTooltip'; + +import useLocalize from '@hooks/useLocalize'; +import useStyleUtils from '@hooks/useStyleUtils'; +import useThemeStyles from '@hooks/useThemeStyles'; + +import {temporaryGetDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; + +import CONST from '@src/CONST'; + +import type {ReactNode} from 'react'; + +import React from 'react'; +import {View} from 'react-native'; + +import type {TransactionApproverGroupListItemType} from './types'; + +import ExpandCollapseArrowButton from './ExpandCollapseArrowButton'; +import TextCell from './TextCell'; +import TotalCell from './TotalCell'; + +type ApproverListItemHeaderProps = { + approver: TransactionApproverGroupListItemType; + onCheckboxPress?: (item: ListItem) => void; + + /** Whether this section items disabled for selection */ + isDisabled?: boolean | null; + + /** Whether selecting multiple transactions at once is allowed */ + canSelectMultiple: boolean | undefined; + + /** Whether all transactions are selected */ + isSelectAllChecked?: boolean; + + /** Whether only some transactions are selected */ + isIndeterminate?: boolean; + + onDownArrowClick?: () => void; + + /** Whether the down arrow is expanded */ + isExpanded?: boolean; + + /** The visible columns for the header */ + columns?: SearchColumnType[]; + + isLargeScreenWidth?: boolean; +}; + +/** + * Kept non-generic so OXC's React Compiler can memoize the component. + * OXC bails on type params inside components ("Unsupported declaration type for hoisting"). + */ +function ApproverListItemHeader({ + approver: approverItem, + onCheckboxPress, + isDisabled, + canSelectMultiple, + isSelectAllChecked, + isIndeterminate, + isExpanded, + onDownArrowClick, + columns, + isLargeScreenWidth, +}: ApproverListItemHeaderProps) { + const styles = useThemeStyles(); + const StyleUtils = useStyleUtils(); + const {translate, formatPhoneNumber} = useLocalize(); + const formattedDisplayName = temporaryGetDisplayNameOrDefault({ + passedPersonalDetails: approverItem, + translate, + formatPhoneNumber, + }); + const formattedLogin = formatPhoneNumber(approverItem.login ?? ''); + + const columnComponents: Partial> = { + [CONST.SEARCH.TABLE_COLUMNS.AVATAR]: ( + + + + + + + + ), + [CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER]: ( + + + + + + + ), + [CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES]: ( + + + + ), + [CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]: ( + + + + ), + }; + + return ( + + + + {!!canSelectMultiple && ( + onCheckboxPress?.(approverItem)} + isChecked={isSelectAllChecked} + isIndeterminate={isIndeterminate} + disabled={!!isDisabled || approverItem.isDisabledCheckbox} + accessibilityLabel={translate('common.select')} + containerStyle={styles.m0} + /> + )} + {!isLargeScreenWidth && ( + + + + + + + + + + + + )} + {!!isLargeScreenWidth && columns?.map((column) => columnComponents[column])} + + {!isLargeScreenWidth && ( + + + {!!onDownArrowClick && ( + + )} + + )} + + + ); +} + +export default ApproverListItemHeader; diff --git a/src/components/Search/SearchList/ListItem/GroupHeader.tsx b/src/components/Search/SearchList/ListItem/GroupHeader.tsx index 5040e99da0dd..3ddecf4fc79c 100644 --- a/src/components/Search/SearchList/ListItem/GroupHeader.tsx +++ b/src/components/Search/SearchList/ListItem/GroupHeader.tsx @@ -46,6 +46,7 @@ import Animated from 'react-native-reanimated'; import type {GroupHeaderItemType, SearchListActionProps, SearchListItem, TransactionListItemType} from './types'; +import ApproverListItemHeader from './ApproverListItemHeader'; import CardListItemHeader from './CardListItemHeader'; import CategoryListItemHeader from './CategoryListItemHeader'; import DayListItemHeader from './DayListItemHeader'; @@ -322,6 +323,14 @@ function GroupHeader({ {...commonProps} /> ); + case CONST.SEARCH.GROUP_BY.APPROVER: + return ( + + ); default: return null; } diff --git a/src/components/Search/SearchList/ListItem/TransactionGroupListItem.tsx b/src/components/Search/SearchList/ListItem/TransactionGroupListItem.tsx index 195d2285e7e8..f26cf203c6c7 100644 --- a/src/components/Search/SearchList/ListItem/TransactionGroupListItem.tsx +++ b/src/components/Search/SearchList/ListItem/TransactionGroupListItem.tsx @@ -22,7 +22,7 @@ import type {TransactionPreviewData} from '@libs/actions/Search'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; import type {ModifiedMouseEvent} from '@libs/Navigation/helpers/openInternalRouteInNewTab'; import {getLoginByAccountID} from '@libs/PersonalDetailsUtils'; -import {isCashBackWithdrawalGroup, isTransactionDayGroupListItemType} from '@libs/SearchUIUtils'; +import {isCashBackWithdrawalGroup, isTransactionApproverGroupListItemType, isTransactionDayGroupListItemType} from '@libs/SearchUIUtils'; import {COPYABLE_ROW_DATA_SET} from '@libs/SelectionScraper'; import {getVisibleTransactionViolations, isTransactionPendingDelete} from '@libs/TransactionUtils'; @@ -59,6 +59,7 @@ import type { TransactionYearGroupListItemType, } from './types'; +import ApproverListItemHeader from './ApproverListItemHeader'; import CardListItemHeader from './CardListItemHeader'; import CategoryListItemHeader from './CategoryListItemHeader'; import DayListItemHeader from './DayListItemHeader'; @@ -482,6 +483,25 @@ function TransactionGroupListItemImpl({ isExpanded={isExpanded} /> ), + [CONST.SEARCH.GROUP_BY.APPROVER]: (() => { + if (!isTransactionApproverGroupListItemType(groupItem)) { + return null; + } + return ( + + ); + })(), }; if (searchType === CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT) { diff --git a/src/components/Search/SearchList/ListItem/types.ts b/src/components/Search/SearchList/ListItem/types.ts index 69bc088aa173..0be09275ed04 100644 --- a/src/components/Search/SearchList/ListItem/types.ts +++ b/src/components/Search/SearchList/ListItem/types.ts @@ -23,6 +23,7 @@ import type { import type {Attendee} from '@src/types/onyx/IOU'; import type {Errors, Icon} from '@src/types/onyx/OnyxCommon'; import type { + SearchApproverGroup, SearchCardGroup, SearchCategoryGroup, SearchDataTypes, @@ -494,6 +495,12 @@ type TransactionQuarterGroupListItemType = TransactionGroupListItemType & {group sortKey: number; }; +type TransactionApproverGroupListItemType = TransactionGroupListItemType & {groupedBy: typeof CONST.SEARCH.GROUP_BY.APPROVER} & PersonalDetails & + SearchApproverGroup & { + /** Final and formatted approver name used for displaying and sorting */ + formattedApprover?: string; + }; + type TransactionListItemProps = ListItemProps & SearchListActionProps & { /** Whether the item's action is loading */ @@ -566,6 +573,7 @@ type GroupHeaderItemType = | (TransactionWeekGroupListItemType & GroupHeaderListItemType) | (TransactionYearGroupListItemType & GroupHeaderListItemType) | (TransactionQuarterGroupListItemType & GroupHeaderListItemType) + | (TransactionApproverGroupListItemType & GroupHeaderListItemType) | (TransactionGroupListItemType & GroupHeaderListItemType); type GroupChildrenContainerItemType = TransactionGroupListItemType & { @@ -623,6 +631,7 @@ export type { TransactionWeekGroupListItemType, TransactionYearGroupListItemType, TransactionQuarterGroupListItemType, + TransactionApproverGroupListItemType, TransactionWithdrawalIDGroupListItemType, TransactionGroupListItemProps, TransactionGroupListExpandedProps, diff --git a/src/components/Search/SearchTableHeader.tsx b/src/components/Search/SearchTableHeader.tsx index 82029790529d..f6feb1ef8e61 100644 --- a/src/components/Search/SearchTableHeader.tsx +++ b/src/components/Search/SearchTableHeader.tsx @@ -517,6 +517,21 @@ const getTransactionGroupHeaders = (groupBy: SearchGroupBy, icons: SearchHeaderI }, ...commonGroupHeaders, ]; + case CONST.SEARCH.GROUP_BY.APPROVER: + return [ + { + columnName: CONST.SEARCH.TABLE_COLUMNS.AVATAR, + translationKey: undefined, + icon: icons.Profile, + isColumnSortable: false, + }, + { + columnName: CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER, + translationKey: 'search.filters.groupBy.approver', + isColumnSortable: true, + }, + ...commonGroupHeaders, + ]; default: return []; } diff --git a/src/components/Search/chartGroupByConfig.ts b/src/components/Search/chartGroupByConfig.ts index ce188f09e56b..2e3282d96a21 100644 --- a/src/components/Search/chartGroupByConfig.ts +++ b/src/components/Search/chartGroupByConfig.ts @@ -135,6 +135,11 @@ const CHART_GROUP_BY_CONFIG: Record = { }, getDateRange: (item: GroupedItem) => (item.groupedBy === CONST.SEARCH.GROUP_BY.QUARTER ? DateUtils.getQuarterDateRange(item.year, item.quarter) : undefined), }, + [CONST.SEARCH.GROUP_BY.APPROVER]: { + titleIconName: 'Users', + getLabel: (item: GroupedItem) => (item.groupedBy === CONST.SEARCH.GROUP_BY.APPROVER ? (item.formattedApprover ?? '') : ''), + getFilterQuery: (item: GroupedItem) => (item.groupedBy === CONST.SEARCH.GROUP_BY.APPROVER ? `${CONST.SEARCH.GROUP_BY.APPROVER}:${item.accountID}` : ''), + }, }; export default CHART_GROUP_BY_CONFIG; diff --git a/src/components/Search/hooks/useGroupedItems.ts b/src/components/Search/hooks/useGroupedItems.ts index 977460020820..7989c9b962ac 100644 --- a/src/components/Search/hooks/useGroupedItems.ts +++ b/src/components/Search/hooks/useGroupedItems.ts @@ -31,7 +31,8 @@ function useGroupedItems(searchResults: OnyxEntry, queryJSON: Rea const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); const [rules] = useOnyx(ONYXKEYS.COLLECTION.RULE); const groupBy = queryJSON?.groupBy; - const [onyxPersonalDetailsList] = usePersonalDetailsByIDs(groupBy === CONST.SEARCH.GROUP_BY.FROM ? getGroupedAccountIDs(searchResults?.data) : undefined); + const shouldLoadGroupPersonalDetails = groupBy === CONST.SEARCH.GROUP_BY.FROM || groupBy === CONST.SEARCH.GROUP_BY.APPROVER; + const [onyxPersonalDetailsList] = usePersonalDetailsByIDs(shouldLoadGroupPersonalDetails ? getGroupedAccountIDs(searchResults?.data) : undefined); const sortedSections = searchResults?.data && queryJSON && groupBy && login diff --git a/src/components/Search/hooks/useUpdateFilterQuery.tsx b/src/components/Search/hooks/useUpdateFilterQuery.tsx index 810496cb6230..7cdba38f6303 100644 --- a/src/components/Search/hooks/useUpdateFilterQuery.tsx +++ b/src/components/Search/hooks/useUpdateFilterQuery.tsx @@ -51,14 +51,24 @@ function useUpdateFilterQuery(queryJSON: SearchQueryJSON | undefined) { const shouldResetSearchKey = !!values.type && values.type !== searchAdvancedFiltersForm.type; - Navigation.setParams({q: queryString, rawQuery: undefined, ...(shouldResetSearchKey && {searchKey: getSearchKeyForQuery(buildSearchQueryJSON(queryString))})}); + Navigation.setParams({ + q: queryString, + rawQuery: undefined, + ...(shouldResetSearchKey && { + searchKey: getSearchKeyForQuery(buildSearchQueryJSON(queryString)), + }), + }); } function updateFilterQueryParams(values: Partial) { setFilterQueryParams(getUpdatedFilterFormValues(searchAdvancedFiltersForm, values)); } - return {getUpdatedFilterFormValues, setFilterQueryParams, updateFilterQueryParams}; + return { + getUpdatedFilterFormValues, + setFilterQueryParams, + updateFilterQueryParams, + }; } export default useUpdateFilterQuery; diff --git a/src/components/Search/types.ts b/src/components/Search/types.ts index 5ddf99a3576c..b68f9a5ed78d 100644 --- a/src/components/Search/types.ts +++ b/src/components/Search/types.ts @@ -28,6 +28,7 @@ import type { TransactionMonthGroupListItemType, TransactionQuarterGroupListItemType, TransactionTagGroupListItemType, + TransactionApproverGroupListItemType, TransactionWeekGroupListItemType, TransactionWithdrawalIDGroupListItemType, TransactionYearGroupListItemType, @@ -181,20 +182,13 @@ type SearchWithdrawalStatus = Array>; type SyntaxFilterKey = ValueOf; -type SearchCustomColumnIds = - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf - | ValueOf; +/** Column ids from one search column-picker map (`TYPE_CUSTOM_COLUMNS` or `GROUP_CUSTOM_COLUMNS`). */ +type CollectColumnIds = { + [K in keyof T]: ValueOf; +}[keyof T]; + +// The union of every type-picker and group-picker column, so a new group by picks up its columns without another manual member. +type SearchCustomColumnIds = CollectColumnIds | CollectColumnIds; type SearchQueryContextValue = { currentSearchHash: number; @@ -476,7 +470,8 @@ type GroupedItem = | TransactionMonthGroupListItemType | TransactionWeekGroupListItemType | TransactionYearGroupListItemType - | TransactionQuarterGroupListItemType; + | TransactionQuarterGroupListItemType + | TransactionApproverGroupListItemType; type SearchChartDataRow = { /** The point plotted on the chart */ diff --git a/src/languages/de.ts b/src/languages/de.ts index aae352a77a30..7cf8889b0637 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -10350,6 +10350,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc [CONST.SEARCH.GROUP_BY.WEEK]: 'Woche', [CONST.SEARCH.GROUP_BY.YEAR]: 'Jahr', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Quartal', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Genehmiger', }, feed: 'Feed', withdrawalType: { @@ -10407,6 +10408,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc [CONST.SEARCH.GROUP_BY.WEEK]: 'Wochen', [CONST.SEARCH.GROUP_BY.YEAR]: 'Jahre', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Quartale', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Genehmiger', }, moneyRequestReport: {emptyStateTitle: 'Noch keine Ausgaben', accessPlaceHolder: 'Für Details öffnen'}, noCategory: 'Keine Kategorie', diff --git a/src/languages/el.ts b/src/languages/el.ts index 348676da9c07..2341fadf78b3 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -10554,6 +10554,7 @@ ${reportName}`, [CONST.SEARCH.GROUP_BY.WEEK]: 'Εβδομάδα', [CONST.SEARCH.GROUP_BY.YEAR]: 'Έτος', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Τρίμηνο', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Εγκρίνων', }, feed: 'Ροή', withdrawalType: { @@ -10613,8 +10614,9 @@ ${reportName}`, [CONST.SEARCH.GROUP_BY.DAY]: 'Ημέρες', [CONST.SEARCH.GROUP_BY.MONTH]: 'Μήνες', [CONST.SEARCH.GROUP_BY.WEEK]: 'Εβδομάδες', - [CONST.SEARCH.GROUP_BY.YEAR]: 'Έτη', + [CONST.SEARCH.GROUP_BY.YEAR]: 'Χρόνια', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Τρίμηνα', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Εγκρίνοντες', }, moneyRequestReport: { emptyStateTitle: 'Καμία δαπάνη ακόμη', diff --git a/src/languages/en.ts b/src/languages/en.ts index 9e1ed3147217..fc27bf227ae8 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -10601,6 +10601,7 @@ const translations = { [CONST.SEARCH.GROUP_BY.WEEK]: 'Week', [CONST.SEARCH.GROUP_BY.YEAR]: 'Year', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Quarter', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Approver', }, feed: 'Feed', transactionStatus: { @@ -10664,6 +10665,7 @@ const translations = { [CONST.SEARCH.GROUP_BY.WEEK]: 'Weeks', [CONST.SEARCH.GROUP_BY.YEAR]: 'Years', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Quarters', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Approvers', }, moneyRequestReport: { emptyStateTitle: 'No expenses yet', diff --git a/src/languages/es.ts b/src/languages/es.ts index 2837e63ec4f7..03e53d4fd1e1 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -10177,15 +10177,16 @@ ${reportName}`, groupBy: { [CONST.SEARCH.GROUP_BY.FROM]: 'De', [CONST.SEARCH.GROUP_BY.CARD]: 'Tarjeta', - [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID de retiro', + [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID de retirada', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'Categoría', - [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Comerciante', + [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Comercio', [CONST.SEARCH.GROUP_BY.TAG]: 'Etiqueta', [CONST.SEARCH.GROUP_BY.DAY]: 'Día', [CONST.SEARCH.GROUP_BY.MONTH]: 'Mes', [CONST.SEARCH.GROUP_BY.WEEK]: 'Semana', [CONST.SEARCH.GROUP_BY.YEAR]: 'Año', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestre', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Aprobador', }, feed: 'Feed', withdrawalType: { @@ -10222,13 +10223,14 @@ ${reportName}`, [CONST.SEARCH.GROUP_BY.CARD]: 'Tarjetas', [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Exportaciones', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'Categorías', - [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Comerciantes', + [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Comercios', [CONST.SEARCH.GROUP_BY.TAG]: 'Etiquetas', [CONST.SEARCH.GROUP_BY.DAY]: 'Días', [CONST.SEARCH.GROUP_BY.MONTH]: 'Meses', [CONST.SEARCH.GROUP_BY.WEEK]: 'Semanas', [CONST.SEARCH.GROUP_BY.YEAR]: 'Años', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestres', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Aprobadores', }, moneyRequestReport: {emptyStateTitle: 'Aún no hay gastos', accessPlaceHolder: 'Abrir para ver detalles'}, noCategory: 'Sin categoría', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 043a494ab0a9..f0bc4694f61b 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -10376,6 +10376,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e [CONST.SEARCH.GROUP_BY.WEEK]: 'Semaine', [CONST.SEARCH.GROUP_BY.YEAR]: 'Année', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestre', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Approbateur', }, feed: 'Fil', withdrawalType: { @@ -10424,7 +10425,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e chartTitles: { [CONST.SEARCH.GROUP_BY.FROM]: 'De', [CONST.SEARCH.GROUP_BY.CARD]: 'Cartes', - [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Exports', + [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Exportations', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'Catégories', [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Commerçants', [CONST.SEARCH.GROUP_BY.TAG]: 'Tags', @@ -10433,6 +10434,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e [CONST.SEARCH.GROUP_BY.WEEK]: 'Semaines', [CONST.SEARCH.GROUP_BY.YEAR]: 'Années', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestres', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Approbateurs', }, moneyRequestReport: {emptyStateTitle: 'Aucune dépense pour l’instant', accessPlaceHolder: 'Ouvrir pour plus de détails'}, noCategory: 'Aucune catégorie', diff --git a/src/languages/it.ts b/src/languages/it.ts index 141db477e87e..c173f9f6cd6b 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -10298,6 +10298,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, [CONST.SEARCH.GROUP_BY.WEEK]: 'Settimana', [CONST.SEARCH.GROUP_BY.YEAR]: 'Anno', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestre', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Approvatore', }, feed: 'Feed', withdrawalType: { @@ -10355,6 +10356,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, [CONST.SEARCH.GROUP_BY.WEEK]: 'Settimane', [CONST.SEARCH.GROUP_BY.YEAR]: 'Anni', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestri', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Approvatori', }, moneyRequestReport: {emptyStateTitle: 'Nessuna spesa ancora', accessPlaceHolder: 'Apri per i dettagli'}, noCategory: 'Nessuna categoria', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index da1b4dfe587f..ca2d6747b0e7 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -10146,7 +10146,7 @@ ${reportName}`, groupBy: { [CONST.SEARCH.GROUP_BY.FROM]: '差出人', [CONST.SEARCH.GROUP_BY.CARD]: 'カード', - [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: '出金ID', + [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: '出金 ID', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'カテゴリ', [CONST.SEARCH.GROUP_BY.MERCHANT]: '加盟店', [CONST.SEARCH.GROUP_BY.TAG]: 'タグ', @@ -10155,6 +10155,7 @@ ${reportName}`, [CONST.SEARCH.GROUP_BY.WEEK]: '週', [CONST.SEARCH.GROUP_BY.YEAR]: '年', [CONST.SEARCH.GROUP_BY.QUARTER]: '四半期', + [CONST.SEARCH.GROUP_BY.APPROVER]: '承認者', }, feed: 'フィード', withdrawalType: { @@ -10203,9 +10204,10 @@ ${reportName}`, [CONST.SEARCH.GROUP_BY.TAG]: 'タグ', [CONST.SEARCH.GROUP_BY.DAY]: '日数', [CONST.SEARCH.GROUP_BY.MONTH]: '月数', - [CONST.SEARCH.GROUP_BY.WEEK]: '週数', + [CONST.SEARCH.GROUP_BY.WEEK]: '週間', [CONST.SEARCH.GROUP_BY.YEAR]: '年数', [CONST.SEARCH.GROUP_BY.QUARTER]: '四半期', + [CONST.SEARCH.GROUP_BY.APPROVER]: '承認者', }, moneyRequestReport: {emptyStateTitle: 'まだ経費がありません', accessPlaceHolder: '詳細を開く'}, noCategory: 'カテゴリなし', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index ef8038ea678f..52c2abeb4e02 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -10261,13 +10261,14 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, [CONST.SEARCH.GROUP_BY.CARD]: 'Kaart', [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Opname-ID', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'Categorie', - [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Handelaar', + [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Winkelier', [CONST.SEARCH.GROUP_BY.TAG]: 'Label', [CONST.SEARCH.GROUP_BY.DAY]: 'Dag', [CONST.SEARCH.GROUP_BY.MONTH]: 'Maand', [CONST.SEARCH.GROUP_BY.WEEK]: 'Week', [CONST.SEARCH.GROUP_BY.YEAR]: 'Jaar', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Kwartaal', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Goedkeurder', }, feed: 'Feed', withdrawalType: { @@ -10360,7 +10361,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, chartTitles: { [CONST.SEARCH.GROUP_BY.FROM]: 'Van', [CONST.SEARCH.GROUP_BY.CARD]: 'Kaarten', - [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Exporten', + [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Exports', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'Categorieën', [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Handelaars', [CONST.SEARCH.GROUP_BY.TAG]: 'Tags', @@ -10369,6 +10370,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, [CONST.SEARCH.GROUP_BY.WEEK]: 'Weken', [CONST.SEARCH.GROUP_BY.YEAR]: 'Jaren', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Kwartalen', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Goedkeurders', }, spendOverTime: 'Uitgaven in de tijd', tabs: { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index d13cc4611fb3..5af55f675dbb 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -10275,7 +10275,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, groupBy: { [CONST.SEARCH.GROUP_BY.FROM]: 'Od', [CONST.SEARCH.GROUP_BY.CARD]: 'Karta', - [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'Identyfikator wypłaty', + [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID wypłaty', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'Kategoria', [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Sprzedawca', [CONST.SEARCH.GROUP_BY.TAG]: 'Tag', @@ -10284,6 +10284,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, [CONST.SEARCH.GROUP_BY.WEEK]: 'Tydzień', [CONST.SEARCH.GROUP_BY.YEAR]: 'Rok', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Kwartał', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Osoba zatwierdzająca', }, feed: 'Kanał', withdrawalType: { @@ -10341,6 +10342,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, [CONST.SEARCH.GROUP_BY.WEEK]: 'Tygodnie', [CONST.SEARCH.GROUP_BY.YEAR]: 'Lata', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Kwartały', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Osoby zatwierdzające', }, moneyRequestReport: {emptyStateTitle: 'Brak wydatków', accessPlaceHolder: 'Otwórz, aby zobaczyć szczegóły'}, noCategory: 'Brak kategorii', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index be317f47a4e2..01e33d5552c6 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -10256,15 +10256,16 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, groupBy: { [CONST.SEARCH.GROUP_BY.FROM]: 'De', [CONST.SEARCH.GROUP_BY.CARD]: 'Cartão', - [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID do saque', + [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: 'ID de saque', [CONST.SEARCH.GROUP_BY.CATEGORY]: 'Categoria', - [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Estabelecimento', - [CONST.SEARCH.GROUP_BY.TAG]: 'Etiqueta', + [CONST.SEARCH.GROUP_BY.MERCHANT]: 'Comerciante', + [CONST.SEARCH.GROUP_BY.TAG]: 'Tag', [CONST.SEARCH.GROUP_BY.DAY]: 'Dia', [CONST.SEARCH.GROUP_BY.MONTH]: 'Mês', [CONST.SEARCH.GROUP_BY.WEEK]: 'Semana', [CONST.SEARCH.GROUP_BY.YEAR]: 'Ano', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestre', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Aprovador', }, feed: 'Feed', withdrawalType: { @@ -10362,6 +10363,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, [CONST.SEARCH.GROUP_BY.WEEK]: 'Semanas', [CONST.SEARCH.GROUP_BY.YEAR]: 'Anos', [CONST.SEARCH.GROUP_BY.QUARTER]: 'Trimestres', + [CONST.SEARCH.GROUP_BY.APPROVER]: 'Aprovadores', }, moneyRequestReport: {emptyStateTitle: 'Ainda não há despesas', accessPlaceHolder: 'Abrir para ver detalhes'}, errors: { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 16afafac952b..1d998ef4cd76 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -9869,17 +9869,18 @@ ${reportName}`, [CONST.SEARCH.SORT_ORDER.DESC]: '降序', }, groupBy: { - [CONST.SEARCH.GROUP_BY.FROM]: '来自', - [CONST.SEARCH.GROUP_BY.CARD]: '卡片', - [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: '提现编号', + [CONST.SEARCH.GROUP_BY.FROM]: '发件人', + [CONST.SEARCH.GROUP_BY.CARD]: '卡', + [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: '提现 ID', [CONST.SEARCH.GROUP_BY.CATEGORY]: '类别', - [CONST.SEARCH.GROUP_BY.MERCHANT]: '商户', + [CONST.SEARCH.GROUP_BY.MERCHANT]: '商家', [CONST.SEARCH.GROUP_BY.TAG]: '标签', [CONST.SEARCH.GROUP_BY.DAY]: '天', [CONST.SEARCH.GROUP_BY.MONTH]: '月', [CONST.SEARCH.GROUP_BY.WEEK]: '周', [CONST.SEARCH.GROUP_BY.YEAR]: '年份', [CONST.SEARCH.GROUP_BY.QUARTER]: '季度', + [CONST.SEARCH.GROUP_BY.APPROVER]: '审批人', }, feed: '动态', withdrawalType: { @@ -9920,17 +9921,18 @@ ${reportName}`, has: '有', view: {label: '查看', table: '表格', bar: '栏', line: '折线', pie: '饼图'}, chartTitles: { - [CONST.SEARCH.GROUP_BY.FROM]: '来自', + [CONST.SEARCH.GROUP_BY.FROM]: '发件人', [CONST.SEARCH.GROUP_BY.CARD]: '卡片', [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: '导出', [CONST.SEARCH.GROUP_BY.CATEGORY]: '类别', - [CONST.SEARCH.GROUP_BY.MERCHANT]: '商家', + [CONST.SEARCH.GROUP_BY.MERCHANT]: '商户', [CONST.SEARCH.GROUP_BY.TAG]: '标签', [CONST.SEARCH.GROUP_BY.DAY]: '天', [CONST.SEARCH.GROUP_BY.MONTH]: '月数', [CONST.SEARCH.GROUP_BY.WEEK]: '周', [CONST.SEARCH.GROUP_BY.YEAR]: '年', [CONST.SEARCH.GROUP_BY.QUARTER]: '季度', + [CONST.SEARCH.GROUP_BY.APPROVER]: '审批人', }, moneyRequestReport: {emptyStateTitle: '暂时没有报销费用', accessPlaceHolder: '展开查看详情'}, noCategory: '无类别', diff --git a/src/libs/SearchParser/autocompleteParser.js b/src/libs/SearchParser/autocompleteParser.js index 12522b663f5f..d7628a2cae11 100644 --- a/src/libs/SearchParser/autocompleteParser.js +++ b/src/libs/SearchParser/autocompleteParser.js @@ -258,69 +258,71 @@ function peg$parse(input, options) { var peg$c72 = "submitter-payroll-id"; var peg$c73 = "orderdealnumbers"; var peg$c74 = "order-deal-numbers"; - var peg$c75 = "assignee"; - var peg$c76 = "createdby"; - var peg$c77 = "created-by"; - var peg$c78 = "action"; - var peg$c79 = "total"; - var peg$c80 = "has"; - var peg$c81 = "is"; - var peg$c82 = "purchaseamount"; - var peg$c83 = "purchase-amount"; - var peg$c84 = "purchasecurrency"; - var peg$c85 = "purchase-currency"; - var peg$c86 = "amountdebited"; - var peg$c87 = "amount-debited"; - var peg$c88 = "amountreimbursed"; - var peg$c89 = "amount-reimbursed"; - var peg$c90 = "columns"; - var peg$c91 = "view"; - var peg$c92 = "compare"; - var peg$c93 = "per-diem"; - var peg$c94 = "drafts"; - var peg$c95 = "draft"; - var peg$c96 = "tax"; - var peg$c97 = "policy-name"; - var peg$c98 = "long-report-id"; - var peg$c99 = "exported-to"; - var peg$c100 = "exportedto"; - var peg$c101 = "exchange-rate"; - var peg$c102 = "reimbursable-total"; - var peg$c103 = "non-reimbursable-total"; - var peg$c104 = "group-from"; - var peg$c105 = "group-expenses"; - var peg$c106 = "group-total"; - var peg$c107 = "group-card"; - var peg$c108 = "group-feed"; - var peg$c109 = "group-bank-account"; - var peg$c110 = "group-withdrawn"; - var peg$c111 = "group-withdrawal-id"; - var peg$c112 = "group-amount-debited"; - var peg$c113 = "group-amount-reimbursed"; - var peg$c114 = "group-category"; - var peg$c115 = "group-tag"; - var peg$c116 = "group-merchant"; - var peg$c117 = "group-day"; - var peg$c118 = "group-month"; - var peg$c119 = "group-week"; - var peg$c120 = "group-year"; - var peg$c121 = "group-quarter"; - var peg$c122 = "*:"; - var peg$c123 = "!="; - var peg$c124 = ">="; - var peg$c125 = ">"; - var peg$c126 = "<="; - var peg$c127 = "<"; - var peg$c128 = "\\"; - var peg$c129 = "\u201C"; - var peg$c130 = "\u201D"; - var peg$c131 = "\""; - var peg$c132 = "footercount"; - var peg$c133 = "footer-count"; - var peg$c134 = "footercurrency"; - var peg$c135 = "footer-currency"; - var peg$c136 = "footertotal"; - var peg$c137 = "footer-total"; + var peg$c75 = "approver"; + var peg$c76 = "assignee"; + var peg$c77 = "createdby"; + var peg$c78 = "created-by"; + var peg$c79 = "action"; + var peg$c80 = "total"; + var peg$c81 = "has"; + var peg$c82 = "is"; + var peg$c83 = "purchaseamount"; + var peg$c84 = "purchase-amount"; + var peg$c85 = "purchasecurrency"; + var peg$c86 = "purchase-currency"; + var peg$c87 = "amountdebited"; + var peg$c88 = "amount-debited"; + var peg$c89 = "amountreimbursed"; + var peg$c90 = "amount-reimbursed"; + var peg$c91 = "columns"; + var peg$c92 = "view"; + var peg$c93 = "compare"; + var peg$c94 = "per-diem"; + var peg$c95 = "drafts"; + var peg$c96 = "draft"; + var peg$c97 = "tax"; + var peg$c98 = "policy-name"; + var peg$c99 = "long-report-id"; + var peg$c100 = "exported-to"; + var peg$c101 = "exportedto"; + var peg$c102 = "exchange-rate"; + var peg$c103 = "reimbursable-total"; + var peg$c104 = "non-reimbursable-total"; + var peg$c105 = "group-from"; + var peg$c106 = "group-expenses"; + var peg$c107 = "group-total"; + var peg$c108 = "group-card"; + var peg$c109 = "group-feed"; + var peg$c110 = "group-bank-account"; + var peg$c111 = "group-withdrawn"; + var peg$c112 = "group-withdrawal-id"; + var peg$c113 = "group-amount-debited"; + var peg$c114 = "group-amount-reimbursed"; + var peg$c115 = "group-category"; + var peg$c116 = "group-tag"; + var peg$c117 = "group-merchant"; + var peg$c118 = "group-day"; + var peg$c119 = "group-month"; + var peg$c120 = "group-week"; + var peg$c121 = "group-year"; + var peg$c122 = "group-quarter"; + var peg$c123 = "group-approver"; + var peg$c124 = "*:"; + var peg$c125 = "!="; + var peg$c126 = ">="; + var peg$c127 = ">"; + var peg$c128 = "<="; + var peg$c129 = "<"; + var peg$c130 = "\\"; + var peg$c131 = "\u201C"; + var peg$c132 = "\u201D"; + var peg$c133 = "\""; + var peg$c134 = "footercount"; + var peg$c135 = "footer-count"; + var peg$c136 = "footercurrency"; + var peg$c137 = "footer-currency"; + var peg$c138 = "footertotal"; + var peg$c139 = "footer-total"; var peg$r0 = /^[ \t\r\n\xA0,:=<>!]/; var peg$r1 = /^[:=]/; @@ -415,86 +417,88 @@ function peg$parse(input, options) { var peg$e75 = peg$literalExpectation("submitter-payroll-id", true); var peg$e76 = peg$literalExpectation("orderDealNumbers", true); var peg$e77 = peg$literalExpectation("order-deal-numbers", true); - var peg$e78 = peg$literalExpectation("assignee", true); - var peg$e79 = peg$literalExpectation("createdBy", true); - var peg$e80 = peg$literalExpectation("created-by", true); - var peg$e81 = peg$literalExpectation("action", true); - var peg$e82 = peg$literalExpectation("total", true); - var peg$e83 = peg$literalExpectation("has", true); - var peg$e84 = peg$literalExpectation("is", true); - var peg$e85 = peg$literalExpectation("purchaseAmount", true); - var peg$e86 = peg$literalExpectation("purchase-amount", true); - var peg$e87 = peg$literalExpectation("purchaseCurrency", true); - var peg$e88 = peg$literalExpectation("purchase-currency", true); - var peg$e89 = peg$literalExpectation("amountDebited", true); - var peg$e90 = peg$literalExpectation("amount-debited", true); - var peg$e91 = peg$literalExpectation("amountReimbursed", true); - var peg$e92 = peg$literalExpectation("amount-reimbursed", true); - var peg$e93 = peg$literalExpectation("columns", true); - var peg$e94 = peg$literalExpectation("view", true); - var peg$e95 = peg$literalExpectation("compare", true); - var peg$e96 = peg$literalExpectation("per-diem", true); - var peg$e97 = peg$literalExpectation("drafts", true); - var peg$e98 = peg$literalExpectation("draft", true); - var peg$e99 = peg$literalExpectation("tax", true); - var peg$e100 = peg$literalExpectation("policy-name", true); - var peg$e101 = peg$literalExpectation("long-report-id", true); - var peg$e102 = peg$literalExpectation("exported-to", true); - var peg$e103 = peg$classExpectation([":", "="], false, false); - var peg$e104 = peg$literalExpectation("exportedTo", true); - var peg$e105 = peg$literalExpectation("exchange-rate", true); - var peg$e106 = peg$literalExpectation("reimbursable-total", true); - var peg$e107 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e108 = peg$literalExpectation("group-from", true); - var peg$e109 = peg$literalExpectation("group-expenses", true); - var peg$e110 = peg$literalExpectation("group-total", true); - var peg$e111 = peg$literalExpectation("group-card", true); - var peg$e112 = peg$literalExpectation("group-feed", true); - var peg$e113 = peg$literalExpectation("group-bank-account", true); - var peg$e114 = peg$literalExpectation("group-withdrawn", true); - var peg$e115 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e116 = peg$literalExpectation("group-amount-debited", true); - var peg$e117 = peg$literalExpectation("group-amount-reimbursed", true); - var peg$e118 = peg$literalExpectation("group-category", true); - var peg$e119 = peg$literalExpectation("group-tag", true); - var peg$e120 = peg$literalExpectation("group-merchant", true); - var peg$e121 = peg$literalExpectation("group-day", true); - var peg$e122 = peg$literalExpectation("group-month", true); - var peg$e123 = peg$literalExpectation("group-week", true); - var peg$e124 = peg$literalExpectation("group-year", true); - var peg$e125 = peg$literalExpectation("group-quarter", true); - var peg$e126 = peg$otherExpectation("operator"); - var peg$e127 = peg$literalExpectation("*:", false); - var peg$e128 = peg$literalExpectation("!=", false); - var peg$e129 = peg$literalExpectation(">=", false); - var peg$e130 = peg$literalExpectation(">", false); - var peg$e131 = peg$literalExpectation("<=", false); - var peg$e132 = peg$literalExpectation("<", false); - var peg$e133 = peg$literalExpectation("\\", false); - var peg$e134 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); - var peg$e135 = peg$otherExpectation("word"); - var peg$e136 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e137 = peg$otherExpectation("whitespace"); - var peg$e138 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e139 = peg$otherExpectation("quote"); - var peg$e140 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e141 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e142 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e143 = peg$literalExpectation("\u201C", false); - var peg$e144 = peg$literalExpectation("\u201D", false); - var peg$e145 = peg$literalExpectation("\"", false); - var peg$e146 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e147 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e148 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e149 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e150 = peg$classExpectation([","], false, false); - var peg$e151 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); - var peg$e152 = peg$literalExpectation("footerCount", true); - var peg$e153 = peg$literalExpectation("footer-count", true); - var peg$e154 = peg$literalExpectation("footerCurrency", true); - var peg$e155 = peg$literalExpectation("footer-currency", true); - var peg$e156 = peg$literalExpectation("footerTotal", true); - var peg$e157 = peg$literalExpectation("footer-total", true); + var peg$e78 = peg$literalExpectation("approver", true); + var peg$e79 = peg$literalExpectation("assignee", true); + var peg$e80 = peg$literalExpectation("createdBy", true); + var peg$e81 = peg$literalExpectation("created-by", true); + var peg$e82 = peg$literalExpectation("action", true); + var peg$e83 = peg$literalExpectation("total", true); + var peg$e84 = peg$literalExpectation("has", true); + var peg$e85 = peg$literalExpectation("is", true); + var peg$e86 = peg$literalExpectation("purchaseAmount", true); + var peg$e87 = peg$literalExpectation("purchase-amount", true); + var peg$e88 = peg$literalExpectation("purchaseCurrency", true); + var peg$e89 = peg$literalExpectation("purchase-currency", true); + var peg$e90 = peg$literalExpectation("amountDebited", true); + var peg$e91 = peg$literalExpectation("amount-debited", true); + var peg$e92 = peg$literalExpectation("amountReimbursed", true); + var peg$e93 = peg$literalExpectation("amount-reimbursed", true); + var peg$e94 = peg$literalExpectation("columns", true); + var peg$e95 = peg$literalExpectation("view", true); + var peg$e96 = peg$literalExpectation("compare", true); + var peg$e97 = peg$literalExpectation("per-diem", true); + var peg$e98 = peg$literalExpectation("drafts", true); + var peg$e99 = peg$literalExpectation("draft", true); + var peg$e100 = peg$literalExpectation("tax", true); + var peg$e101 = peg$literalExpectation("policy-name", true); + var peg$e102 = peg$literalExpectation("long-report-id", true); + var peg$e103 = peg$literalExpectation("exported-to", true); + var peg$e104 = peg$classExpectation([":", "="], false, false); + var peg$e105 = peg$literalExpectation("exportedTo", true); + var peg$e106 = peg$literalExpectation("exchange-rate", true); + var peg$e107 = peg$literalExpectation("reimbursable-total", true); + var peg$e108 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e109 = peg$literalExpectation("group-from", true); + var peg$e110 = peg$literalExpectation("group-expenses", true); + var peg$e111 = peg$literalExpectation("group-total", true); + var peg$e112 = peg$literalExpectation("group-card", true); + var peg$e113 = peg$literalExpectation("group-feed", true); + var peg$e114 = peg$literalExpectation("group-bank-account", true); + var peg$e115 = peg$literalExpectation("group-withdrawn", true); + var peg$e116 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e117 = peg$literalExpectation("group-amount-debited", true); + var peg$e118 = peg$literalExpectation("group-amount-reimbursed", true); + var peg$e119 = peg$literalExpectation("group-category", true); + var peg$e120 = peg$literalExpectation("group-tag", true); + var peg$e121 = peg$literalExpectation("group-merchant", true); + var peg$e122 = peg$literalExpectation("group-day", true); + var peg$e123 = peg$literalExpectation("group-month", true); + var peg$e124 = peg$literalExpectation("group-week", true); + var peg$e125 = peg$literalExpectation("group-year", true); + var peg$e126 = peg$literalExpectation("group-quarter", true); + var peg$e127 = peg$literalExpectation("group-approver", true); + var peg$e128 = peg$otherExpectation("operator"); + var peg$e129 = peg$literalExpectation("*:", false); + var peg$e130 = peg$literalExpectation("!=", false); + var peg$e131 = peg$literalExpectation(">=", false); + var peg$e132 = peg$literalExpectation(">", false); + var peg$e133 = peg$literalExpectation("<=", false); + var peg$e134 = peg$literalExpectation("<", false); + var peg$e135 = peg$literalExpectation("\\", false); + var peg$e136 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); + var peg$e137 = peg$otherExpectation("word"); + var peg$e138 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e139 = peg$otherExpectation("whitespace"); + var peg$e140 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e141 = peg$otherExpectation("quote"); + var peg$e142 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e143 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e144 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e145 = peg$literalExpectation("\u201C", false); + var peg$e146 = peg$literalExpectation("\u201D", false); + var peg$e147 = peg$literalExpectation("\"", false); + var peg$e148 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e149 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e150 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e151 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e152 = peg$classExpectation([","], false, false); + var peg$e153 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e154 = peg$literalExpectation("footerCount", true); + var peg$e155 = peg$literalExpectation("footer-count", true); + var peg$e156 = peg$literalExpectation("footerCurrency", true); + var peg$e157 = peg$literalExpectation("footer-currency", true); + var peg$e158 = peg$literalExpectation("footerTotal", true); + var peg$e159 = peg$literalExpectation("footer-total", true); var peg$f0 = function(ranges) { return { autocomplete, ranges }; }; var peg$f1 = function(filters) { return filters.filter(Boolean).flat(); }; @@ -616,92 +620,94 @@ function peg$parse(input, options) { var peg$f56 = function() { return "submitterUserID"; }; var peg$f57 = function() { return "submitterPayrollID"; }; var peg$f58 = function() { return "orderDealNumbers"; }; - var peg$f59 = function() { return "assignee"; }; - var peg$f60 = function() { return "createdBy"; }; - var peg$f61 = function() { return "action"; }; - var peg$f62 = function() {return "total"; }; - var peg$f63 = function() {return "has"; }; - var peg$f64 = function() {return "is"; }; - var peg$f65 = function() {return "purchaseAmount"}; - var peg$f66 = function() {return "purchaseCurrency"}; - var peg$f67 = function() {return "amountDebited"}; - var peg$f68 = function() {return "amountReimbursed"}; - var peg$f69 = function() { + var peg$f59 = function() { return "approver"; }; + var peg$f60 = function() { return "assignee"; }; + var peg$f61 = function() { return "createdBy"; }; + var peg$f62 = function() { return "action"; }; + var peg$f63 = function() {return "total"; }; + var peg$f64 = function() {return "has"; }; + var peg$f65 = function() {return "is"; }; + var peg$f66 = function() {return "purchaseAmount"}; + var peg$f67 = function() {return "purchaseCurrency"}; + var peg$f68 = function() {return "amountDebited"}; + var peg$f69 = function() {return "amountReimbursed"}; + var peg$f70 = function() { isColumnsContext = true; return "columns"; }; - var peg$f70 = function() {return "view"}; - var peg$f71 = function() {return "compare"}; - var peg$f72 = function() { return isColumnsContext; }; - var peg$f73 = function() { return "perDiem"; }; - var peg$f74 = function() { return "drafts"; }; - var peg$f75 = function() { return "originalamount"; }; - var peg$f76 = function() { return "taxAmount"; }; - var peg$f77 = function() { return "taxrate"; }; - var peg$f78 = function() { return "policyname"; }; - var peg$f79 = function() { return "withdrawalID"; }; - var peg$f80 = function() { return "bankAccount"; }; - var peg$f81 = function() { return "reportID"; }; - var peg$f82 = function() { return "base62ReportID"; }; - var peg$f83 = function() { return "exportedto"; }; - var peg$f84 = function() { return "exportedTo"; }; + var peg$f71 = function() {return "view"}; + var peg$f72 = function() {return "compare"}; + var peg$f73 = function() { return isColumnsContext; }; + var peg$f74 = function() { return "perDiem"; }; + var peg$f75 = function() { return "drafts"; }; + var peg$f76 = function() { return "originalamount"; }; + var peg$f77 = function() { return "taxAmount"; }; + var peg$f78 = function() { return "taxrate"; }; + var peg$f79 = function() { return "policyname"; }; + var peg$f80 = function() { return "withdrawalID"; }; + var peg$f81 = function() { return "bankAccount"; }; + var peg$f82 = function() { return "reportID"; }; + var peg$f83 = function() { return "base62ReportID"; }; + var peg$f84 = function() { return "exportedto"; }; var peg$f85 = function() { return "exportedTo"; }; - var peg$f86 = function() { return "exchangeRate"; }; - var peg$f87 = function() { return "reimbursableTotal"; }; - var peg$f88 = function() { return "nonReimbursableTotal"; }; - var peg$f89 = function() { return "groupFrom"; }; - var peg$f90 = function() { return "groupExpenses"; }; - var peg$f91 = function() { return "groupTotal"; }; - var peg$f92 = function() { return "groupCard"; }; - var peg$f93 = function() { return "groupFeed"; }; - var peg$f94 = function() { return "groupBankAccount"; }; - var peg$f95 = function() { return "groupWithdrawn"; }; - var peg$f96 = function() { return "groupWithdrawalID"; }; - var peg$f97 = function() { return "groupAmountDebited"; }; - var peg$f98 = function() { return "groupAmountReimbursed"; }; - var peg$f99 = function() { return "amountDebited"; }; - var peg$f100 = function() { return "amountReimbursed"; }; - var peg$f101 = function() { return "groupCategory"; }; - var peg$f102 = function() { return "groupTag"; }; - var peg$f103 = function() { return "groupMerchant"; }; - var peg$f104 = function() { return "groupday"; }; - var peg$f105 = function() { return "groupmonth"; }; - var peg$f106 = function() { return "groupweek"; }; - var peg$f107 = function() { return "groupyear"; }; - var peg$f108 = function() { return "groupquarter"; }; - var peg$f109 = function() { return "contains"; }; - var peg$f110 = function() { return "eq"; }; - var peg$f111 = function() { return "neq"; }; - var peg$f112 = function() { return "gte"; }; - var peg$f113 = function() { return "gt"; }; - var peg$f114 = function() { return "lte"; }; - var peg$f115 = function() { return "lt"; }; - var peg$f116 = function(o) { + var peg$f86 = function() { return "exportedTo"; }; + var peg$f87 = function() { return "exchangeRate"; }; + var peg$f88 = function() { return "reimbursableTotal"; }; + var peg$f89 = function() { return "nonReimbursableTotal"; }; + var peg$f90 = function() { return "groupFrom"; }; + var peg$f91 = function() { return "groupExpenses"; }; + var peg$f92 = function() { return "groupTotal"; }; + var peg$f93 = function() { return "groupCard"; }; + var peg$f94 = function() { return "groupFeed"; }; + var peg$f95 = function() { return "groupBankAccount"; }; + var peg$f96 = function() { return "groupWithdrawn"; }; + var peg$f97 = function() { return "groupWithdrawalID"; }; + var peg$f98 = function() { return "groupAmountDebited"; }; + var peg$f99 = function() { return "groupAmountReimbursed"; }; + var peg$f100 = function() { return "amountDebited"; }; + var peg$f101 = function() { return "amountReimbursed"; }; + var peg$f102 = function() { return "groupCategory"; }; + var peg$f103 = function() { return "groupTag"; }; + var peg$f104 = function() { return "groupMerchant"; }; + var peg$f105 = function() { return "groupday"; }; + var peg$f106 = function() { return "groupmonth"; }; + var peg$f107 = function() { return "groupweek"; }; + var peg$f108 = function() { return "groupyear"; }; + var peg$f109 = function() { return "groupquarter"; }; + var peg$f110 = function() { return "groupApprover"; }; + var peg$f111 = function() { return "contains"; }; + var peg$f112 = function() { return "eq"; }; + var peg$f113 = function() { return "neq"; }; + var peg$f114 = function() { return "gte"; }; + var peg$f115 = function() { return "gt"; }; + var peg$f116 = function() { return "lte"; }; + var peg$f117 = function() { return "lt"; }; + var peg$f118 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq" || o === "contains"); } isColumnsContext = false; return o; }; - var peg$f117 = function(c) { return c; }; - var peg$f118 = function(chars) { return chars.join("").trim(); }; - var peg$f119 = function() { + var peg$f119 = function(c) { return c; }; + var peg$f120 = function(chars) { return chars.join("").trim(); }; + var peg$f121 = function() { isColumnsContext = false; return "and"; }; - var peg$f120 = function() { return expectingNestedQuote; }; - var peg$f121 = function(start, inner, end) { //handle no-breaking space + var peg$f122 = function() { return expectingNestedQuote; }; + var peg$f123 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f122 = function(start) {return "“"}; - var peg$f123 = function(start) {return "”"}; - var peg$f124 = function(start) {return "\""}; - var peg$f125 = function(start, inner, end) { + var peg$f124 = function(start) {return "“"}; + var peg$f125 = function(start) {return "”"}; + var peg$f126 = function(start) {return "\""}; + var peg$f127 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; - var peg$f126 = function() { return "footerCount"; }; - var peg$f127 = function() { return "footerCurrency"; }; - var peg$f128 = function() { return "footerTotal"; }; + var peg$f128 = function() { return "footerCount"; }; + var peg$f129 = function() { return "footerCurrency"; }; + var peg$f130 = function() { return "footerTotal"; }; var peg$currPos = options.peg$currPos | 0; var peg$savedPos = peg$currPos; var peg$posDetailsCache = [{ line: 1, column: 1 }]; @@ -1228,17 +1234,20 @@ function peg$parse(input, options) { if (s1 === peg$FAILED) { s1 = peg$parseorderDealNumbers(); if (s1 === peg$FAILED) { - s1 = peg$parsereportFieldDynamic(); + s1 = peg$parseapprover(); 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$parsefooterCount(); + s1 = peg$parselimit(); if (s1 === peg$FAILED) { - s1 = peg$parsefooterCurrency(); + s1 = peg$parsefooterCount(); if (s1 === peg$FAILED) { - s1 = peg$parsefooterTotal(); + s1 = peg$parsefooterCurrency(); + if (s1 === peg$FAILED) { + s1 = peg$parsefooterTotal(); + } } } } @@ -2599,7 +2608,7 @@ function peg$parse(input, options) { return s0; } - function peg$parseassignee() { + function peg$parseapprover() { var s0, s1; s0 = peg$currPos; @@ -2619,28 +2628,48 @@ function peg$parse(input, options) { return s0; } + function peg$parseassignee() { + var s0, s1; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 8); + if (s1.toLowerCase() === peg$c76) { + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e79); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f60(); + } + s0 = s1; + + return s0; + } + function peg$parsecreatedBy() { var s0, s1; s0 = input.substr(peg$currPos, 9); - if (s0.toLowerCase() === peg$c76) { + if (s0.toLowerCase() === peg$c77) { peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e79); } + if (peg$silentFails === 0) { peg$fail(peg$e80); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c78) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e80); } + if (peg$silentFails === 0) { peg$fail(peg$e81); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f60(); + s1 = peg$f61(); } s0 = s1; } @@ -2653,15 +2682,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c78) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e81); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f61(); + s1 = peg$f62(); } s0 = s1; @@ -2673,15 +2702,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c79) { + if (s1.toLowerCase() === peg$c80) { peg$currPos += 5; } 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$f62(); + s1 = peg$f63(); } s0 = s1; @@ -2693,15 +2722,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c80) { + if (s1.toLowerCase() === peg$c81) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e83); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f63(); + s1 = peg$f64(); } s0 = s1; @@ -2713,15 +2742,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 2); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c82) { peg$currPos += 2; } 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$f64(); + s1 = peg$f65(); } s0 = s1; @@ -2732,24 +2761,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 14); - if (s0.toLowerCase() === peg$c82) { + if (s0.toLowerCase() === peg$c83) { peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e85); } + if (peg$silentFails === 0) { peg$fail(peg$e86); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c84) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e87); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f65(); + s1 = peg$f66(); } s0 = s1; } @@ -2761,24 +2790,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c84) { + if (s0.toLowerCase() === peg$c85) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e87); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c85) { + if (s1.toLowerCase() === peg$c86) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e88); } + if (peg$silentFails === 0) { peg$fail(peg$e89); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f66(); + s1 = peg$f67(); } s0 = s1; } @@ -2790,24 +2819,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 13); - if (s0.toLowerCase() === peg$c86) { + if (s0.toLowerCase() === peg$c87) { peg$currPos += 13; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e89); } + if (peg$silentFails === 0) { peg$fail(peg$e90); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c88) { 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) { peg$savedPos = s0; - s1 = peg$f67(); + s1 = peg$f68(); } s0 = s1; } @@ -2819,24 +2848,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c88) { + if (s0.toLowerCase() === peg$c89) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e91); } + if (peg$silentFails === 0) { peg$fail(peg$e92); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e92); } + if (peg$silentFails === 0) { peg$fail(peg$e93); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f68(); + s1 = peg$f69(); } s0 = s1; } @@ -2849,15 +2878,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c90) { + if (s1.toLowerCase() === peg$c91) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e93); } + if (peg$silentFails === 0) { peg$fail(peg$e94); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f69(); + s1 = peg$f70(); } s0 = s1; @@ -2869,15 +2898,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c91) { + if (s1.toLowerCase() === peg$c92) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e94); } + if (peg$silentFails === 0) { peg$fail(peg$e95); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f70(); + s1 = peg$f71(); } s0 = s1; @@ -2889,15 +2918,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c93) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e95); } + if (peg$silentFails === 0) { peg$fail(peg$e96); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f71(); + s1 = peg$f72(); } s0 = s1; @@ -2909,7 +2938,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f72(); + s1 = peg$f73(); if (s1) { s1 = undefined; } else { @@ -3004,6 +3033,9 @@ function peg$parse(input, options) { s0 = peg$parsegroupYear(); if (s0 === peg$FAILED) { s0 = peg$parsegroupQuarter(); + if (s0 === peg$FAILED) { + s0 = peg$parsegroupApprover(); + } } } } @@ -3044,11 +3076,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c93) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 8; } 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; @@ -3063,7 +3095,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; @@ -3081,19 +3113,19 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c94) { + if (s1.toLowerCase() === peg$c95) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e97); } + if (peg$silentFails === 0) { peg$fail(peg$e98); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c95) { + if (s1.toLowerCase() === peg$c96) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e98); } + if (peg$silentFails === 0) { peg$fail(peg$e99); } } } if (s1 !== peg$FAILED) { @@ -3109,7 +3141,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; @@ -3127,11 +3159,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c84) { peg$currPos += 15; } 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; @@ -3146,7 +3178,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; @@ -3164,11 +3196,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c96) { + if (s1.toLowerCase() === peg$c97) { peg$currPos += 3; } 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; @@ -3183,7 +3215,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; @@ -3220,7 +3252,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; @@ -3238,11 +3270,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c97) { + if (s1.toLowerCase() === peg$c98) { 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; @@ -3257,7 +3289,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; @@ -3294,7 +3326,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; @@ -3331,7 +3363,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; @@ -3349,11 +3381,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c98) { + if (s1.toLowerCase() === peg$c99) { peg$currPos += 14; } 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; @@ -3368,7 +3400,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; @@ -3405,7 +3437,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; @@ -3423,11 +3455,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c99) { + if (s1.toLowerCase() === peg$c100) { peg$currPos += 11; } 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; @@ -3442,7 +3474,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; @@ -3467,7 +3499,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e103); } + if (peg$silentFails === 0) { peg$fail(peg$e104); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -3486,11 +3518,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c100) { + if (s1.toLowerCase() === peg$c101) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e104); } + if (peg$silentFails === 0) { peg$fail(peg$e105); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3505,7 +3537,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; @@ -3517,11 +3549,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c99) { + if (s1.toLowerCase() === peg$c100) { peg$currPos += 11; } 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; @@ -3536,7 +3568,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; @@ -3555,11 +3587,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c101) { + if (s1.toLowerCase() === peg$c102) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e105); } + if (peg$silentFails === 0) { peg$fail(peg$e106); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3574,7 +3606,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; @@ -3592,11 +3624,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c102) { + if (s1.toLowerCase() === peg$c103) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e106); } + if (peg$silentFails === 0) { peg$fail(peg$e107); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3611,7 +3643,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; @@ -3629,11 +3661,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 22); - if (s1.toLowerCase() === peg$c103) { + if (s1.toLowerCase() === peg$c104) { peg$currPos += 22; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e107); } + if (peg$silentFails === 0) { peg$fail(peg$e108); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3648,7 +3680,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; @@ -3666,11 +3698,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c104) { + if (s1.toLowerCase() === peg$c105) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e108); } + if (peg$silentFails === 0) { peg$fail(peg$e109); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3685,7 +3717,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; @@ -3703,11 +3735,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c105) { + if (s1.toLowerCase() === peg$c106) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3722,7 +3754,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f90(); + s0 = peg$f91(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3740,11 +3772,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c106) { + if (s1.toLowerCase() === peg$c107) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e110); } + if (peg$silentFails === 0) { peg$fail(peg$e111); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3759,7 +3791,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f91(); + s0 = peg$f92(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3777,11 +3809,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c107) { + if (s1.toLowerCase() === peg$c108) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3796,7 +3828,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f92(); + s0 = peg$f93(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3814,11 +3846,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c108) { + if (s1.toLowerCase() === peg$c109) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e112); } + if (peg$silentFails === 0) { peg$fail(peg$e113); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3833,7 +3865,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f93(); + s0 = peg$f94(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3851,11 +3883,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c109) { + if (s1.toLowerCase() === peg$c110) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3870,7 +3902,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f94(); + s0 = peg$f95(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3888,11 +3920,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c110) { + if (s1.toLowerCase() === peg$c111) { peg$currPos += 15; } 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; @@ -3907,7 +3939,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f95(); + s0 = peg$f96(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3925,11 +3957,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 19); - if (s1.toLowerCase() === peg$c111) { + if (s1.toLowerCase() === peg$c112) { peg$currPos += 19; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3944,7 +3976,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f96(); + s0 = peg$f97(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3962,11 +3994,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 20); - if (s1.toLowerCase() === peg$c112) { + if (s1.toLowerCase() === peg$c113) { peg$currPos += 20; } 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; @@ -3981,7 +4013,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f97(); + s0 = peg$f98(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3999,11 +4031,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 23); - if (s1.toLowerCase() === peg$c113) { + if (s1.toLowerCase() === peg$c114) { peg$currPos += 23; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4018,7 +4050,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f98(); + s0 = peg$f99(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4036,11 +4068,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c88) { 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; @@ -4055,7 +4087,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f99(); + s0 = peg$f100(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4073,11 +4105,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 17; } 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; @@ -4092,7 +4124,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f100(); + s0 = peg$f101(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4110,11 +4142,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c114) { + if (s1.toLowerCase() === peg$c115) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4129,7 +4161,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f101(); + s0 = peg$f102(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4147,11 +4179,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c115) { + if (s1.toLowerCase() === peg$c116) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4166,7 +4198,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f102(); + s0 = peg$f103(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4184,11 +4216,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c116) { + if (s1.toLowerCase() === peg$c117) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4203,7 +4235,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f103(); + s0 = peg$f104(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4221,11 +4253,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c117) { + if (s1.toLowerCase() === peg$c118) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4240,7 +4272,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f104(); + s0 = peg$f105(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4258,11 +4290,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c118) { + if (s1.toLowerCase() === peg$c119) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4277,7 +4309,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f105(); + s0 = peg$f106(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4295,11 +4327,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c119) { + if (s1.toLowerCase() === peg$c120) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4314,7 +4346,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f106(); + s0 = peg$f107(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4332,11 +4364,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c120) { + if (s1.toLowerCase() === peg$c121) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4351,7 +4383,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f107(); + s0 = peg$f108(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4369,11 +4401,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c121) { + if (s1.toLowerCase() === peg$c122) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e125); } + if (peg$silentFails === 0) { peg$fail(peg$e126); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4388,7 +4420,44 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f108(); + s0 = peg$f109(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsegroupApprover() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 14); + if (s1.toLowerCase() === peg$c123) { + peg$currPos += 14; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e127); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewordBoundary(); + peg$silentFails--; + if (s3 !== peg$FAILED) { + peg$currPos = s2; + s2 = undefined; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f110(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4406,16 +4475,16 @@ function peg$parse(input, options) { peg$silentFails++; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c122) { - s1 = peg$c122; + if (input.substr(peg$currPos, 2) === peg$c124) { + s1 = peg$c124; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f109(); + s1 = peg$f111(); } s0 = s1; if (s0 === peg$FAILED) { @@ -4425,81 +4494,81 @@ function peg$parse(input, options) { peg$currPos++; } 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$f110(); + s1 = peg$f112(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c123) { - s1 = peg$c123; + if (input.substr(peg$currPos, 2) === peg$c125) { + s1 = peg$c125; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f111(); + s1 = peg$f113(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c124) { - s1 = peg$c124; + if (input.substr(peg$currPos, 2) === peg$c126) { + s1 = peg$c126; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f112(); + s1 = peg$f114(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c125; + s1 = peg$c127; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f113(); + s1 = peg$f115(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c126) { - s1 = peg$c126; + if (input.substr(peg$currPos, 2) === peg$c128) { + s1 = peg$c128; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f114(); + s1 = peg$f116(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c127; + s1 = peg$c129; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f115(); + s1 = peg$f117(); } s0 = s1; } @@ -4511,7 +4580,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e126); } + if (peg$silentFails === 0) { peg$fail(peg$e128); } } return s0; @@ -4524,7 +4593,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f116(s1); + s1 = peg$f118(s1); } s0 = s1; @@ -4536,11 +4605,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c128; + s1 = peg$c130; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s1 !== peg$FAILED) { s2 = input.charAt(peg$currPos); @@ -4548,11 +4617,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f117(s2); + s0 = peg$f119(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4578,7 +4647,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } } if (s2 !== peg$FAILED) { @@ -4591,7 +4660,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } } } @@ -4600,13 +4669,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f118(s1); + s1 = peg$f120(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } return s0; @@ -4618,7 +4687,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f119(); + s1 = peg$f121(); s0 = s1; return s0; @@ -4634,7 +4703,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -4643,12 +4712,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } return s0; } @@ -4658,7 +4727,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f120(); + s1 = peg$f122(); if (s1) { s1 = undefined; } else { @@ -4695,7 +4764,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4704,7 +4773,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } } s2 = input.charAt(peg$currPos); @@ -4712,7 +4781,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4723,7 +4792,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } } while (s4 !== peg$FAILED) { @@ -4735,7 +4804,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } } } @@ -4744,7 +4813,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } if (s4 !== peg$FAILED) { s5 = []; @@ -4753,7 +4822,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -4762,11 +4831,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } } peg$savedPos = s0; - s0 = peg$f121(s1, s3, s5); + s0 = peg$f123(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4778,7 +4847,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } return s0; @@ -4795,7 +4864,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4804,7 +4873,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } } s2 = input.charAt(peg$currPos); @@ -4812,7 +4881,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4823,7 +4892,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4839,15 +4908,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c129; + s6 = peg$c131; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f122(s1); + s4 = peg$f124(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4870,15 +4939,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c130; + s6 = peg$c132; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f123(s1); + s4 = peg$f125(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4901,15 +4970,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c131; + s6 = peg$c133; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e145); } + if (peg$silentFails === 0) { peg$fail(peg$e147); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f124(s1); + s4 = peg$f126(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4931,7 +5000,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4947,15 +5016,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c129; + s6 = peg$c131; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f122(s1); + s4 = peg$f124(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4978,15 +5047,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c130; + s6 = peg$c132; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f123(s1); + s4 = peg$f125(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5009,15 +5078,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c131; + s6 = peg$c133; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e145); } + if (peg$silentFails === 0) { peg$fail(peg$e147); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f124(s1); + s4 = peg$f126(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5034,7 +5103,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f125(s1, s3, s4); + s0 = peg$f127(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -5046,7 +5115,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } return s0; @@ -5061,7 +5130,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -5099,7 +5168,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e146); } + if (peg$silentFails === 0) { peg$fail(peg$e148); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5108,7 +5177,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e146); } + if (peg$silentFails === 0) { peg$fail(peg$e148); } } } s2 = []; @@ -5117,7 +5186,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e147); } + if (peg$silentFails === 0) { peg$fail(peg$e149); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -5126,7 +5195,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e147); } + if (peg$silentFails === 0) { peg$fail(peg$e149); } } } s3 = []; @@ -5135,7 +5204,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e148); } + if (peg$silentFails === 0) { peg$fail(peg$e150); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -5144,7 +5213,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e148); } + if (peg$silentFails === 0) { peg$fail(peg$e150); } } } s4 = peg$parseoperator(); @@ -5163,7 +5232,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e149); } + if (peg$silentFails === 0) { peg$fail(peg$e151); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5172,7 +5241,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e149); } + if (peg$silentFails === 0) { peg$fail(peg$e151); } } } s2 = peg$currPos; @@ -5219,7 +5288,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e150); } + if (peg$silentFails === 0) { peg$fail(peg$e152); } } } } @@ -5235,7 +5304,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e151); } + if (peg$silentFails === 0) { peg$fail(peg$e153); } } if (s0 === peg$FAILED) { s0 = peg$currPos; @@ -5264,24 +5333,24 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c132) { + if (s1.toLowerCase() === peg$c134) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e152); } + if (peg$silentFails === 0) { peg$fail(peg$e154); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c133) { + if (s1.toLowerCase() === peg$c135) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e153); } + if (peg$silentFails === 0) { peg$fail(peg$e155); } } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f126(); + s1 = peg$f128(); } s0 = s1; @@ -5293,24 +5362,24 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c134) { + if (s1.toLowerCase() === peg$c136) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e154); } + if (peg$silentFails === 0) { peg$fail(peg$e156); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c135) { + if (s1.toLowerCase() === peg$c137) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e155); } + if (peg$silentFails === 0) { peg$fail(peg$e157); } } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f127(); + s1 = peg$f129(); } s0 = s1; @@ -5322,24 +5391,24 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c136) { + if (s1.toLowerCase() === peg$c138) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e156); } + if (peg$silentFails === 0) { peg$fail(peg$e158); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c137) { + if (s1.toLowerCase() === peg$c139) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e157); } + if (peg$silentFails === 0) { peg$fail(peg$e159); } } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f128(); + s1 = peg$f130(); } s0 = s1; diff --git a/src/libs/SearchParser/autocompleteParser.peggy b/src/libs/SearchParser/autocompleteParser.peggy index 35dae8ec51d3..a9747b93b5a4 100644 --- a/src/libs/SearchParser/autocompleteParser.peggy +++ b/src/libs/SearchParser/autocompleteParser.peggy @@ -140,6 +140,7 @@ autocompleteKey "key" / submitterUserID / submitterPayrollID / orderDealNumbers + / approver / reportFieldDynamic / columns / limit diff --git a/src/libs/SearchParser/baseRules.peggy b/src/libs/SearchParser/baseRules.peggy index b89c857c3875..819bccbb3c05 100644 --- a/src/libs/SearchParser/baseRules.peggy +++ b/src/libs/SearchParser/baseRules.peggy @@ -98,6 +98,7 @@ title = "title"i { return "title"; } submitterUserID = "submitterUserID"i / "submitter-user-id"i { return "submitterUserID"; } submitterPayrollID = "submitterPayrollID"i / "submitter-payroll-id"i { return "submitterPayrollID"; } orderDealNumbers = "orderDealNumbers"i / "order-deal-numbers"i { return "orderDealNumbers"; } +approver = "approver"i { return "approver"; } assignee = "assignee"i { return "assignee"; } createdBy = "createdBy"i / "created-by"i { return "createdBy"; } action = "action"i { return "action"; } @@ -154,6 +155,7 @@ columnsValues / groupWeek / groupYear / groupQuarter + / groupApprover perDiem = "per-diem"i &wordBoundary { return "perDiem"; } draft = ("drafts"i / "draft"i) &wordBoundary { return "drafts"; } @@ -193,6 +195,7 @@ groupMonth = "group-month"i &wordBoundary { return "gr groupWeek = "group-week"i &wordBoundary { return "groupweek"; } groupYear = "group-year"i &wordBoundary { return "groupyear"; } groupQuarter = "group-quarter"i &wordBoundary { return "groupquarter"; } +groupApprover = "group-approver"i &wordBoundary { return "groupApprover"; } operator "operator" diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index c495e910937b..57dab6a90d22 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -259,69 +259,71 @@ function peg$parse(input, options) { var peg$c72 = "submitter-payroll-id"; var peg$c73 = "orderdealnumbers"; var peg$c74 = "order-deal-numbers"; - var peg$c75 = "assignee"; - var peg$c76 = "createdby"; - var peg$c77 = "created-by"; - var peg$c78 = "action"; - var peg$c79 = "total"; - var peg$c80 = "has"; - var peg$c81 = "is"; - var peg$c82 = "purchaseamount"; - var peg$c83 = "purchase-amount"; - var peg$c84 = "purchasecurrency"; - var peg$c85 = "purchase-currency"; - var peg$c86 = "amountdebited"; - var peg$c87 = "amount-debited"; - var peg$c88 = "amountreimbursed"; - var peg$c89 = "amount-reimbursed"; - var peg$c90 = "columns"; - var peg$c91 = "view"; - var peg$c92 = "compare"; - var peg$c93 = "per-diem"; - var peg$c94 = "drafts"; - var peg$c95 = "draft"; - var peg$c96 = "tax"; - var peg$c97 = "policy-name"; - var peg$c98 = "long-report-id"; - var peg$c99 = "exported-to"; - var peg$c100 = "exportedto"; - var peg$c101 = "exchange-rate"; - var peg$c102 = "reimbursable-total"; - var peg$c103 = "non-reimbursable-total"; - var peg$c104 = "group-from"; - var peg$c105 = "group-expenses"; - var peg$c106 = "group-total"; - var peg$c107 = "group-card"; - var peg$c108 = "group-feed"; - var peg$c109 = "group-bank-account"; - var peg$c110 = "group-withdrawn"; - var peg$c111 = "group-withdrawal-id"; - var peg$c112 = "group-amount-debited"; - var peg$c113 = "group-amount-reimbursed"; - var peg$c114 = "group-category"; - var peg$c115 = "group-tag"; - var peg$c116 = "group-merchant"; - var peg$c117 = "group-day"; - var peg$c118 = "group-month"; - var peg$c119 = "group-week"; - var peg$c120 = "group-year"; - var peg$c121 = "group-quarter"; - var peg$c122 = "*:"; - var peg$c123 = "!="; - var peg$c124 = ">="; - var peg$c125 = ">"; - var peg$c126 = "<="; - var peg$c127 = "<"; - var peg$c128 = "\\"; - var peg$c129 = "\u201C"; - var peg$c130 = "\u201D"; - var peg$c131 = "\""; - var peg$c132 = "footercount"; - var peg$c133 = "footer-count"; - var peg$c134 = "footercurrency"; - var peg$c135 = "footer-currency"; - var peg$c136 = "footertotal"; - var peg$c137 = "footer-total"; + var peg$c75 = "approver"; + var peg$c76 = "assignee"; + var peg$c77 = "createdby"; + var peg$c78 = "created-by"; + var peg$c79 = "action"; + var peg$c80 = "total"; + var peg$c81 = "has"; + var peg$c82 = "is"; + var peg$c83 = "purchaseamount"; + var peg$c84 = "purchase-amount"; + var peg$c85 = "purchasecurrency"; + var peg$c86 = "purchase-currency"; + var peg$c87 = "amountdebited"; + var peg$c88 = "amount-debited"; + var peg$c89 = "amountreimbursed"; + var peg$c90 = "amount-reimbursed"; + var peg$c91 = "columns"; + var peg$c92 = "view"; + var peg$c93 = "compare"; + var peg$c94 = "per-diem"; + var peg$c95 = "drafts"; + var peg$c96 = "draft"; + var peg$c97 = "tax"; + var peg$c98 = "policy-name"; + var peg$c99 = "long-report-id"; + var peg$c100 = "exported-to"; + var peg$c101 = "exportedto"; + var peg$c102 = "exchange-rate"; + var peg$c103 = "reimbursable-total"; + var peg$c104 = "non-reimbursable-total"; + var peg$c105 = "group-from"; + var peg$c106 = "group-expenses"; + var peg$c107 = "group-total"; + var peg$c108 = "group-card"; + var peg$c109 = "group-feed"; + var peg$c110 = "group-bank-account"; + var peg$c111 = "group-withdrawn"; + var peg$c112 = "group-withdrawal-id"; + var peg$c113 = "group-amount-debited"; + var peg$c114 = "group-amount-reimbursed"; + var peg$c115 = "group-category"; + var peg$c116 = "group-tag"; + var peg$c117 = "group-merchant"; + var peg$c118 = "group-day"; + var peg$c119 = "group-month"; + var peg$c120 = "group-week"; + var peg$c121 = "group-year"; + var peg$c122 = "group-quarter"; + var peg$c123 = "group-approver"; + var peg$c124 = "*:"; + var peg$c125 = "!="; + var peg$c126 = ">="; + var peg$c127 = ">"; + var peg$c128 = "<="; + var peg$c129 = "<"; + var peg$c130 = "\\"; + var peg$c131 = "\u201C"; + var peg$c132 = "\u201D"; + var peg$c133 = "\""; + var peg$c134 = "footercount"; + var peg$c135 = "footer-count"; + var peg$c136 = "footercurrency"; + var peg$c137 = "footer-currency"; + var peg$c138 = "footertotal"; + var peg$c139 = "footer-total"; var peg$r0 = /^[^ \t\r\n\xA0]/; var peg$r1 = /^[ \t\r\n\xA0,:=<>!]/; @@ -419,86 +421,88 @@ function peg$parse(input, options) { var peg$e77 = peg$literalExpectation("submitter-payroll-id", true); var peg$e78 = peg$literalExpectation("orderDealNumbers", true); var peg$e79 = peg$literalExpectation("order-deal-numbers", true); - var peg$e80 = peg$literalExpectation("assignee", true); - var peg$e81 = peg$literalExpectation("createdBy", true); - var peg$e82 = peg$literalExpectation("created-by", true); - var peg$e83 = peg$literalExpectation("action", true); - var peg$e84 = peg$literalExpectation("total", true); - var peg$e85 = peg$literalExpectation("has", true); - var peg$e86 = peg$literalExpectation("is", true); - var peg$e87 = peg$literalExpectation("purchaseAmount", true); - var peg$e88 = peg$literalExpectation("purchase-amount", true); - var peg$e89 = peg$literalExpectation("purchaseCurrency", true); - var peg$e90 = peg$literalExpectation("purchase-currency", true); - var peg$e91 = peg$literalExpectation("amountDebited", true); - var peg$e92 = peg$literalExpectation("amount-debited", true); - var peg$e93 = peg$literalExpectation("amountReimbursed", true); - var peg$e94 = peg$literalExpectation("amount-reimbursed", true); - var peg$e95 = peg$literalExpectation("columns", true); - var peg$e96 = peg$literalExpectation("view", true); - var peg$e97 = peg$literalExpectation("compare", true); - var peg$e98 = peg$literalExpectation("per-diem", true); - var peg$e99 = peg$literalExpectation("drafts", true); - var peg$e100 = peg$literalExpectation("draft", true); - var peg$e101 = peg$literalExpectation("tax", true); - var peg$e102 = peg$literalExpectation("policy-name", true); - var peg$e103 = peg$literalExpectation("long-report-id", true); - var peg$e104 = peg$literalExpectation("exported-to", true); - var peg$e105 = peg$classExpectation([":", "="], false, false); - var peg$e106 = peg$literalExpectation("exportedTo", true); - var peg$e107 = peg$literalExpectation("exchange-rate", true); - var peg$e108 = peg$literalExpectation("reimbursable-total", true); - var peg$e109 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e110 = peg$literalExpectation("group-from", true); - var peg$e111 = peg$literalExpectation("group-expenses", true); - var peg$e112 = peg$literalExpectation("group-total", true); - var peg$e113 = peg$literalExpectation("group-card", true); - var peg$e114 = peg$literalExpectation("group-feed", true); - var peg$e115 = peg$literalExpectation("group-bank-account", true); - var peg$e116 = peg$literalExpectation("group-withdrawn", true); - var peg$e117 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e118 = peg$literalExpectation("group-amount-debited", true); - var peg$e119 = peg$literalExpectation("group-amount-reimbursed", true); - var peg$e120 = peg$literalExpectation("group-category", true); - var peg$e121 = peg$literalExpectation("group-tag", true); - var peg$e122 = peg$literalExpectation("group-merchant", true); - var peg$e123 = peg$literalExpectation("group-day", true); - var peg$e124 = peg$literalExpectation("group-month", true); - var peg$e125 = peg$literalExpectation("group-week", true); - var peg$e126 = peg$literalExpectation("group-year", true); - var peg$e127 = peg$literalExpectation("group-quarter", true); - var peg$e128 = peg$otherExpectation("operator"); - var peg$e129 = peg$literalExpectation("*:", false); - var peg$e130 = peg$literalExpectation("!=", false); - var peg$e131 = peg$literalExpectation(">=", false); - var peg$e132 = peg$literalExpectation(">", false); - var peg$e133 = peg$literalExpectation("<=", false); - var peg$e134 = peg$literalExpectation("<", false); - var peg$e135 = peg$literalExpectation("\\", false); - var peg$e136 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); - var peg$e137 = peg$otherExpectation("word"); - var peg$e138 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e139 = peg$otherExpectation("whitespace"); - var peg$e140 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e141 = peg$otherExpectation("quote"); - var peg$e142 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e143 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e144 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e145 = peg$literalExpectation("\u201C", false); - var peg$e146 = peg$literalExpectation("\u201D", false); - var peg$e147 = peg$literalExpectation("\"", false); - var peg$e148 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e149 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e150 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e151 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e152 = peg$classExpectation([","], false, false); - var peg$e153 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); - var peg$e154 = peg$literalExpectation("footerCount", true); - var peg$e155 = peg$literalExpectation("footer-count", true); - var peg$e156 = peg$literalExpectation("footerCurrency", true); - var peg$e157 = peg$literalExpectation("footer-currency", true); - var peg$e158 = peg$literalExpectation("footerTotal", true); - var peg$e159 = peg$literalExpectation("footer-total", true); + var peg$e80 = peg$literalExpectation("approver", true); + var peg$e81 = peg$literalExpectation("assignee", true); + var peg$e82 = peg$literalExpectation("createdBy", true); + var peg$e83 = peg$literalExpectation("created-by", true); + var peg$e84 = peg$literalExpectation("action", true); + var peg$e85 = peg$literalExpectation("total", true); + var peg$e86 = peg$literalExpectation("has", true); + var peg$e87 = peg$literalExpectation("is", true); + var peg$e88 = peg$literalExpectation("purchaseAmount", true); + var peg$e89 = peg$literalExpectation("purchase-amount", true); + var peg$e90 = peg$literalExpectation("purchaseCurrency", true); + var peg$e91 = peg$literalExpectation("purchase-currency", true); + var peg$e92 = peg$literalExpectation("amountDebited", true); + var peg$e93 = peg$literalExpectation("amount-debited", true); + var peg$e94 = peg$literalExpectation("amountReimbursed", true); + var peg$e95 = peg$literalExpectation("amount-reimbursed", true); + var peg$e96 = peg$literalExpectation("columns", true); + var peg$e97 = peg$literalExpectation("view", true); + var peg$e98 = peg$literalExpectation("compare", true); + var peg$e99 = peg$literalExpectation("per-diem", true); + var peg$e100 = peg$literalExpectation("drafts", true); + var peg$e101 = peg$literalExpectation("draft", true); + var peg$e102 = peg$literalExpectation("tax", true); + var peg$e103 = peg$literalExpectation("policy-name", true); + var peg$e104 = peg$literalExpectation("long-report-id", true); + var peg$e105 = peg$literalExpectation("exported-to", true); + var peg$e106 = peg$classExpectation([":", "="], false, false); + var peg$e107 = peg$literalExpectation("exportedTo", true); + var peg$e108 = peg$literalExpectation("exchange-rate", true); + var peg$e109 = peg$literalExpectation("reimbursable-total", true); + var peg$e110 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e111 = peg$literalExpectation("group-from", true); + var peg$e112 = peg$literalExpectation("group-expenses", true); + var peg$e113 = peg$literalExpectation("group-total", true); + var peg$e114 = peg$literalExpectation("group-card", true); + var peg$e115 = peg$literalExpectation("group-feed", true); + var peg$e116 = peg$literalExpectation("group-bank-account", true); + var peg$e117 = peg$literalExpectation("group-withdrawn", true); + var peg$e118 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e119 = peg$literalExpectation("group-amount-debited", true); + var peg$e120 = peg$literalExpectation("group-amount-reimbursed", true); + var peg$e121 = peg$literalExpectation("group-category", true); + var peg$e122 = peg$literalExpectation("group-tag", true); + var peg$e123 = peg$literalExpectation("group-merchant", true); + var peg$e124 = peg$literalExpectation("group-day", true); + var peg$e125 = peg$literalExpectation("group-month", true); + var peg$e126 = peg$literalExpectation("group-week", true); + var peg$e127 = peg$literalExpectation("group-year", true); + var peg$e128 = peg$literalExpectation("group-quarter", true); + var peg$e129 = peg$literalExpectation("group-approver", true); + var peg$e130 = peg$otherExpectation("operator"); + var peg$e131 = peg$literalExpectation("*:", false); + var peg$e132 = peg$literalExpectation("!=", false); + var peg$e133 = peg$literalExpectation(">=", false); + var peg$e134 = peg$literalExpectation(">", false); + var peg$e135 = peg$literalExpectation("<=", false); + var peg$e136 = peg$literalExpectation("<", false); + var peg$e137 = peg$literalExpectation("\\", false); + var peg$e138 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); + var peg$e139 = peg$otherExpectation("word"); + var peg$e140 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e141 = peg$otherExpectation("whitespace"); + var peg$e142 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e143 = peg$otherExpectation("quote"); + var peg$e144 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e145 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e146 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e147 = peg$literalExpectation("\u201C", false); + var peg$e148 = peg$literalExpectation("\u201D", false); + var peg$e149 = peg$literalExpectation("\"", false); + var peg$e150 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e151 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e152 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e153 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e154 = peg$classExpectation([","], false, false); + var peg$e155 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e156 = peg$literalExpectation("footerCount", true); + var peg$e157 = peg$literalExpectation("footer-count", true); + var peg$e158 = peg$literalExpectation("footerCurrency", true); + var peg$e159 = peg$literalExpectation("footer-currency", true); + var peg$e160 = peg$literalExpectation("footerTotal", true); + var peg$e161 = peg$literalExpectation("footer-total", true); var peg$f0 = function(filters) { return applyDefaults(filters); }; var peg$f1 = function(head, tail) { @@ -651,92 +655,94 @@ function peg$parse(input, options) { var peg$f57 = function() { return "submitterUserID"; }; var peg$f58 = function() { return "submitterPayrollID"; }; var peg$f59 = function() { return "orderDealNumbers"; }; - var peg$f60 = function() { return "assignee"; }; - var peg$f61 = function() { return "createdBy"; }; - var peg$f62 = function() { return "action"; }; - var peg$f63 = function() {return "total"; }; - var peg$f64 = function() {return "has"; }; - var peg$f65 = function() {return "is"; }; - var peg$f66 = function() {return "purchaseAmount"}; - var peg$f67 = function() {return "purchaseCurrency"}; - var peg$f68 = function() {return "amountDebited"}; - var peg$f69 = function() {return "amountReimbursed"}; - var peg$f70 = function() { + var peg$f60 = function() { return "approver"; }; + var peg$f61 = function() { return "assignee"; }; + var peg$f62 = function() { return "createdBy"; }; + var peg$f63 = function() { return "action"; }; + var peg$f64 = function() {return "total"; }; + var peg$f65 = function() {return "has"; }; + var peg$f66 = function() {return "is"; }; + var peg$f67 = function() {return "purchaseAmount"}; + var peg$f68 = function() {return "purchaseCurrency"}; + var peg$f69 = function() {return "amountDebited"}; + var peg$f70 = function() {return "amountReimbursed"}; + var peg$f71 = function() { isColumnsContext = true; return "columns"; }; - var peg$f71 = function() {return "view"}; - var peg$f72 = function() {return "compare"}; - var peg$f73 = function() { return isColumnsContext; }; - var peg$f74 = function() { return "perDiem"; }; - var peg$f75 = function() { return "drafts"; }; - var peg$f76 = function() { return "originalamount"; }; - var peg$f77 = function() { return "taxAmount"; }; - var peg$f78 = function() { return "taxrate"; }; - var peg$f79 = function() { return "policyname"; }; - var peg$f80 = function() { return "withdrawalID"; }; - var peg$f81 = function() { return "bankAccount"; }; - var peg$f82 = function() { return "reportID"; }; - var peg$f83 = function() { return "base62ReportID"; }; - var peg$f84 = function() { return "exportedto"; }; - var peg$f85 = function() { return "exportedTo"; }; + var peg$f72 = function() {return "view"}; + var peg$f73 = function() {return "compare"}; + var peg$f74 = function() { return isColumnsContext; }; + var peg$f75 = function() { return "perDiem"; }; + var peg$f76 = function() { return "drafts"; }; + var peg$f77 = function() { return "originalamount"; }; + var peg$f78 = function() { return "taxAmount"; }; + var peg$f79 = function() { return "taxrate"; }; + var peg$f80 = function() { return "policyname"; }; + var peg$f81 = function() { return "withdrawalID"; }; + var peg$f82 = function() { return "bankAccount"; }; + var peg$f83 = function() { return "reportID"; }; + var peg$f84 = function() { return "base62ReportID"; }; + var peg$f85 = function() { return "exportedto"; }; var peg$f86 = function() { return "exportedTo"; }; - var peg$f87 = function() { return "exchangeRate"; }; - var peg$f88 = function() { return "reimbursableTotal"; }; - var peg$f89 = function() { return "nonReimbursableTotal"; }; - var peg$f90 = function() { return "groupFrom"; }; - var peg$f91 = function() { return "groupExpenses"; }; - var peg$f92 = function() { return "groupTotal"; }; - var peg$f93 = function() { return "groupCard"; }; - var peg$f94 = function() { return "groupFeed"; }; - var peg$f95 = function() { return "groupBankAccount"; }; - var peg$f96 = function() { return "groupWithdrawn"; }; - var peg$f97 = function() { return "groupWithdrawalID"; }; - var peg$f98 = function() { return "groupAmountDebited"; }; - var peg$f99 = function() { return "groupAmountReimbursed"; }; - var peg$f100 = function() { return "amountDebited"; }; - var peg$f101 = function() { return "amountReimbursed"; }; - var peg$f102 = function() { return "groupCategory"; }; - var peg$f103 = function() { return "groupTag"; }; - var peg$f104 = function() { return "groupMerchant"; }; - var peg$f105 = function() { return "groupday"; }; - var peg$f106 = function() { return "groupmonth"; }; - var peg$f107 = function() { return "groupweek"; }; - var peg$f108 = function() { return "groupyear"; }; - var peg$f109 = function() { return "groupquarter"; }; - var peg$f110 = function() { return "contains"; }; - var peg$f111 = function() { return "eq"; }; - var peg$f112 = function() { return "neq"; }; - var peg$f113 = function() { return "gte"; }; - var peg$f114 = function() { return "gt"; }; - var peg$f115 = function() { return "lte"; }; - var peg$f116 = function() { return "lt"; }; - var peg$f117 = function(o) { + var peg$f87 = function() { return "exportedTo"; }; + var peg$f88 = function() { return "exchangeRate"; }; + var peg$f89 = function() { return "reimbursableTotal"; }; + var peg$f90 = function() { return "nonReimbursableTotal"; }; + var peg$f91 = function() { return "groupFrom"; }; + var peg$f92 = function() { return "groupExpenses"; }; + var peg$f93 = function() { return "groupTotal"; }; + var peg$f94 = function() { return "groupCard"; }; + var peg$f95 = function() { return "groupFeed"; }; + var peg$f96 = function() { return "groupBankAccount"; }; + var peg$f97 = function() { return "groupWithdrawn"; }; + var peg$f98 = function() { return "groupWithdrawalID"; }; + var peg$f99 = function() { return "groupAmountDebited"; }; + var peg$f100 = function() { return "groupAmountReimbursed"; }; + var peg$f101 = function() { return "amountDebited"; }; + var peg$f102 = function() { return "amountReimbursed"; }; + var peg$f103 = function() { return "groupCategory"; }; + var peg$f104 = function() { return "groupTag"; }; + var peg$f105 = function() { return "groupMerchant"; }; + var peg$f106 = function() { return "groupday"; }; + var peg$f107 = function() { return "groupmonth"; }; + var peg$f108 = function() { return "groupweek"; }; + var peg$f109 = function() { return "groupyear"; }; + var peg$f110 = function() { return "groupquarter"; }; + var peg$f111 = function() { return "groupApprover"; }; + var peg$f112 = function() { return "contains"; }; + var peg$f113 = function() { return "eq"; }; + var peg$f114 = function() { return "neq"; }; + var peg$f115 = function() { return "gte"; }; + var peg$f116 = function() { return "gt"; }; + var peg$f117 = function() { return "lte"; }; + var peg$f118 = function() { return "lt"; }; + var peg$f119 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq" || o === "contains"); } isColumnsContext = false; return o; }; - var peg$f118 = function(c) { return c; }; - var peg$f119 = function(chars) { return chars.join("").trim(); }; - var peg$f120 = function() { + var peg$f120 = function(c) { return c; }; + var peg$f121 = function(chars) { return chars.join("").trim(); }; + var peg$f122 = function() { isColumnsContext = false; return "and"; }; - var peg$f121 = function() { return expectingNestedQuote; }; - var peg$f122 = function(start, inner, end) { //handle no-breaking space + var peg$f123 = function() { return expectingNestedQuote; }; + var peg$f124 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f123 = function(start) {return "“"}; - var peg$f124 = function(start) {return "”"}; - var peg$f125 = function(start) {return "\""}; - var peg$f126 = function(start, inner, end) { + var peg$f125 = function(start) {return "“"}; + var peg$f126 = function(start) {return "”"}; + var peg$f127 = function(start) {return "\""}; + var peg$f128 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; - var peg$f127 = function() { return "footerCount"; }; - var peg$f128 = function() { return "footerCurrency"; }; - var peg$f129 = function() { return "footerTotal"; }; + var peg$f129 = function() { return "footerCount"; }; + var peg$f130 = function() { return "footerCurrency"; }; + var peg$f131 = function() { return "footerTotal"; }; var peg$currPos = options.peg$currPos | 0; var peg$savedPos = peg$currPos; var peg$posDetailsCache = [{ line: 1, column: 1 }]; @@ -1322,39 +1328,42 @@ function peg$parse(input, options) { if (s1 === peg$FAILED) { s1 = peg$parseorderDealNumbers(); if (s1 === peg$FAILED) { - s1 = peg$parseassignee(); + s1 = peg$parseapprover(); 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$parsedeclined(); + s1 = peg$parsebillable(); if (s1 === peg$FAILED) { - s1 = peg$parseheld(); + s1 = peg$parsedeclined(); if (s1 === peg$FAILED) { - s1 = peg$parseaction(); + s1 = peg$parseheld(); 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$parsepolicyID(); + s1 = peg$parsepurchaseAmount(); if (s1 === peg$FAILED) { - s1 = peg$parsestatus(); + s1 = peg$parsepolicyID(); if (s1 === peg$FAILED) { - s1 = peg$parsefooterCount(); + s1 = peg$parsestatus(); if (s1 === peg$FAILED) { - s1 = peg$parsefooterCurrency(); + s1 = peg$parsefooterCount(); if (s1 === peg$FAILED) { - s1 = peg$parsefooterTotal(); + s1 = peg$parsefooterCurrency(); if (s1 === peg$FAILED) { - s1 = peg$parsereportFieldDynamic(); + s1 = peg$parsefooterTotal(); + if (s1 === peg$FAILED) { + s1 = peg$parsereportFieldDynamic(); + } } } } @@ -2803,7 +2812,7 @@ function peg$parse(input, options) { return s0; } - function peg$parseassignee() { + function peg$parseapprover() { var s0, s1; s0 = peg$currPos; @@ -2823,28 +2832,48 @@ function peg$parse(input, options) { return s0; } + function peg$parseassignee() { + var s0, s1; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 8); + if (s1.toLowerCase() === peg$c76) { + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e81); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f61(); + } + s0 = s1; + + return s0; + } + function peg$parsecreatedBy() { var s0, s1; s0 = input.substr(peg$currPos, 9); - if (s0.toLowerCase() === peg$c76) { + if (s0.toLowerCase() === peg$c77) { peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e81); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c78) { peg$currPos += 10; } 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$f61(); + s1 = peg$f62(); } s0 = s1; } @@ -2857,15 +2886,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c78) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e83); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f62(); + s1 = peg$f63(); } s0 = s1; @@ -2877,15 +2906,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c79) { + if (s1.toLowerCase() === peg$c80) { peg$currPos += 5; } 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$f63(); + s1 = peg$f64(); } s0 = s1; @@ -2897,15 +2926,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c80) { + if (s1.toLowerCase() === peg$c81) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e85); } + if (peg$silentFails === 0) { peg$fail(peg$e86); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f64(); + s1 = peg$f65(); } s0 = s1; @@ -2917,15 +2946,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 2); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c82) { peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e87); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f65(); + s1 = peg$f66(); } s0 = s1; @@ -2936,24 +2965,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 14); - if (s0.toLowerCase() === peg$c82) { + if (s0.toLowerCase() === peg$c83) { peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e87); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c84) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e88); } + if (peg$silentFails === 0) { peg$fail(peg$e89); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f66(); + s1 = peg$f67(); } s0 = s1; } @@ -2965,24 +2994,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c84) { + if (s0.toLowerCase() === peg$c85) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e89); } + if (peg$silentFails === 0) { peg$fail(peg$e90); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c85) { + if (s1.toLowerCase() === peg$c86) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e90); } + if (peg$silentFails === 0) { peg$fail(peg$e91); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f67(); + s1 = peg$f68(); } s0 = s1; } @@ -2994,24 +3023,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 13); - if (s0.toLowerCase() === peg$c86) { + if (s0.toLowerCase() === peg$c87) { peg$currPos += 13; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e91); } + if (peg$silentFails === 0) { peg$fail(peg$e92); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c88) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e92); } + if (peg$silentFails === 0) { peg$fail(peg$e93); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f68(); + s1 = peg$f69(); } s0 = s1; } @@ -3023,24 +3052,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c88) { + if (s0.toLowerCase() === peg$c89) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e93); } + if (peg$silentFails === 0) { peg$fail(peg$e94); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e94); } + if (peg$silentFails === 0) { peg$fail(peg$e95); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f69(); + s1 = peg$f70(); } s0 = s1; } @@ -3053,15 +3082,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c90) { + if (s1.toLowerCase() === peg$c91) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e95); } + if (peg$silentFails === 0) { peg$fail(peg$e96); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f70(); + s1 = peg$f71(); } s0 = s1; @@ -3073,15 +3102,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c91) { + if (s1.toLowerCase() === peg$c92) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e96); } + if (peg$silentFails === 0) { peg$fail(peg$e97); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f71(); + s1 = peg$f72(); } s0 = s1; @@ -3093,15 +3122,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c93) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e97); } + if (peg$silentFails === 0) { peg$fail(peg$e98); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f72(); + s1 = peg$f73(); } s0 = s1; @@ -3113,7 +3142,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f73(); + s1 = peg$f74(); if (s1) { s1 = undefined; } else { @@ -3208,6 +3237,9 @@ function peg$parse(input, options) { s0 = peg$parsegroupYear(); if (s0 === peg$FAILED) { s0 = peg$parsegroupQuarter(); + if (s0 === peg$FAILED) { + s0 = peg$parsegroupApprover(); + } } } } @@ -3248,11 +3280,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c93) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 8; } 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; @@ -3267,7 +3299,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; @@ -3285,19 +3317,19 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c94) { + if (s1.toLowerCase() === peg$c95) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e99); } + if (peg$silentFails === 0) { peg$fail(peg$e100); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c95) { + if (s1.toLowerCase() === peg$c96) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e100); } + if (peg$silentFails === 0) { peg$fail(peg$e101); } } } if (s1 !== peg$FAILED) { @@ -3313,7 +3345,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; @@ -3331,11 +3363,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c84) { peg$currPos += 15; } 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; @@ -3350,7 +3382,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; @@ -3368,11 +3400,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c96) { + if (s1.toLowerCase() === peg$c97) { peg$currPos += 3; } 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; @@ -3387,7 +3419,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; @@ -3424,7 +3456,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; @@ -3442,11 +3474,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c97) { + if (s1.toLowerCase() === peg$c98) { peg$currPos += 11; } 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; @@ -3461,7 +3493,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; @@ -3498,7 +3530,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; @@ -3535,7 +3567,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; @@ -3553,11 +3585,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c98) { + if (s1.toLowerCase() === peg$c99) { peg$currPos += 14; } 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; @@ -3572,7 +3604,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; @@ -3609,7 +3641,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; @@ -3627,11 +3659,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c99) { + if (s1.toLowerCase() === peg$c100) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e104); } + if (peg$silentFails === 0) { peg$fail(peg$e105); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3646,7 +3678,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; @@ -3671,7 +3703,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e105); } + if (peg$silentFails === 0) { peg$fail(peg$e106); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -3690,11 +3722,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c100) { + if (s1.toLowerCase() === peg$c101) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e106); } + if (peg$silentFails === 0) { peg$fail(peg$e107); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3709,7 +3741,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; @@ -3721,11 +3753,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c99) { + if (s1.toLowerCase() === peg$c100) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e104); } + if (peg$silentFails === 0) { peg$fail(peg$e105); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3740,7 +3772,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; @@ -3759,11 +3791,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c101) { + if (s1.toLowerCase() === peg$c102) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e107); } + if (peg$silentFails === 0) { peg$fail(peg$e108); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3778,7 +3810,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; @@ -3796,11 +3828,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c102) { + if (s1.toLowerCase() === peg$c103) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e108); } + if (peg$silentFails === 0) { peg$fail(peg$e109); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3815,7 +3847,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; @@ -3833,11 +3865,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 22); - if (s1.toLowerCase() === peg$c103) { + if (s1.toLowerCase() === peg$c104) { peg$currPos += 22; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3852,7 +3884,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; @@ -3870,11 +3902,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c104) { + if (s1.toLowerCase() === peg$c105) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e110); } + if (peg$silentFails === 0) { peg$fail(peg$e111); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3889,7 +3921,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f90(); + s0 = peg$f91(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3907,11 +3939,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c105) { + if (s1.toLowerCase() === peg$c106) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3926,7 +3958,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f91(); + s0 = peg$f92(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3944,11 +3976,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c106) { + if (s1.toLowerCase() === peg$c107) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e112); } + if (peg$silentFails === 0) { peg$fail(peg$e113); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3963,7 +3995,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f92(); + s0 = peg$f93(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3981,11 +4013,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c107) { + if (s1.toLowerCase() === peg$c108) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4000,7 +4032,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f93(); + s0 = peg$f94(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4018,11 +4050,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c108) { + if (s1.toLowerCase() === peg$c109) { peg$currPos += 10; } 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; @@ -4037,7 +4069,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f94(); + s0 = peg$f95(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4055,11 +4087,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c109) { + if (s1.toLowerCase() === peg$c110) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4074,7 +4106,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f95(); + s0 = peg$f96(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4092,11 +4124,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c110) { + if (s1.toLowerCase() === peg$c111) { peg$currPos += 15; } 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; @@ -4111,7 +4143,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f96(); + s0 = peg$f97(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4129,11 +4161,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 19); - if (s1.toLowerCase() === peg$c111) { + if (s1.toLowerCase() === peg$c112) { peg$currPos += 19; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4148,7 +4180,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f97(); + s0 = peg$f98(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4166,11 +4198,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 20); - if (s1.toLowerCase() === peg$c112) { + if (s1.toLowerCase() === peg$c113) { peg$currPos += 20; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4185,7 +4217,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f98(); + s0 = peg$f99(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4203,11 +4235,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 23); - if (s1.toLowerCase() === peg$c113) { + if (s1.toLowerCase() === peg$c114) { peg$currPos += 23; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4222,7 +4254,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f99(); + s0 = peg$f100(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4240,11 +4272,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c88) { peg$currPos += 14; } 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; @@ -4259,7 +4291,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f100(); + s0 = peg$f101(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4277,11 +4309,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 17; } 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; @@ -4296,7 +4328,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f101(); + s0 = peg$f102(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4314,11 +4346,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c114) { + if (s1.toLowerCase() === peg$c115) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4333,7 +4365,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f102(); + s0 = peg$f103(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4351,11 +4383,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c115) { + if (s1.toLowerCase() === peg$c116) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4370,7 +4402,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f103(); + s0 = peg$f104(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4388,11 +4420,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c116) { + if (s1.toLowerCase() === peg$c117) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4407,7 +4439,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f104(); + s0 = peg$f105(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4425,11 +4457,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c117) { + if (s1.toLowerCase() === peg$c118) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4444,7 +4476,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f105(); + s0 = peg$f106(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4462,11 +4494,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c118) { + if (s1.toLowerCase() === peg$c119) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4481,7 +4513,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f106(); + s0 = peg$f107(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4499,11 +4531,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c119) { + if (s1.toLowerCase() === peg$c120) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e125); } + if (peg$silentFails === 0) { peg$fail(peg$e126); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4518,7 +4550,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f107(); + s0 = peg$f108(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4536,11 +4568,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c120) { + if (s1.toLowerCase() === peg$c121) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e126); } + if (peg$silentFails === 0) { peg$fail(peg$e127); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4555,7 +4587,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f108(); + s0 = peg$f109(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4573,11 +4605,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c121) { + if (s1.toLowerCase() === peg$c122) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e128); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4592,7 +4624,44 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f109(); + s0 = peg$f110(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsegroupApprover() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 14); + if (s1.toLowerCase() === peg$c123) { + peg$currPos += 14; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e129); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewordBoundary(); + peg$silentFails--; + if (s3 !== peg$FAILED) { + peg$currPos = s2; + s2 = undefined; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f111(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4610,16 +4679,16 @@ function peg$parse(input, options) { peg$silentFails++; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c122) { - s1 = peg$c122; + if (input.substr(peg$currPos, 2) === peg$c124) { + s1 = peg$c124; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f110(); + s1 = peg$f112(); } s0 = s1; if (s0 === peg$FAILED) { @@ -4629,81 +4698,81 @@ function peg$parse(input, options) { 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$f111(); + s1 = peg$f113(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c123) { - s1 = peg$c123; + if (input.substr(peg$currPos, 2) === peg$c125) { + s1 = peg$c125; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f112(); + s1 = peg$f114(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c124) { - s1 = peg$c124; + if (input.substr(peg$currPos, 2) === peg$c126) { + s1 = peg$c126; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f113(); + s1 = peg$f115(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c125; + s1 = peg$c127; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f114(); + s1 = peg$f116(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c126) { - s1 = peg$c126; + if (input.substr(peg$currPos, 2) === peg$c128) { + s1 = peg$c128; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f115(); + s1 = peg$f117(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c127; + s1 = peg$c129; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f116(); + s1 = peg$f118(); } s0 = s1; } @@ -4715,7 +4784,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } return s0; @@ -4728,7 +4797,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f117(s1); + s1 = peg$f119(s1); } s0 = s1; @@ -4740,11 +4809,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c128; + s1 = peg$c130; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s1 !== peg$FAILED) { s2 = input.charAt(peg$currPos); @@ -4752,11 +4821,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f118(s2); + s0 = peg$f120(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4782,7 +4851,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } } if (s2 !== peg$FAILED) { @@ -4795,7 +4864,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } } } @@ -4804,13 +4873,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f119(s1); + s1 = peg$f121(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } return s0; @@ -4822,7 +4891,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f120(); + s1 = peg$f122(); s0 = s1; return s0; @@ -4838,7 +4907,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -4847,12 +4916,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } return s0; } @@ -4862,7 +4931,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f121(); + s1 = peg$f123(); if (s1) { s1 = undefined; } else { @@ -4899,7 +4968,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4908,7 +4977,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } } s2 = input.charAt(peg$currPos); @@ -4916,7 +4985,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4927,7 +4996,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } } while (s4 !== peg$FAILED) { @@ -4939,7 +5008,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } } } @@ -4948,7 +5017,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } if (s4 !== peg$FAILED) { s5 = []; @@ -4957,7 +5026,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -4966,11 +5035,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } } peg$savedPos = s0; - s0 = peg$f122(s1, s3, s5); + s0 = peg$f124(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4982,7 +5051,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } return s0; @@ -4999,7 +5068,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5008,7 +5077,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } } s2 = input.charAt(peg$currPos); @@ -5016,7 +5085,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } if (s2 !== peg$FAILED) { s3 = []; @@ -5027,7 +5096,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -5043,15 +5112,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c129; + s6 = peg$c131; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e145); } + if (peg$silentFails === 0) { peg$fail(peg$e147); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f123(s1); + s4 = peg$f125(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5074,15 +5143,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c130; + s6 = peg$c132; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e146); } + if (peg$silentFails === 0) { peg$fail(peg$e148); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f124(s1); + s4 = peg$f126(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5105,15 +5174,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c131; + s6 = peg$c133; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e147); } + if (peg$silentFails === 0) { peg$fail(peg$e149); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f125(s1); + s4 = peg$f127(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5135,7 +5204,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -5151,15 +5220,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c129; + s6 = peg$c131; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e145); } + if (peg$silentFails === 0) { peg$fail(peg$e147); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f123(s1); + s4 = peg$f125(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5182,15 +5251,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c130; + s6 = peg$c132; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e146); } + if (peg$silentFails === 0) { peg$fail(peg$e148); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f124(s1); + s4 = peg$f126(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5213,15 +5282,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c131; + s6 = peg$c133; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e147); } + if (peg$silentFails === 0) { peg$fail(peg$e149); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f125(s1); + s4 = peg$f127(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -5238,7 +5307,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f126(s1, s3, s4); + s0 = peg$f128(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -5250,7 +5319,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } return s0; @@ -5265,7 +5334,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -5303,7 +5372,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e148); } + if (peg$silentFails === 0) { peg$fail(peg$e150); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5312,7 +5381,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e148); } + if (peg$silentFails === 0) { peg$fail(peg$e150); } } } s2 = []; @@ -5321,7 +5390,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e149); } + if (peg$silentFails === 0) { peg$fail(peg$e151); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -5330,7 +5399,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e149); } + if (peg$silentFails === 0) { peg$fail(peg$e151); } } } s3 = []; @@ -5339,7 +5408,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e150); } + if (peg$silentFails === 0) { peg$fail(peg$e152); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -5348,7 +5417,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e150); } + if (peg$silentFails === 0) { peg$fail(peg$e152); } } } s4 = peg$parseoperator(); @@ -5367,7 +5436,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e151); } + if (peg$silentFails === 0) { peg$fail(peg$e153); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5376,7 +5445,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e151); } + if (peg$silentFails === 0) { peg$fail(peg$e153); } } } s2 = peg$currPos; @@ -5423,7 +5492,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e152); } + if (peg$silentFails === 0) { peg$fail(peg$e154); } } } } @@ -5439,7 +5508,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e153); } + if (peg$silentFails === 0) { peg$fail(peg$e155); } } if (s0 === peg$FAILED) { s0 = peg$currPos; @@ -5468,24 +5537,24 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c132) { + if (s1.toLowerCase() === peg$c134) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e154); } + if (peg$silentFails === 0) { peg$fail(peg$e156); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c133) { + if (s1.toLowerCase() === peg$c135) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e155); } + if (peg$silentFails === 0) { peg$fail(peg$e157); } } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f127(); + s1 = peg$f129(); } s0 = s1; @@ -5497,24 +5566,24 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c134) { + if (s1.toLowerCase() === peg$c136) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e156); } + if (peg$silentFails === 0) { peg$fail(peg$e158); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c135) { + if (s1.toLowerCase() === peg$c137) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e157); } + if (peg$silentFails === 0) { peg$fail(peg$e159); } } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f128(); + s1 = peg$f130(); } s0 = s1; @@ -5526,24 +5595,24 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c136) { + if (s1.toLowerCase() === peg$c138) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e158); } + if (peg$silentFails === 0) { peg$fail(peg$e160); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 12); - if (s1.toLowerCase() === peg$c137) { + if (s1.toLowerCase() === peg$c139) { peg$currPos += 12; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e159); } + if (peg$silentFails === 0) { peg$fail(peg$e161); } } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f129(); + s1 = peg$f131(); } s0 = s1; @@ -5563,6 +5632,7 @@ function peg$parse(input, options) { week: "groupweek", year: "groupyear", quarter: "groupquarter", + approver: "groupExpenses", }; const GROUP_BY_DEFAULT_SORT_ORDER = { @@ -5577,10 +5647,9 @@ function peg$parse(input, options) { week: "desc", year: "desc", quarter: "desc", + approver: "desc", }; - const DEFAULT_SORT_BY_VALUES = new Set([...Object.values(GROUP_BY_DEFAULT_SORT), "date"]); - const TIME_BASED_GROUP_BY = new Set(["day", "week", "month", "year", "quarter"]); const defaultValues = { @@ -5599,7 +5668,7 @@ function peg$parse(input, options) { ]); function isDefaultSortValue(sortBy) { - return DEFAULT_SORT_BY_VALUES.has(sortBy); + return sortBy === "date" || sortBy === GROUP_BY_DEFAULT_SORT[defaultValues.groupBy]; } function getDefaultSortByForGroupBy(groupBy) { diff --git a/src/libs/SearchParser/searchParser.peggy b/src/libs/SearchParser/searchParser.peggy index 679a79d3a4fb..4a0ea07c5af2 100644 --- a/src/libs/SearchParser/searchParser.peggy +++ b/src/libs/SearchParser/searchParser.peggy @@ -40,6 +40,7 @@ week: "groupweek", year: "groupyear", quarter: "groupquarter", + approver: "groupExpenses", }; const GROUP_BY_DEFAULT_SORT_ORDER = { @@ -54,10 +55,9 @@ week: "desc", year: "desc", quarter: "desc", + approver: "desc", }; - const DEFAULT_SORT_BY_VALUES = new Set([...Object.values(GROUP_BY_DEFAULT_SORT), "date"]); - const TIME_BASED_GROUP_BY = new Set(["day", "week", "month", "year", "quarter"]); const defaultValues = { @@ -76,7 +76,7 @@ ]); function isDefaultSortValue(sortBy) { - return DEFAULT_SORT_BY_VALUES.has(sortBy); + return sortBy === "date" || sortBy === GROUP_BY_DEFAULT_SORT[defaultValues.groupBy]; } function getDefaultSortByForGroupBy(groupBy) { @@ -318,6 +318,7 @@ key "key" / submitterUserID / submitterPayrollID / orderDealNumbers + / approver / assignee / createdBy / reimbursable diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index 4204d48d0d53..ec8485bbfac6 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -13,6 +13,7 @@ import type { ReportActionListItemType, SearchListItem, TaskListItemType, + TransactionApproverGroupListItemType, TransactionCardGroupListItemType, TransactionCategoryGroupListItemType, TransactionDayGroupListItemType, @@ -282,6 +283,7 @@ type TransactionMonthGroupSorting = ColumnSortMapping; type TransactionYearGroupSorting = ColumnSortMapping; type TransactionQuarterGroupSorting = ColumnSortMapping; +type TransactionApproverGroupSorting = ColumnSortMapping; type GetReportSectionsParams = { data: OnyxTypes.SearchResults['data']; @@ -452,6 +454,12 @@ const transactionQuarterGroupColumnNamesToSortingProperty: TransactionQuarterGro ...transactionGroupBaseSortingProperties, }; +const transactionApproverGroupColumnNamesToSortingProperty: TransactionApproverGroupSorting = { + [CONST.SEARCH.TABLE_COLUMNS.AVATAR]: null, + [CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER]: 'formattedApprover' as const, + ...transactionGroupBaseSortingProperties, +}; + type TaskStatusPredicate = (taskReport?: OnyxTypes.Report | SearchTask) => boolean; const taskStatusActionMapping: Record = { @@ -969,6 +977,10 @@ function isTransactionQuarterGroupListItemType(item: ListItem): item is Transact return isTransactionGroupListItemType(item) && 'groupedBy' in item && item.groupedBy === CONST.SEARCH.GROUP_BY.QUARTER; } +function isTransactionApproverGroupListItemType(item: ListItem): item is TransactionApproverGroupListItemType { + return isTransactionGroupListItemType(item) && 'groupedBy' in item && item.groupedBy === CONST.SEARCH.GROUP_BY.APPROVER; +} + /** * Type guard that checks if a list of search items contains grouped transaction data. * When a search has a groupBy parameter, all items share the same shape, so checking the first element is sufficient. @@ -3029,6 +3041,12 @@ function getSelectedGroupFilterEntry(groupBy: string, groupData: unknown): {key: switch (groupBy) { case CONST.SEARCH.GROUP_BY.FROM: return {key: CONST.SEARCH.SYNTAX_FILTER_KEYS.FROM, value: (groupData as SearchMemberGroup).accountID}; + case CONST.SEARCH.GROUP_BY.APPROVER: { + if (!groupData || typeof groupData !== 'object' || !('accountID' in groupData) || typeof groupData.accountID !== 'number') { + return undefined; + } + return {key: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVER, value: groupData.accountID}; + } case CONST.SEARCH.GROUP_BY.CARD: return {key: CONST.SEARCH.SYNTAX_FILTER_KEYS.CARD_ID, value: (groupData as SearchCardGroup).cardID}; case CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID: @@ -3169,6 +3187,12 @@ function getActiveGroupSearchHashes(data: OnyxTypes.SearchResults['data'] | unde } break; } + case CONST.SEARCH.GROUP_BY.APPROVER: { + if ('accountID' in group && typeof group.accountID === 'number') { + transactionsQueryJSON = buildApproverGroupQuery(queryJSON, group.accountID); + } + break; + } default: break; } @@ -3205,6 +3229,10 @@ function buildDateRangeGroupQuery(queryJSON: SearchQueryJSON, dateRange: {start: return {transactionsQueryJSON, start, end}; } +function buildApproverGroupQuery(queryJSON: SearchQueryJSON, accountID: number): SearchQueryJSON | undefined { + return buildSpecificGroupQuery(queryJSON, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVER, accountID); +} + /** * @private * Organizes data into List Sections grouped by member for display, for the TransactionGroupListItemType of Search Results. @@ -3717,6 +3745,46 @@ function getQuarterSections( return [quarterSectionsValues, quarterSectionsValues.length, hasDeletedTransactionInData(data)]; } +/** + * Organizes data into List Sections grouped by approver for display. + * + * Do not use directly, use only via `getSections()` facade. + */ +function getApproverSections( + data: OnyxTypes.SearchResults['data'], + queryJSON: SearchQueryJSON | undefined, + formatPhoneNumber: LocaleContextProps['formatPhoneNumber'], + translate: LocalizedTranslate, + onyxPersonalDetailsList?: OnyxTypes.PersonalDetailsList, +): [TransactionApproverGroupListItemType[], number, boolean] { + const approverSections: Record = {}; + + for (const key in data) { + if (isGroupEntry(key)) { + const approverGroup = data[key]; + if (!('accountID' in approverGroup) || !approverGroup.accountID) { + continue; + } + + const personalDetails = data.personalDetailsList?.[approverGroup.accountID] ?? onyxPersonalDetailsList?.[approverGroup.accountID] ?? emptyPersonalDetails; + const transactionsQueryJSON = queryJSON ? buildApproverGroupQuery(queryJSON, approverGroup.accountID) : undefined; + + approverSections[key] = { + groupedBy: CONST.SEARCH.GROUP_BY.APPROVER, + transactions: [], + transactionsQueryJSON, + ...personalDetails, + ...approverGroup, + formattedApprover: temporaryGetDisplayNameOrDefault({passedPersonalDetails: personalDetails, translate, formatPhoneNumber}), + keyForList: key, + }; + } + } + + const approverSectionsValues = Object.values(approverSections); + return [approverSectionsValues, approverSectionsValues.length, hasDeletedTransactionInData(data)]; +} + /** * Organizes data into appropriate list sections for display based on the type of search results. */ @@ -3802,6 +3870,8 @@ function getSections({ return getYearSections(data, queryJSON); case CONST.SEARCH.GROUP_BY.QUARTER: return getQuarterSections(data, queryJSON, dateFnsLocale); + case CONST.SEARCH.GROUP_BY.APPROVER: + return getApproverSections(data, queryJSON, formatPhoneNumber, translate, onyxPersonalDetailsList); } } @@ -3860,9 +3930,12 @@ const groupBySortFunction: Record = { [CONST.SEARCH.GROUP_BY.WEEK]: createGroupSortFunction(transactionWeekGroupColumnNamesToSortingProperty, (a, b, lc) => lc(a.week, b.week)), [CONST.SEARCH.GROUP_BY.YEAR]: createGroupSortFunction(transactionYearGroupColumnNamesToSortingProperty, (a, b) => a.year - b.year), [CONST.SEARCH.GROUP_BY.QUARTER]: createGroupSortFunction(transactionQuarterGroupColumnNamesToSortingProperty, (a, b) => a.sortKey - b.sortKey), + [CONST.SEARCH.GROUP_BY.APPROVER]: createGroupSortFunction(transactionApproverGroupColumnNamesToSortingProperty, (a, b, lc) => + lc(a.formattedApprover ?? '', b.formattedApprover ?? ''), + ), }; -const groupByRequiredColumns: Partial> = { +const groupByRequiredColumns: Partial> = { [CONST.SEARCH.GROUP_BY.FROM]: [CONST.SEARCH.TABLE_COLUMNS.GROUP_FROM], [CONST.SEARCH.GROUP_BY.CARD]: [CONST.SEARCH.TABLE_COLUMNS.GROUP_CARD], [CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID]: [CONST.SEARCH.TABLE_COLUMNS.GROUP_WITHDRAWAL_ID], @@ -3874,6 +3947,7 @@ const groupByRequiredColumns: Partial> [CONST.SEARCH.GROUP_BY.WEEK]: [CONST.SEARCH.TABLE_COLUMNS.GROUP_WEEK], [CONST.SEARCH.GROUP_BY.YEAR]: [CONST.SEARCH.TABLE_COLUMNS.GROUP_YEAR], [CONST.SEARCH.GROUP_BY.QUARTER]: [CONST.SEARCH.TABLE_COLUMNS.GROUP_QUARTER], + [CONST.SEARCH.GROUP_BY.APPROVER]: [CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER], }; /** @@ -4429,6 +4503,8 @@ function getCustomColumns(value?: SearchDataTypes | SearchGroupBy): SearchCustom return Object.values(CONST.SEARCH.GROUP_CUSTOM_COLUMNS.YEAR); case CONST.SEARCH.GROUP_BY.QUARTER: return Object.values(CONST.SEARCH.GROUP_CUSTOM_COLUMNS.QUARTER); + case CONST.SEARCH.GROUP_BY.APPROVER: + return Object.values(CONST.SEARCH.GROUP_CUSTOM_COLUMNS.APPROVER); default: return []; } @@ -4470,6 +4546,8 @@ function getCustomColumnDefault(value?: SearchDataTypes | SearchGroupBy): Search return CONST.SEARCH.GROUP_DEFAULT_COLUMNS.YEAR; case CONST.SEARCH.GROUP_BY.QUARTER: return CONST.SEARCH.GROUP_DEFAULT_COLUMNS.QUARTER; + case CONST.SEARCH.GROUP_BY.APPROVER: + return CONST.SEARCH.GROUP_DEFAULT_COLUMNS.APPROVER; default: return []; } @@ -4617,6 +4695,8 @@ function getSearchColumnTranslationKey(column: SearchSortBy, type?: SearchDataTy return 'common.year'; case CONST.SEARCH.TABLE_COLUMNS.GROUP_QUARTER: return 'common.quarter'; + case CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER: + return 'search.filters.groupBy.approver'; case CONST.SEARCH.TABLE_COLUMNS.GROUP_WITHDRAWN: return 'search.filters.withdrawn'; case CONST.SEARCH.TABLE_COLUMNS.GROUP_FEED: @@ -5387,9 +5467,10 @@ function getGroupBySections(translate: LocalizedTranslate): GroupBySection[] { text: translate(`search.filters.groupBy.${groupBy}`), value: groupBy, }); - return [ + + const sections: Array> = [ { - options: [getOption(CONST.SEARCH.GROUP_BY.FROM), getOption(CONST.SEARCH.GROUP_BY.CARD)], + options: [getOption(CONST.SEARCH.GROUP_BY.FROM), getOption(CONST.SEARCH.GROUP_BY.CARD), getOption(CONST.SEARCH.GROUP_BY.APPROVER)], }, { options: [getOption(CONST.SEARCH.GROUP_BY.CATEGORY), getOption(CONST.SEARCH.GROUP_BY.MERCHANT), getOption(CONST.SEARCH.GROUP_BY.TAG)], @@ -5406,7 +5487,9 @@ function getGroupBySections(translate: LocalizedTranslate): GroupBySection[] { { options: [getOption(CONST.SEARCH.GROUP_BY.WITHDRAWAL_ID)], }, - ].map((section, sectionIndex) => ({ + ]; + + return sections.map((section, sectionIndex) => ({ ...section, sectionIndex, })); @@ -6630,6 +6713,7 @@ function getColumnsToShow({ [CONST.SEARCH.GROUP_BY.WEEK]: CONST.SEARCH.GROUP_CUSTOM_COLUMNS.WEEK, [CONST.SEARCH.GROUP_BY.YEAR]: CONST.SEARCH.GROUP_CUSTOM_COLUMNS.YEAR, [CONST.SEARCH.GROUP_BY.QUARTER]: CONST.SEARCH.GROUP_CUSTOM_COLUMNS.QUARTER, + [CONST.SEARCH.GROUP_BY.APPROVER]: CONST.SEARCH.GROUP_CUSTOM_COLUMNS.APPROVER, }[groupBy]; const defaultCustomColumns = { @@ -6644,6 +6728,7 @@ function getColumnsToShow({ [CONST.SEARCH.GROUP_BY.WEEK]: CONST.SEARCH.GROUP_DEFAULT_COLUMNS.WEEK, [CONST.SEARCH.GROUP_BY.YEAR]: CONST.SEARCH.GROUP_DEFAULT_COLUMNS.YEAR, [CONST.SEARCH.GROUP_BY.QUARTER]: CONST.SEARCH.GROUP_DEFAULT_COLUMNS.QUARTER, + [CONST.SEARCH.GROUP_BY.APPROVER]: CONST.SEARCH.GROUP_DEFAULT_COLUMNS.APPROVER, }[groupBy]; const filteredVisibleColumns = customColumns ? visibleColumns.filter((column) => Object.values(customColumns).includes(column as ValueOf)) : []; @@ -7436,6 +7521,9 @@ function isTransactionMatchWithGroupItem(transaction: OnyxTypes.Transaction, gro const transactionQuarter = Math.floor((transactionMonth - 1) / 3) + 1; return transactionYear === quarterGroup.year && transactionQuarter === quarterGroup.quarter; } + if (groupBy === CONST.SEARCH.GROUP_BY.APPROVER) { + return !!transaction.transactionID; + } return false; } @@ -7463,6 +7551,7 @@ export { isTransactionWeekGroupListItemType, isTransactionYearGroupListItemType, isTransactionQuarterGroupListItemType, + isTransactionApproverGroupListItemType, isGroupedItemArray, isGroupEntry, isReportEntry, @@ -7526,6 +7615,7 @@ export { getCustomColumns, getCustomColumnDefault, filterValidHasValues, + groupByRequiredColumns, navigateToSearchRHP, shouldShowDeleteOption, getToFieldValueForTransaction, diff --git a/src/pages/Search/SearchColumnsPage.tsx b/src/pages/Search/SearchColumnsPage.tsx index 01703b4be243..c6b0f1c7e678 100644 --- a/src/pages/Search/SearchColumnsPage.tsx +++ b/src/pages/Search/SearchColumnsPage.tsx @@ -10,7 +10,7 @@ import useOnyx from '@hooks/useOnyx'; import Navigation from '@libs/Navigation/Navigation'; import {buildQueryStringFromFilterFormValues, getCurrentSearchQueryJSON, hasValuesIncludeViolationFilter} from '@libs/SearchQueryUtils'; -import {getCustomColumnDefault, getCustomColumns, getValidGroupBy, insertColumnBeforeTotalAmount, isSearchDataLoaded} from '@libs/SearchUIUtils'; +import {getCustomColumnDefault, getCustomColumns, getValidGroupBy, insertColumnBeforeTotalAmount, isSearchDataLoaded, groupByRequiredColumns} from '@libs/SearchUIUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -44,21 +44,7 @@ function SearchColumnsPage() { // We need at least one element with flex1 in the table to ensure the table looks good in the UI, so we don't allow removing the total columns // since it makes sense for them to show up in an expense management App and it fixes the layout issues. - const requiredColumns = new Set([ - CONST.SEARCH.TABLE_COLUMNS.TOTAL_AMOUNT, - CONST.SEARCH.TABLE_COLUMNS.TOTAL, - CONST.SEARCH.TABLE_COLUMNS.GROUP_CARD, - CONST.SEARCH.TABLE_COLUMNS.GROUP_WITHDRAWAL_ID, - CONST.SEARCH.TABLE_COLUMNS.GROUP_FROM, - CONST.SEARCH.TABLE_COLUMNS.GROUP_CATEGORY, - CONST.SEARCH.TABLE_COLUMNS.GROUP_MERCHANT, - CONST.SEARCH.TABLE_COLUMNS.GROUP_TAG, - CONST.SEARCH.TABLE_COLUMNS.GROUP_DAY, - CONST.SEARCH.TABLE_COLUMNS.GROUP_MONTH, - CONST.SEARCH.TABLE_COLUMNS.GROUP_WEEK, - CONST.SEARCH.TABLE_COLUMNS.GROUP_YEAR, - CONST.SEARCH.TABLE_COLUMNS.GROUP_QUARTER, - ]); + const requiredColumns = new Set([CONST.SEARCH.TABLE_COLUMNS.TOTAL_AMOUNT, CONST.SEARCH.TABLE_COLUMNS.TOTAL, ...Object.values(groupByRequiredColumns).flat()]); if (shouldRequireViolationsColumn) { requiredColumns.add(CONST.SEARCH.TABLE_COLUMNS.VIOLATIONS); @@ -114,7 +100,13 @@ function SearchColumnsPage() { // Only the columns change, so it's still the same search - carry the key over rather than letting it be // re-derived from the new query. - Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: queryString, searchKey: currentSearchKey}), {forceReplace: true}); + Navigation.navigate( + ROUTES.SEARCH_ROOT.getRoute({ + query: queryString, + searchKey: currentSearchKey, + }), + {forceReplace: true}, + ); }; if (isSeedPending) { diff --git a/src/styles/utils/index.ts b/src/styles/utils/index.ts index 82951fac73fa..702099f89ba4 100644 --- a/src/styles/utils/index.ts +++ b/src/styles/utils/index.ts @@ -2156,6 +2156,7 @@ const createStyleUtils = (theme: ThemeColors, styles: ThemeStyles) => ({ case CONST.SEARCH.TABLE_COLUMNS.GROUP_WITHDRAWAL_ID: case CONST.SEARCH.TABLE_COLUMNS.GROUP_CARD: case CONST.SEARCH.TABLE_COLUMNS.GROUP_FROM: + case CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER: case CONST.SEARCH.TABLE_COLUMNS.FEED: case CONST.SEARCH.TABLE_COLUMNS.BANK_ACCOUNT: case CONST.SEARCH.TABLE_COLUMNS.WITHDRAWAL_ID: diff --git a/src/types/onyx/SearchResults.ts b/src/types/onyx/SearchResults.ts index f92f71490bc6..d0f8bc859acd 100644 --- a/src/types/onyx/SearchResults.ts +++ b/src/types/onyx/SearchResults.ts @@ -285,6 +285,12 @@ type SearchQuarterGroup = SearchGroupBase & { quarter: number; }; +/** Model of approver grouped search result */ +type SearchApproverGroup = SearchGroupBase & { + /** Account ID of the approver */ + accountID: number; +}; + /** SearchResultDataType */ type SearchResultDataType = PrefixedRecord & Partial | undefined>> & @@ -307,6 +313,7 @@ type SearchResultDataType = PrefixedRecord; /** Model of search results */ @@ -342,4 +349,5 @@ export type { SearchWeekGroup, SearchYearGroup, SearchQuarterGroup, + SearchApproverGroup, }; diff --git a/tests/unit/Search/ColumnAvailabilityTest.ts b/tests/unit/Search/ColumnAvailabilityTest.ts index fa2b76501de2..1694b60b6e58 100644 --- a/tests/unit/Search/ColumnAvailabilityTest.ts +++ b/tests/unit/Search/ColumnAvailabilityTest.ts @@ -60,6 +60,7 @@ describe('Column availability single source of truth', () => { TABLE_COLUMNS.GROUP_WITHDRAWAL_STATUS, TABLE_COLUMNS.GROUP_AMOUNT_DEBITED, TABLE_COLUMNS.GROUP_AMOUNT_REIMBURSED, + TABLE_COLUMNS.GROUP_APPROVER, ]); test('every TABLE_COLUMNS value is classified in COLUMN_AVAILABILITY or owned by another surface', () => { diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index 18e70d7bbecd..18f110ca2dd9 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -4126,6 +4126,37 @@ describe('SearchQueryUtils', () => { expect(queryJSON?.sortBy).toBe(CONST.SEARCH.TABLE_COLUMNS.GROUP_WEEK); expect(queryJSON?.sortOrder).toBe(CONST.SEARCH.SORT_ORDER.DESC); }); + + test('switching to approver from the Display menu derives sort-by:group-expenses and sort-order:desc', () => { + // Given a category grouping whose sort is the category default + // When the Display menu switches group by to approver + const result = buildFilterQueryWithSortDefaults( + {type: 'expense', groupBy: CONST.SEARCH.GROUP_BY.APPROVER, view: CONST.SEARCH.VIEW.TABLE}, + {view: CONST.SEARCH.VIEW.TABLE, groupBy: CONST.SEARCH.GROUP_BY.CATEGORY}, + {sortBy: CONST.SEARCH.TABLE_COLUMNS.GROUP_CATEGORY, sortOrder: CONST.SEARCH.SORT_ORDER.ASC}, + ); + const queryJSON = buildSearchQueryJSON(result ?? ''); + + // Then the parser re-derives the approver defaults from GROUP_BY_DEFAULT_SORT and GROUP_BY_DEFAULT_SORT_ORDER + expect(queryJSON?.sortBy).toBe(CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES); + expect(queryJSON?.sortOrder).toBe(CONST.SEARCH.SORT_ORDER.DESC); + }); + }); + + describe('group-by:approver parser round trip', () => { + test('round-trips group-by:approver and a customized group column list', () => { + // Given a query that groups by approver and customizes the group columns + const query = `type:expense group-by:${CONST.SEARCH.GROUP_BY.APPROVER} columns:group-approver,group-expenses,group-total`; + + // When it is parsed and then rebuilt into a query string and parsed again + const parsed = buildSearchQueryJSON(query); + const rebuilt = buildSearchQueryString(parsed); + const roundTripped = buildSearchQueryJSON(rebuilt); + + // Then the group by and customized columns survive the round trip + expect(roundTripped?.groupBy).toBe(CONST.SEARCH.GROUP_BY.APPROVER); + expect(roundTripped?.columns).toEqual([CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL]); + }); }); describe('shouldResetSort', () => { diff --git a/tests/unit/Search/SearchUIUtilsTest.ts b/tests/unit/Search/SearchUIUtilsTest.ts index 25e25afaaa7d..51759b2e39d0 100644 --- a/tests/unit/Search/SearchUIUtilsTest.ts +++ b/tests/unit/Search/SearchUIUtilsTest.ts @@ -749,6 +749,38 @@ const searchResultsGroupByCategory: OnyxTypes.SearchResults = { }, }; +const groupedApproverAccountID = 22982540; +const searchResultsGroupByApprover: OnyxTypes.SearchResults = { + data: { + personalDetailsList: { + [groupedApproverAccountID]: { + accountID: groupedApproverAccountID, + displayName: 'Approver', + login: 'approver@policy.com', + }, + }, + [`${CONST.SEARCH.GROUP_PREFIX}${groupedApproverAccountID}` as const]: { + accountID: groupedApproverAccountID, + count: 3, + currency: 'USD', + total: 150, + }, + }, + search: { + count: 3, + currency: 'USD', + hasMoreResults: false, + hasResults: true, + offset: 0, + hash: 0, + sortBy: 'date', + sortOrder: 'desc', + total: 150, + isLoading: false, + type: 'expense', + }, +}; + const withoutReportActionErrors = (reportAction: T): Omit => { const reportActionWithoutErrors = {...reportAction}; delete reportActionWithoutErrors.errors; @@ -4007,6 +4039,50 @@ describe('SearchUIUtils', () => { expect(categorySection.transactionsQueryJSON?.inputQuery).not.toContain('limit:'); }); + it('should build an approver drill-down for an approver group', () => { + // Given an approver-grouped query whose limit is meant to bound how many groups are shown + const parsedQuery = buildSearchQueryJSON(`type:expense group-by:${CONST.SEARCH.GROUP_BY.APPROVER} limit:10`); + if (!parsedQuery) { + throw new Error('Failed to parse approver grouped search query'); + } + expect(parsedQuery.limit).toBe(10); + + // When the approver sections are built + const [sections] = getSectionsByType( + SearchUIUtils.getSections({ + dateFnsLocale: undefined, + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + data: searchResultsGroupByApprover.data, + currentAccountID: 2074551, + currentUserEmail: '', + translate: translateLocal, + formatPhoneNumber, + bankAccountList: {}, + rules: undefined, + groupBy: CONST.SEARCH.GROUP_BY.APPROVER, + conciergeReportID: undefined, + convertToDisplayString, + reportAttributesDerivedValue: {}, + queryJSON: {...parsedQuery}, + }), + SearchUIUtils.isTransactionApproverGroupListItemType, + ); + + // Then the per-group query drops the grouping and limit, and filters by the approver as a syntax filter + const approverSection = sections.at(0); + if (!approverSection) { + throw new Error('Expected an approver group section'); + } + expect(approverSection.transactionsQueryJSON?.groupBy).toBeUndefined(); + expect(approverSection.transactionsQueryJSON?.limit).toBeUndefined(); + expect(approverSection.transactionsQueryJSON?.inputQuery).not.toContain('limit:'); + expect(approverSection.transactionsQueryJSON?.filters).toEqual({ + operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVER, + right: String(groupedApproverAccountID), + }); + }); + // Every date granularity drills down through the same `buildDateRangeGroupQuery` builder, so they are // covered together: a regression that reintroduced `limit` in that one builder would break all five. it.each([ @@ -15568,6 +15644,25 @@ describe('hasFilterContentValuesChanged', () => { }); }); +describe('getGroupBySections', () => { + function getGroupByValues() { + return SearchUIUtils.getGroupBySections(translateLocal) + .flatMap((section) => section.options) + .map((option) => option.value); + } + + it('always offers approver grouping alongside from and card', () => { + // Given the Display menu group-by sections + // When they are built + const options = getGroupByValues(); + + // Then approver is offered with the other person groupings, with no has-filter requirement + expect(options).toContain(CONST.SEARCH.GROUP_BY.FROM); + expect(options).toContain(CONST.SEARCH.GROUP_BY.CARD); + expect(options).toContain(CONST.SEARCH.GROUP_BY.APPROVER); + }); +}); + describe('getDatePresets', () => { it('does not offer never for anyApproval', () => { // Given anyApproval, which always matches an approval action diff --git a/tests/unit/SearchParserTest.ts b/tests/unit/SearchParserTest.ts index f95119159ee6..097b6c6d57dc 100644 --- a/tests/unit/SearchParserTest.ts +++ b/tests/unit/SearchParserTest.ts @@ -940,6 +940,51 @@ const tests = [ filters: null, }, }, + { + query: 'type:expense group-by:approver', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + groupBy: CONST.SEARCH.GROUP_BY.APPROVER, + filters: null, + }, + }, + { + query: 'type:expense group-by:approver columns:group-approver,group-expenses,group-total', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + groupBy: CONST.SEARCH.GROUP_BY.APPROVER, + columns: [CONST.SEARCH.TABLE_COLUMNS.GROUP_APPROVER, CONST.SEARCH.TABLE_COLUMNS.GROUP_EXPENSES, CONST.SEARCH.TABLE_COLUMNS.GROUP_TOTAL], + filters: null, + }, + }, + { + query: 'type:expense has:approved-violation approver:22982540', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.AND, + left: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.HAS, + right: CONST.SEARCH.HAS_VALUES.APPROVED_VIOLATION, + }, + right: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVER, + right: '22982540', + }, + }, + }, + }, { query: 'type:chat is:read', expected: { diff --git a/tests/unit/TransactionGroupListItemTest.tsx b/tests/unit/TransactionGroupListItemTest.tsx index 8e1ef4f69438..dd7157dff5e6 100644 --- a/tests/unit/TransactionGroupListItemTest.tsx +++ b/tests/unit/TransactionGroupListItemTest.tsx @@ -61,6 +61,7 @@ jest.mock('@libs/SearchUIUtils', () => ({ getGroupTableScrollLayout: jest.fn(() => ({dataColumns: [], minTableWidth: 0, shouldScrollHorizontally: false})), getViolationsForTransaction: jest.fn(() => ''), isTransactionDayGroupListItemType: jest.fn((item: Record) => item.groupedBy === 'day'), + isTransactionApproverGroupListItemType: jest.fn((item: Record) => item.groupedBy === 'approver'), })); jest.mock('@react-navigation/native', () => ({