-
Notifications
You must be signed in to change notification settings - Fork 3
/
seller-payout-pdf-service.ts
74 lines (66 loc) · 2.47 KB
/
seller-payout-pdf-service.ts
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
* SudoSOS back-end API service.
* Copyright (C) 2024 Study association GEWIS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* @license
*/
/**
* This is the page of seller-payout-pdf-service.
*
* @module internal/pdf/seller-payout-pdf-service
*/
import {
FileResponse,
SellerPayoutParameters,
SellerPayoutRouteParams,
} from 'pdf-generator-client';
import {
entryToProduct,
getPDFTotalsFromReport,
userToIdentity,
} from '../../helpers/pdf';
import SellerPayout from '../../entity/transactions/payout/seller-payout';
import SellerPayoutPdf from '../../entity/file/seller-payout-pdf';
import { SalesReportService } from '../report-service';
import { ReportProductEntry } from '../../entity/report/report';
import { PdfService } from './pdf-service';
export default class SellerPayoutPdfService extends PdfService<SellerPayoutPdf, SellerPayout, SellerPayoutRouteParams> {
generator(routeParams: SellerPayoutRouteParams): Promise<FileResponse> {
return this.client.generateDisbursement(routeParams);
}
async getParameters(entity: SellerPayout): Promise<SellerPayoutParameters> {
const { startDate, endDate, reference } = entity;
const report = await new SalesReportService().getReport({
fromDate: startDate,
tillDate: endDate,
forId: entity.requestedBy.id,
});
const entries = report.data.products.map((s: ReportProductEntry) => entryToProduct(s));
entries.sort((a, b) => a.name.localeCompare(b.name));
return new SellerPayoutParameters({
reference: `SDS-SP-${String(entity.id).padStart(4, '0')}`,
startDate,
endDate,
entries,
total: getPDFTotalsFromReport(report),
description: reference,
debtorId: entity.requestedBy.id,
account: userToIdentity(entity.requestedBy),
});
}
pdfConstructor = SellerPayoutPdf;
routeConstructor = SellerPayoutRouteParams;
}