diff --git a/src/bank-statements/bank-statements-repository.service.ts b/src/bank-statements/bank-statements-repository.service.ts new file mode 100644 index 00000000..150ed852 --- /dev/null +++ b/src/bank-statements/bank-statements-repository.service.ts @@ -0,0 +1,125 @@ +import { Injectable } from '@nestjs/common'; +import { nextFriday } from 'date-fns'; +import { TicketRevenuesService } from 'src/ticket-revenues/ticket-revenues.service'; +import { User } from 'src/users/entities/user.entity'; +import { getDateYMDString, isPaymentWeekComplete } from 'src/utils/date-utils'; +import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum'; +import { getPagination } from 'src/utils/get-pagination'; +import { PaginationOptions } from 'src/utils/types/pagination-options'; +import { Pagination } from 'src/utils/types/pagination.type'; +import { IBankStatement } from './interfaces/bank-statement.interface'; +import { IBSCounts } from './interfaces/bs-counts.interface'; +import { IBSGetMePreviousDaysValidArgs } from './interfaces/bs-get-me-previous-days-args.interface'; +import { IBSGetMePreviousDaysResponse } from './interfaces/bs-get-me-previous-days-response.interface'; + +/** + * Get weekly statements + */ +@Injectable() +export class BankStatementsRepositoryService { + constructor(private readonly ticketRevenuesService: TicketRevenuesService) {} + + public async getPreviousDays( + validArgs: IBSGetMePreviousDaysValidArgs, + paginationOptions: PaginationOptions, + ): Promise> { + const previousDays = await this.buildPreviousDays({ + user: validArgs.user, + endDate: validArgs.endDate, + timeInterval: validArgs.timeInterval, + paginationArgs: paginationOptions, + }); + const statusCounts = this.generateStatusCounts(previousDays.data); + + return getPagination( + { + data: previousDays.data, + statusCounts: statusCounts, + }, + { + dataLenght: previousDays.data.length, + maxCount: previousDays.count, + }, + paginationOptions, + ); + } + + private async buildPreviousDays(validArgs: { + user: User; + endDate: string; + timeInterval?: TimeIntervalEnum; + paginationArgs?: PaginationOptions; + }): Promise> { + const pagination = validArgs.paginationArgs + ? validArgs.paginationArgs + : { limit: 9999, page: 1 }; + const revenues = await this.ticketRevenuesService.fetchTicketRevenues({ + startDate: new Date(validArgs.endDate), + endDate: new Date(validArgs.endDate), + cpfCnpj: validArgs.user.getCpfCnpj(), + limit: pagination.limit, + offset: (pagination.page - 1) * pagination.limit, + previousDays: true, + }); + const statements = revenues.data.map((item, index) => { + const isPaid = isPaymentWeekComplete( + new Date(String(item.processingDateTime)), + ); + return { + id: index, + date: getDateYMDString(new Date(String(item.processingDateTime))), + processingDate: getDateYMDString( + new Date(String(item.processingDateTime)), + ), + transactionDate: getDateYMDString( + new Date(String(item.transactionDateTime)), + ), + paymentOrderDate: getDateYMDString( + nextFriday(new Date(String(item.processingDateTime))), + ), + effectivePaymentDate: isPaid + ? getDateYMDString( + nextFriday(new Date(String(item.processingDateTime))), + ) + : null, + cpfCnpj: validArgs.user.getCpfCnpj(), + permitCode: validArgs.user.getPermitCode(), + amount: item.transactionValue, + status: isPaid ? 'Pago' : 'A pagar', + statusCode: isPaid ? 'paid' : 'toPay', + bankStatus: isPaid ? '00' : null, + bankStatusCode: isPaid ? 'Crédito ou Débito Efetivado' : null, + error: null, + errorCode: null, + } as IBankStatement; + }); + return getPagination<{ data: IBankStatement[] }>( + { + data: statements, + }, + { + dataLenght: statements.length, + maxCount: revenues.countAll, + }, + pagination, + ); + } + + private generateStatusCounts( + data: IBankStatement[], + ): Record { + const statusCounts: Record = {}; + for (const item of data) { + if (!statusCounts?.[item.statusCode]) { + statusCounts[item.statusCode] = { + count: 1, + amountSum: item.amount, + }; + } else { + statusCounts[item.statusCode].count += 1; + statusCounts[item.statusCode].amountSum += item.amount; + } + } + return statusCounts; + } +} diff --git a/src/bank-statements/bank-statements.controller.ts b/src/bank-statements/bank-statements.controller.ts index b89ce2cb..9327e4cb 100644 --- a/src/bank-statements/bank-statements.controller.ts +++ b/src/bank-statements/bank-statements.controller.ts @@ -99,7 +99,7 @@ export class BankStatementsController { @ApiQuery(PaginationApiParams.page) @ApiQuery(PaginationApiParams.limit) @ApiQuery(DateApiParams.startDate) - @ApiQuery(DateApiParams.endDate) + @ApiQuery(DateApiParams.getEndDate(true)) @ApiQuery( DateApiParams.getTimeInterval( BSMePrevDaysTimeIntervalEnum, @@ -118,11 +118,14 @@ export class BankStatementsController { userId?: number | null, ): Promise> { const isUserIdParam = userId !== null && !isNaN(Number(userId)); - const result = await this.bankStatementsService.getMePreviousDays({ - endDate: endDate, - timeInterval: timeInterval, - userId: isUserIdParam ? userId : (request.user as User).id, - }); + const result = await this.bankStatementsService.getMePreviousDays( + { + endDate: endDate, + timeInterval: timeInterval, + userId: isUserIdParam ? userId : (request.user as User).id, + }, + { limit, page }, + ); return getPagination( result, { diff --git a/src/bank-statements/bank-statements.module.ts b/src/bank-statements/bank-statements.module.ts index f3df57ab..05b8b6af 100644 --- a/src/bank-statements/bank-statements.module.ts +++ b/src/bank-statements/bank-statements.module.ts @@ -1,11 +1,12 @@ import { Module } from '@nestjs/common'; import { TicketRevenuesModule } from 'src/ticket-revenues/ticket-revenues.module'; import { UsersModule } from 'src/users/users.module'; +import { BankStatementsRepositoryService } from './bank-statements-repository.service'; import { BankStatementsController } from './bank-statements.controller'; import { BankStatementsService } from './bank-statements.service'; @Module({ - providers: [BankStatementsService], + providers: [BankStatementsService, BankStatementsRepositoryService], controllers: [BankStatementsController], imports: [UsersModule, TicketRevenuesModule], }) diff --git a/src/bank-statements/bank-statements.service.spec.ts b/src/bank-statements/bank-statements.service.spec.ts index 3ad71564..17dadb43 100644 --- a/src/bank-statements/bank-statements.service.spec.ts +++ b/src/bank-statements/bank-statements.service.spec.ts @@ -6,6 +6,7 @@ import { User } from 'src/users/entities/user.entity'; import { UsersService } from 'src/users/users.service'; import { getDateYMDString } from 'src/utils/date-utils'; import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum'; +import { BankStatementsRepositoryService } from './bank-statements-repository.service'; import { BankStatementsService } from './bank-statements.service'; import { IBankStatement } from './interfaces/bank-statement.interface'; @@ -47,6 +48,7 @@ describe('BankStatementsService', () => { const module: TestingModule = await Test.createTestingModule({ providers: [ BankStatementsService, + BankStatementsRepositoryService, usersServiceMock, ticketRevenuesServiceMock, ], @@ -190,28 +192,32 @@ describe('BankStatementsService', () => { { id: 2, date: '2023-01-27', + effectivePaymentDate: null, amount: 40, + status: 'A pagar', + statusCode: 'toPay', + bankStatus: null, + bankStatusCode: null, }, { id: 1, date: '2023-01-20', + effectivePaymentDate: '2023-01-20', amount: 70, + status: 'Pago', + statusCode: 'paid', + bankStatus: '00', + bankStatusCode: 'Crédito ou Débito Efetivado', }, ].map((i) => ({ ...i, cpfCnpj: 'cc_1', - - paymentOrderDate: i.date, - processingDate: i.date, transactionDate: i.date, + processingDate: i.date, + paymentOrderDate: i.date, permitCode: 'pc_1', - status: '', - statusCode: '', error: null, errorCode: null, - bankStatus: null, - bankStatusCode: null, - effectivePaymentDate: null, })), }); }); @@ -219,7 +225,7 @@ describe('BankStatementsService', () => { it('should filter last week', /** * Requirement: 2024/01/18 {@link https://github.com/RJ-SMTR/api-cct/issues/168#issuecomment-1898457310 #168, item 2 - GitHub} * - * Mocked today: 2023/01/22 + * Mocked today: 2023/01/25 * * bank-statements time interval (last week): * ``` @@ -346,8 +352,8 @@ describe('BankStatementsService', () => { processingDate: '2023-01-27', transactionDate: '2023-01-27', amount: 70, - status: '', - statusCode: '', + status: 'A pagar', + statusCode: 'toPay', error: null, errorCode: null, bankStatus: null, @@ -489,16 +495,31 @@ describe('BankStatementsService', () => { id: 3, date: '2023-01-20', amount: 60, + effectivePaymentDate: null, + status: 'A pagar', + statusCode: 'toPay', + bankStatus: null, + bankStatusCode: null, }, { id: 2, date: '2023-01-13', amount: 70, + effectivePaymentDate: '2023-01-13', + status: 'Pago', + statusCode: 'paid', + bankStatus: '00', + bankStatusCode: 'Crédito ou Débito Efetivado', }, { id: 1, date: '2023-01-06', amount: 70, + effectivePaymentDate: '2023-01-06', + status: 'Pago', + statusCode: 'paid', + bankStatus: '00', + bankStatusCode: 'Crédito ou Débito Efetivado', }, ].map((i) => ({ ...i, @@ -509,11 +530,6 @@ describe('BankStatementsService', () => { transactionDate: i.date, error: null, errorCode: null, - bankStatus: null, - bankStatusCode: null, - status: '', - statusCode: '', - effectivePaymentDate: null, })), }); }); diff --git a/src/bank-statements/bank-statements.service.ts b/src/bank-statements/bank-statements.service.ts index bdfb0603..c0cd910f 100644 --- a/src/bank-statements/bank-statements.service.ts +++ b/src/bank-statements/bank-statements.service.ts @@ -3,16 +3,21 @@ import { differenceInDays, subDays } from 'date-fns'; import { TicketRevenuesService } from 'src/ticket-revenues/ticket-revenues.service'; import { User } from 'src/users/entities/user.entity'; import { UsersService } from 'src/users/users.service'; -import { getDateYMDString } from 'src/utils/date-utils'; +import { getDateYMDString, isPaymentWeekComplete } from 'src/utils/date-utils'; import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum'; import { CommonHttpException } from 'src/utils/http-exception/common-http-exception'; import { getPaymentDates, getPaymentWeek } from 'src/utils/payment-date-utils'; +import { PaginationOptions } from 'src/utils/types/pagination-options'; +import { Pagination } from 'src/utils/types/pagination.type'; +import { BankStatementsRepositoryService } from './bank-statements-repository.service'; import { IBankStatement } from './interfaces/bank-statement.interface'; -import { IBSCounts } from './interfaces/bs-counts.interface'; import { IBSGetMeArgs } from './interfaces/bs-get-me-args.interface'; import { IBSGetMeDayArgs } from './interfaces/bs-get-me-day-args.interface'; import { IBSGetMeDayResponse } from './interfaces/bs-get-me-day-response.interface'; -import { IBSGetMePreviousDaysArgs } from './interfaces/bs-get-me-previous-days-args.interface'; +import { + IBSGetMePreviousDaysArgs, + IBSGetMePreviousDaysValidArgs, +} from './interfaces/bs-get-me-previous-days-args.interface'; import { IBSGetMePreviousDaysResponse } from './interfaces/bs-get-me-previous-days-response.interface'; import { IBSGetMeResponse } from './interfaces/bs-get-me-response.interface'; import { IGetBSResponse } from './interfaces/get-bs-response.interface'; @@ -24,33 +29,32 @@ import { IGetBSResponse } from './interfaces/get-bs-response.interface'; export class BankStatementsService { constructor( private readonly usersService: UsersService, + private readonly bankStatementsRepositoryService: BankStatementsRepositoryService, private readonly ticketRevenuesService: TicketRevenuesService, ) {} public async getMe(args: IBSGetMeArgs): Promise { const validArgs = await this.validateGetMe(args); let todaySum = 0; - const insertedData = await this.generateBankStatements({ + const bsData = await this.generateBankStatements({ groupBy: 'week', startDate: validArgs.startDate, endDate: validArgs.endDate, timeInterval: validArgs.timeInterval, user: validArgs.user, }); - todaySum = insertedData.todaySum; + todaySum = bsData.todaySum; const amountSum = Number( - insertedData.statements - .reduce((sum, item) => sum + item.amount, 0) - .toFixed(2), + bsData.statements.reduce((sum, item) => sum + item.amount, 0).toFixed(2), ); - const ticketCount = insertedData.countSum; + const ticketCount = bsData.countSum; return { amountSum, todaySum, - count: insertedData.statements.length, + count: bsData.statements.length, ticketCount, - data: insertedData.statements, + data: bsData.statements, }; } @@ -162,6 +166,7 @@ export class BankStatementsService { (sum, i) => sum + i.transactionValueSum, 0, ); + const isPaid = isPaymentWeekComplete(subDays(endDate, 2)); newStatements.push({ id: maxId - id, amount: Number(weekAmount.toFixed(2)), @@ -170,12 +175,12 @@ export class BankStatementsService { processingDate: getDateYMDString(endDate), transactionDate: getDateYMDString(endDate), paymentOrderDate: getDateYMDString(endDate), - effectivePaymentDate: null, + effectivePaymentDate: isPaid ? getDateYMDString(endDate) : null, permitCode: args.user.getPermitCode(), - status: '', - statusCode: '', - bankStatus: null, - bankStatusCode: null, + status: isPaid ? 'Pago' : 'A pagar', + statusCode: isPaid ? 'paid' : 'toPay', + bankStatus: isPaid ? '00' : null, + bankStatusCode: isPaid ? 'Crédito ou Débito Efetivado' : null, error: null, errorCode: null, }); @@ -208,106 +213,40 @@ export class BankStatementsService { }; } + /** + * TODO: refactor + * + * Service: previous-days + */ public async getMePreviousDays( args: IBSGetMePreviousDaysArgs, - ): Promise { + paginationOptions: PaginationOptions, + ): Promise> { const validArgs = await this.validateGetMePreviousDays(args); - const data = this.buildPreviousDays({ - user: validArgs.user, - endDate: validArgs.endDate, - timeInterval: validArgs.timeInterval, - }); - const statusCounts = this.generateStatusCounts(data); - - return { - data: data, - statusCounts: statusCounts, - }; + return await this.bankStatementsRepositoryService.getPreviousDays( + validArgs, + paginationOptions, + ); } + /** + * TODO: refactor + * + * Service: previous-days + */ private async validateGetMePreviousDays( args: IBSGetMePreviousDaysArgs, - ): Promise<{ - user: User; - endDate?: string; - timeInterval?: TimeIntervalEnum; - }> { + ): Promise { if (isNaN(args?.userId as number)) { throw CommonHttpException.argNotType('userId', 'number', args?.userId); } const user = await this.usersService.getOne({ id: args?.userId }); + if (!args?.endDate) { + } return { user: user, - endDate: args.endDate, + endDate: args.endDate || getDateYMDString(new Date(Date.now())), timeInterval: args.timeInterval as unknown as TimeIntervalEnum, }; } - - private buildPreviousDays(validArgs: { - user: User; - endDate?: string; - timeInterval?: TimeIntervalEnum; - }): IBankStatement[] { - const intervalBSDates = getPaymentDates({ - endpoint: 'bank-statements', - startDateStr: undefined, - endDateStr: validArgs?.endDate, - timeInterval: validArgs?.timeInterval, - }); - // This data is mocked for development - return [ - { - id: 1, - date: getDateYMDString(new Date(intervalBSDates.endDate)), - processingDate: getDateYMDString(new Date(intervalBSDates.endDate)), - transactionDate: getDateYMDString(new Date(intervalBSDates.endDate)), - paymentOrderDate: getDateYMDString(new Date(intervalBSDates.endDate)), - effectivePaymentDate: null, - cpfCnpj: validArgs.user.getCpfCnpj(), - permitCode: validArgs.user.getPermitCode(), - amount: 4.9, - status: 'A pagar', - statusCode: 'toPay', - bankStatus: null, - bankStatusCode: null, - error: null, - errorCode: null, - }, - { - id: 2, - date: getDateYMDString(new Date(intervalBSDates.endDate)), - processingDate: getDateYMDString(new Date(intervalBSDates.endDate)), - transactionDate: getDateYMDString(new Date(intervalBSDates.endDate)), - paymentOrderDate: getDateYMDString(new Date(intervalBSDates.endDate)), - effectivePaymentDate: null, - cpfCnpj: validArgs.user.getCpfCnpj(), - permitCode: validArgs.user.getPermitCode(), - amount: 4.9, - status: 'Pendente', - statusCode: 'pending', - bankStatus: 'Lote não aceito', - bankStatusCode: 'HA', - error: 'Lote não aceito', - errorCode: 'HA', - }, - ]; - } - - private generateStatusCounts( - data: IBankStatement[], - ): Record { - const statusCounts: Record = {}; - for (const item of data) { - if (!statusCounts?.[item.statusCode]) { - statusCounts[item.statusCode] = { - count: 1, - amountSum: item.amount, - }; - } else { - statusCounts[item.statusCode].count += 1; - statusCounts[item.statusCode].amountSum += item.amount; - } - } - return statusCounts; - } } diff --git a/src/bank-statements/interfaces/bs-get-me-previous-days-args.interface.ts b/src/bank-statements/interfaces/bs-get-me-previous-days-args.interface.ts index 3e12d284..f6ff7ada 100644 --- a/src/bank-statements/interfaces/bs-get-me-previous-days-args.interface.ts +++ b/src/bank-statements/interfaces/bs-get-me-previous-days-args.interface.ts @@ -1,3 +1,5 @@ +import { User } from 'src/users/entities/user.entity'; +import { TimeIntervalEnum } from 'src/utils/enums/time-interval.enum'; import { BSMePrevDaysTimeIntervalEnum } from '../enums/bs-me-prev-days-time-interval.enum'; export class IBSGetMePreviousDaysArgs { @@ -5,3 +7,9 @@ export class IBSGetMePreviousDaysArgs { timeInterval?: BSMePrevDaysTimeIntervalEnum; userId?: number; } + +export class IBSGetMePreviousDaysValidArgs { + user: User; + endDate: string; + timeInterval?: TimeIntervalEnum; +} diff --git a/src/ticket-revenues/interfaces/fetch-ticket-revenues.interface.ts b/src/ticket-revenues/interfaces/fetch-ticket-revenues.interface.ts index c5dbfdc8..189deec1 100644 --- a/src/ticket-revenues/interfaces/fetch-ticket-revenues.interface.ts +++ b/src/ticket-revenues/interfaces/fetch-ticket-revenues.interface.ts @@ -5,4 +5,5 @@ export interface IFetchTicketRevenues { limit?: number; offset?: number; getToday?: boolean; + previousDays?: boolean; } diff --git a/src/ticket-revenues/ticket-revenues.service.spec.ts b/src/ticket-revenues/ticket-revenues.service.spec.ts index cdf2ada8..761a1a2d 100644 --- a/src/ticket-revenues/ticket-revenues.service.spec.ts +++ b/src/ticket-revenues/ticket-revenues.service.spec.ts @@ -126,7 +126,7 @@ describe('TicketRevenuesService', () => { jest .spyOn(ticketRevenuesService as any, 'fetchTicketRevenues') .mockResolvedValue({ - ticketRevenuesResponse: revenues, + data: revenues, countAll: revenues.length, }); @@ -218,7 +218,7 @@ describe('TicketRevenuesService', () => { jest .spyOn(ticketRevenuesService as any, 'fetchTicketRevenues') .mockResolvedValue({ - ticketRevenuesResponse: revenues, + data: revenues, countAll: revenues.length, }); diff --git a/src/ticket-revenues/ticket-revenues.service.ts b/src/ticket-revenues/ticket-revenues.service.ts index 42f013aa..b93d2615 100644 --- a/src/ticket-revenues/ticket-revenues.service.ts +++ b/src/ticket-revenues/ticket-revenues.service.ts @@ -56,16 +56,15 @@ export class TicketRevenuesService { }); // Get data - let ticketRevenuesResponse: ITicketRevenue[] = []; const fetchArgs: IFetchTicketRevenues = { cpfCnpj: user.getCpfCnpj(), startDate, endDate, }; - ticketRevenuesResponse = (await this.fetchTicketRevenues(fetchArgs)) - .ticketRevenuesResponse; - ticketRevenuesResponse = this.mapTicketRevenues(ticketRevenuesResponse); + const ticketRevenuesResponse: ITicketRevenue[] = ( + await this.fetchTicketRevenues(fetchArgs) + ).data; if (ticketRevenuesResponse.length === 0) { return new TicketRevenuesGroup().toInterface(); @@ -99,10 +98,7 @@ export class TicketRevenuesService { getToday: GET_TODAY, }; - ticketRevenuesResponse = (await this.fetchTicketRevenues(fetchArgs)) - .ticketRevenuesResponse; - - ticketRevenuesResponse = this.mapTicketRevenues(ticketRevenuesResponse); + ticketRevenuesResponse = (await this.fetchTicketRevenues(fetchArgs)).data; if (ticketRevenuesResponse.length === 0) { return { @@ -259,9 +255,20 @@ export class TicketRevenuesService { return resultList; } - private async fetchTicketRevenues( + /** + * TODO: refactor + * + * Repository: query `ITicketRevenue[]` with pagination + * + * Used by: + * - ticket-revenues/me/individual + * - ticket-revenues/me (day gorup) + * - ticket-revenues/me/grouped (sum all group) + * - bank-statements/me/previous-days + */ + async fetchTicketRevenues( args?: IFetchTicketRevenues, - ): Promise<{ ticketRevenuesResponse: ITicketRevenue[]; countAll: number }> { + ): Promise<{ data: ITicketRevenue[]; countAll: number }> { const IS_PROD = process.env.NODE_ENV === 'production'; const Q_CONSTS = { bucket: IS_PROD ? 'rj-smtr' : 'rj-smtr-dev', @@ -287,17 +294,28 @@ export class TicketRevenuesService { if (args?.startDate !== undefined) { const startDate = args.startDate.toISOString().slice(0, 10); - queryBuilder.pushAND(`DATE(t.data) >= DATE('${startDate}')`); + queryBuilder.pushAND( + `DATE(t.datetime_processamento) >= DATE('${startDate}')`, + ); } if (args?.endDate !== undefined) { const endDate = args.endDate.toISOString().slice(0, 10); - queryBuilder.pushAND(`DATE(t.data) <= DATE('${endDate}')`); + queryBuilder.pushAND( + `DATE(t.datetime_processamento) <= DATE('${endDate}')`, + ); + } + if (args?.previousDays === true) { + queryBuilder.pushAND( + 'DATE(t.datetime_processamento) > DATE(t.datetime_transacao)', + ); } queryBuilder.pushOR([]); if (args?.getToday) { const nowStr = new Date(Date.now()).toISOString().slice(0, 10); - queryBuilder.pushAND(`DATE(t.data) = DATE('${nowStr}')`); + queryBuilder.pushAND( + `DATE(t.datetime_processamento) = DATE('${nowStr}')`, + ); } let qWhere = queryBuilder.toSQL(); @@ -370,15 +388,16 @@ export class TicketRevenuesService { const count: number = queryResult[0].count; // Remove unwanted keys and remove last item (all null if empty) - const ticketRevenues: ITicketRevenue[] = queryResult.map((i) => { + let ticketRevenues: ITicketRevenue[] = queryResult.map((i) => { delete i.status; delete i.count; return i; }); ticketRevenues.pop(); + ticketRevenues = this.mapTicketRevenues(ticketRevenues); return { - ticketRevenuesResponse: ticketRevenues, + data: ticketRevenues, countAll: count, }; } @@ -406,6 +425,9 @@ export class TicketRevenuesService { }); } + /** + * Service method: ticket-revenues/me + */ public async getMeIndividual( args: ITRGetMeIndividualArgs, paginationArgs: PaginationOptions, @@ -427,9 +449,7 @@ export class TicketRevenuesService { limit: paginationArgs.limit, offset: (paginationArgs.page - 1) * paginationArgs.limit, }); - let ticketRevenuesResponse = result.ticketRevenuesResponse; - - ticketRevenuesResponse = this.mapTicketRevenues(ticketRevenuesResponse); + let ticketRevenuesResponse = result.data; if (ticketRevenuesResponse.length === 0) { return getPagination( @@ -467,6 +487,19 @@ export class TicketRevenuesService { ); } + private renoveTodayIfNecessary( + getToday: boolean, + mostRecentResponseDate: Date, + endDate: Date, + data: ITicketRevenue[], + ): ITicketRevenue[] { + if (getToday && mostRecentResponseDate > endOfDay(endDate)) { + return this.removeTicketRevenueToday(data) as ITicketRevenue[]; + } else { + return data; + } + } + private getAmountSum(data: ITicketRevenue[]): number { return Number( data.reduce((sum, i) => sum + (i?.transactionValue || 0), 0).toFixed(2), diff --git a/src/utils/date-utils.ts b/src/utils/date-utils.ts index 24470e94..dd421702 100644 --- a/src/utils/date-utils.ts +++ b/src/utils/date-utils.ts @@ -1,4 +1,4 @@ -import { endOfDay, startOfDay, startOfMonth } from 'date-fns'; +import { endOfDay, nextFriday, startOfDay, startOfMonth } from 'date-fns'; import { TimeIntervalEnum } from './enums/time-interval.enum'; import { DateIntervalStrType } from './types/date-interval.type'; @@ -62,6 +62,12 @@ export function getStartEndDates(args: { return { startDate, endDate }; } +export function isPaymentWeekComplete(date: Date) { + const paymentDate = nextFriday(date); + const currentPaymentDate = nextFriday(new Date(Date.now())); + return paymentDate < currentPaymentDate; +} + export function safeCastDates(args: Partial) { const now = new Date(); let endDate: Date = new Date(now);