All files / libs/amalia-lang/formula/evaluate/shared/src/functions/dates/days-ago index.ts

100% Statements 56/56
50% Branches 1/2
100% Functions 1/1
100% Lines 56/56

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 571x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import { AmaliaFunctionCategory, AmaliaFunctionKeys, type AmaliaFormula } from '@amalia/amalia-lang/formula/types';
import { TokenType } from '@amalia/amalia-lang/tokens/types';
import { FormatsEnum } from '@amalia/data-capture/fields/types';
import { dayjs } from '@amalia/ext/dayjs';
 
import { AmaliaFunctionDefault } from '../../AmaliaFunction';
import { type ComputeEngineDayjsInput } from '../dates.types';
 
export const datesDaysAgo = new AmaliaFunctionDefault<
  [ComputeEngineDayjsInput, ComputeEngineDayjsInput],
  number | string
>({
  name: AmaliaFunctionKeys.daysAgo,
  category: AmaliaFunctionCategory.DATES,
  nbParamsRequired: 2,
  description: 'Return a date n days ago from a given date',
 
  exec: (date, numberOfDays) =>
    dayjs(date, 'X')
      .subtract(+(numberOfDays ?? 0), 'days')
      .unix(),
 
  params: [
    {
      name: 'date',
      description: 'Date: variables, properties, fields, keywords or date with format toDate("YYYY-MM-DD")',
      validTokenTypes: [TokenType.VARIABLE, TokenType.PROPERTY, TokenType.FIELD, TokenType.KEYWORD, TokenType.FUNCTION],
      validTokenValues: {
        [TokenType.FUNCTION]: [AmaliaFunctionKeys.toDate],
      },
      validFormats: [FormatsEnum.date, FormatsEnum['date-time']],
    },
    { name: 'numberOfDaysAgo', description: 'Number of days ago, can be negative for days after' },
  ],
 
  examples: [
    {
      desc: 'Returns "2023-04-26" ',
      formula: 'daysAgo(toDate("2023-04-30"), 4)' as AmaliaFormula,
      result: 1_682_467_200,
    },
    {
      desc: 'Returns "2023-04-18" ',
      formula: 'daysAgo(toDate("2023-04-11"), -7)' as AmaliaFormula,
      result: 1_681_776_000,
    },
    {
      desc: 'Returns a date 30 days before the Close Date.',
      formula: 'daysAgo(opportunity.closeDate, 30)' as AmaliaFormula,
    },
    {
      desc: 'Returns a date 12 days after the statement start date.',
      formula: 'daysAgo(statementPeriod.startDate, -12)' as AmaliaFormula,
    },
  ],
});