Skip to content
Snippets Groups Projects
  • Neil's avatar
    308f8339
    Add yearly to custom reports (#2466) · 308f8339
    Neil authored
    * Button changes and time filters
    
    * rename on dashboard
    
    * notes
    
    * fix time filters
    
    * Sort Categories
    
    * Page title
    
    * category sort order
    
    * move button
    
    * featureflag
    
    * Highlight report name
    
    * sankey fix
    
    * VRT
    
    * remove doubled element
    
    * adjust to match master
    
    * add Year
    
    * notes
    
    * lint fix
    
    * update names
    
    * IntervalsUpdates
    
    * fixing bugs
    
    * ts updates
    
    * lint fix
    
    * merge fixes
    
    * notes
    
    * simplify lookups
    Add yearly to custom reports (#2466)
    Neil authored
    * Button changes and time filters
    
    * rename on dashboard
    
    * notes
    
    * fix time filters
    
    * Sort Categories
    
    * Page title
    
    * category sort order
    
    * move button
    
    * featureflag
    
    * Highlight report name
    
    * sankey fix
    
    * VRT
    
    * remove doubled element
    
    * adjust to match master
    
    * add Year
    
    * notes
    
    * lint fix
    
    * update names
    
    * IntervalsUpdates
    
    * fixing bugs
    
    * ts updates
    
    * lint fix
    
    * merge fixes
    
    * notes
    
    * simplify lookups
reportRanges.ts 2.73 KiB
import * as monthUtils from 'loot-core/src/shared/months';

export function validateStart(
  earliest: string,
  start: string,
  end: string,
  interval?: string,
) {
  let addDays;
  let dateStart;
  switch (interval) {
    case 'Monthly':
      dateStart = start + '-01';
      addDays = 180;
      break;
    case 'Yearly':
      dateStart = start + '-01-01';
      addDays = 1095;
      break;
    case 'Daily':
      dateStart = start;
      addDays = 6;
      break;
    default:
      dateStart = start;
      addDays = 180;
      break;
  }

  if (end < start) {
    end = monthUtils.addDays(dateStart, addDays);
  }
  return boundedRange(
    earliest,
    dateStart,
    interval ? end : monthUtils.monthFromDate(end),
    interval,
  );
}

export function validateEnd(
  earliest: string,
  start: string,
  end: string,
  interval?: string,
) {
  let subDays;
  let dateEnd;
  switch (interval) {
    case 'Monthly':
      dateEnd = end + '-31';
      subDays = 180;
      break;
    case 'Yearly':
      dateEnd = end + '-12-31';
      subDays = 1095;
      break;
    case 'Daily':
      dateEnd = end;
      subDays = 6;
      break;
    default:
      dateEnd = end;
      subDays = 180;
      break;
  }

  if (start > end) {
    start = monthUtils.subDays(dateEnd, subDays);
  }
  return boundedRange(
    earliest,
    interval ? start : monthUtils.monthFromDate(start),
    dateEnd,
    interval,
  );
}

export function validateRange(earliest: string, start: string, end: string) {
  const latest = monthUtils.currentDay();
  if (end > latest) {
    end = latest;
  }
  if (start < earliest) {
    start = earliest;
  }
  return [start, end];
}

function boundedRange(
  earliest: string,
  start: string,
  end: string,
  interval?: string,
) {
  let latest;
  switch (interval) {
    case 'Monthly':
      latest = monthUtils.currentMonth() + '-31';
      break;
    case 'Yearly':
      latest = monthUtils.currentDay();
      break;
    default:
      latest = monthUtils.currentMonth();
      break;
  }

  if (end > latest) {
    end = latest;
  }
  if (start < earliest) {
    start = earliest;
  }
  return [start, end];
}

export function getSpecificRange(offset: number, addNumber: number) {
  const currentDay = monthUtils.currentDay();
  const dateStart = monthUtils.subMonths(currentDay, offset) + '-01';
  const dateEnd = monthUtils.getMonthEnd(
    monthUtils.addMonths(dateStart, addNumber === null ? offset : addNumber) +
      '-01',
  );
  return [dateStart, dateEnd];
}

export function getFullRange(start: string) {
  const end = monthUtils.currentMonth();
  return [start, end];
}

export function getLatestRange(offset: number) {
  const end = monthUtils.currentMonth();
  const start = monthUtils.subMonths(end, offset);
  return [start, end];
}