Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions sql/reports/sfdc/ba-fees.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
SELECT
p.billing_account as billing_account_id,
COALESCE(SUM(p.challenge_fee), 0) AS total_feels,
COALESCE(SUM(p.total_amount), 0) AS total_member_payments
FROM finance.payment p
LEFT JOIN finance.winnings w
ON w.winning_id = p.winnings_id
WHERE
p.created_at >= $1::timestamptz
AND ($2::timestamptz IS NULL OR p.created_at <= $2::timestamptz)
GROUP BY p.billing_account
ORDER BY p.billing_account;
2 changes: 0 additions & 2 deletions src/common/logger.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { Logger as NestLogger } from "@nestjs/common";
import * as stringify from "json-stringify-safe";
console.log('here', stringify);


export class Logger extends NestLogger {
log(...messages: any[]): void {
Expand Down
29 changes: 26 additions & 3 deletions src/sfdc-reports/sfdc-reports.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import { Scopes as AppScopes } from "../app-constants";

import { SfdcReportsService } from "./sfdc-reports.service";
import {
BaFeesReportQueryDto,
BaFeesReportResponse,
PaymentsReportQueryDto,
PaymentsReportResponse,
} from "./sfdc-reports.dto";
Expand All @@ -29,19 +31,40 @@ export class SfdcReportsController {
@Scopes(AppScopes.AllReports)
@ApiBearerAuth()
@ApiOperation({
summary: "Export search winnings result in csv file format",
description: "Roles: Payment Admin, Payment Editor, Payment Viewer",
summary: "SFDC Payments report",
description: "",
})
@ApiQuery({
type: PaymentsReportQueryDto,
})
@ApiResponse({
status: 200,
description: "Export winnings successfully.",
description: "Export successfully.",
type: ResponseDto<PaymentsReportResponse>,
})
async getPaymentsReport(@Query() query: PaymentsReportQueryDto) {
const report = await this.reportsService.getPaymentsReport(query);
return report;
}

@Get("/ba-fees")
@UseGuards(PermissionsGuard)
@Scopes(AppScopes.AllReports)
@ApiBearerAuth()
@ApiOperation({
summary: "Report of BA to fee / member payment",
description: "",
})
@ApiQuery({
type: BaFeesReportQueryDto,
})
@ApiResponse({
status: 200,
description: "Export successfully.",
type: ResponseDto<BaFeesReportResponse>,
})
async getBaFeesReport(@Query() query: BaFeesReportQueryDto) {
const report = await this.reportsService.getBaFeesReport(query);
return report;
}
}
26 changes: 26 additions & 0 deletions src/sfdc-reports/sfdc-reports.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,29 @@ export class PaymentsReportResponse {
challengeFee: number;
paymentAmount: number;
}

export class BaFeesReportQueryDto {
@ApiProperty({
required: false,
description: "Start date for the report query in ISO format",
example: "2023-01-01T00:00:00.000Z",
})
@IsOptional()
@IsDateString()
startDate?: Date;

@ApiProperty({
required: false,
description: "End date for the report query in ISO format",
example: "2023-01-31T23:59:59.000Z",
})
@IsOptional()
@IsDateString()
endDate?: Date;
}

export interface BaFeesReportResponse {
billing_account: string;
total_fees: string;
total_member_payments: string;
}
36 changes: 20 additions & 16 deletions src/sfdc-reports/sfdc-reports.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable } from "@nestjs/common";
import { DbService } from "../db/db.service";
import { Logger } from "src/common/logger";
import { PaymentsReportQueryDto } from "./sfdc-reports.dto";
import { BaFeesReportQueryDto, BaFeesReportResponse, PaymentsReportQueryDto, PaymentsReportResponse } from "./sfdc-reports.dto";
import { SqlLoaderService } from "src/common/sql-loader.service";

@Injectable()
Expand All @@ -18,21 +18,7 @@ export class SfdcReportsService {

const query = this.sql.load("reports/sfdc/payments.sql");

const payments = await this.db.query<{
billingAccountId: string,
challengeName: string,
challengeId: string,
paymentDate: Date,
paymentId: string,
paymentStatus: string,
winnerId: string,
winnerHandle: string,
winnerFirstName: string,
winnerLastName: string,
isTask: boolean,
challengeFee: number,
paymentAmount: number,
}>(
const payments = await this.db.query<PaymentsReportResponse>(
query,
[
filters.billingAccountIds,
Expand All @@ -50,4 +36,22 @@ export class SfdcReportsService {

return payments;
}

async getBaFeesReport(filters: BaFeesReportQueryDto) {
this.logger.debug("Starting getBaFeesReport with filters:", filters);

const query = this.sql.load("reports/sfdc/ba-fees.sql");

const report = await this.db.query<BaFeesReportResponse>(
query,
[
filters.startDate,
filters.endDate,
]
);

this.logger.debug("Mapped BA fees to the final report format");

return report;
}
}