Skip to content

Commit b94f013

Browse files
authored
[Release] Version 0.3.1 (#354)
* Fix second payment method reports (#352) * [Feature] Update permit holders report (#353) * Combine address lines 1 and 2 into one line * Add applicant age to permit holders report * Add recent app expiry date to permit holders report
1 parent 35571cf commit b94f013

File tree

5 files changed

+72
-45
lines changed

5 files changed

+72
-45
lines changed

lib/graphql/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ export type ApplicationsReportColumn =
182182
| 'PAYMENT_METHOD'
183183
| 'FEE_AMOUNT'
184184
| 'DONATION_AMOUNT'
185+
| 'SECOND_PAYMENT_METHOD'
186+
| 'SECOND_FEE_AMOUNT'
187+
| 'SECOND_DONATION_AMOUNT'
185188
| 'TOTAL_AMOUNT';
186189

187190
export type ApplicationsResult = {
@@ -944,6 +947,7 @@ export type PermitHoldersReportColumn =
944947
| 'USER_ID'
945948
| 'APPLICANT_NAME'
946949
| 'APPLICANT_DATE_OF_BIRTH'
950+
| 'APPLICANT_AGE'
947951
| 'HOME_ADDRESS'
948952
| 'EMAIL'
949953
| 'PHONE_NUMBER'
@@ -952,6 +956,7 @@ export type PermitHoldersReportColumn =
952956
| 'GUARDIAN_POA_ADDRESS'
953957
| 'RECENT_APP_NUMBER'
954958
| 'RECENT_APP_TYPE'
959+
| 'RECENT_APP_EXPIRY_DATE'
955960
| 'USER_STATUS';
956961

957962
export type PermitStatus =

lib/reports/resolvers.ts

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
PaymentType,
1111
} from '@lib/graphql/types';
1212
import { SortOrder } from '@tools/types';
13-
import { formatFullName, formatPhoneNumber, formatPostalCode } from '@lib/utils/format'; // Formatting utils
13+
import { formatAddress, formatFullName, formatPhoneNumber } from '@lib/utils/format'; // Formatting utils
1414
import {
1515
formatDateTimeYYYYMMDDHHMMSS,
1616
formatDateYYYYMMDD,
@@ -91,6 +91,7 @@ export const generatePermitHoldersReport: Resolver<
9191
select: {
9292
rcdPermitId: true,
9393
type: true,
94+
expiryDate: true,
9495
},
9596
},
9697
},
@@ -103,8 +104,12 @@ export const generatePermitHoldersReport: Resolver<
103104
firstName,
104105
middleName,
105106
lastName,
106-
postalCode,
107107
dateOfBirth,
108+
addressLine1,
109+
addressLine2,
110+
city,
111+
province,
112+
postalCode,
108113
guardian,
109114
permits,
110115
phone,
@@ -113,36 +118,33 @@ export const generatePermitHoldersReport: Resolver<
113118
return {
114119
...applicant,
115120
id,
116-
phone: formatPhoneNumber(phone),
117-
dateOfBirth: formatDateYYYYMMDD(dateOfBirth),
118121
applicantName: formatFullName(firstName, middleName, lastName),
119-
postalCode: formatPostalCode(postalCode),
122+
dateOfBirth: formatDateYYYYMMDD(dateOfBirth),
123+
age: moment().diff(dateOfBirth, 'years'),
124+
homeAddress: formatAddress(addressLine1, addressLine2, city, postalCode, province),
125+
phone: formatPhoneNumber(phone),
120126
rcdPermitId: `#${permits[0].rcdPermitId}`,
121127
permitType: permits[0].type,
128+
permitExpiryDate: formatDateYYYYMMDD(permits[0].expiryDate),
122129
guardianRelationship: guardian?.relationship,
123130
guardianPOAName:
124131
guardian && formatFullName(guardian.firstName, guardian.middleName, guardian.lastName),
125-
guardianAddressLine1: guardian && guardian.addressLine1,
126-
guardianAddressLine2: guardian && guardian.addressLine2,
127-
guardianCity: guardian && guardian.city,
128-
guardianPostalCode:
129-
guardian && guardian.postalCode && formatPostalCode(guardian.postalCode),
130-
guardianProvince: guardian && guardian.province,
132+
guardianAddress:
133+
guardian &&
134+
formatAddress(
135+
guardian.addressLine1,
136+
guardian.addressLine2,
137+
guardian.city,
138+
guardian.postalCode,
139+
guardian.province
140+
),
131141
};
132142
}
133143
);
134144

135-
const filteredColumns = PERMIT_HOLDERS_COLUMNS.filter(({ value }) => columnsSet.has(value));
136-
const csvHeaders: Array<{ id: string; title: string }> = [];
137-
for (const { name, reportColumnId } of filteredColumns) {
138-
if (typeof reportColumnId === 'string') {
139-
csvHeaders.push({ id: reportColumnId, title: name });
140-
} else {
141-
for (const [columnLabel, columnId] of reportColumnId) {
142-
csvHeaders.push({ id: columnId, title: columnLabel });
143-
}
144-
}
145-
}
145+
const csvHeaders = PERMIT_HOLDERS_COLUMNS.filter(({ value }) => columnsSet.has(value)).map(
146+
({ name, reportColumnId }) => ({ id: reportColumnId, title: name })
147+
);
146148

147149
// Generate CSV string from csv object.
148150
const csvStringifier = createObjectCsvStringifier({
@@ -275,8 +277,10 @@ export const generateApplicationsReport: Resolver<
275277
dateOfBirth: dateOfBirth && formatDateYYYYMMDD(dateOfBirth),
276278
applicationDate: createdAt ? formatDateYYYYMMDDLocal(createdAt, true) : null,
277279
applicantName: formatFullName(firstName, middleName, lastName),
278-
processingFee: `$${Prisma.Decimal.add(processingFee, secondProcessingFee || 0)}`,
279-
donationAmount: `$${Prisma.Decimal.add(donationAmount, secondDonationAmount || 0)}`,
280+
processingFee: `$${processingFee}`,
281+
donationAmount: `$${donationAmount}`,
282+
secondProcessingFee: `$${secondProcessingFee || 0}`,
283+
secondDonationAmount: `$${secondDonationAmount || 0}`,
280284
totalAmount: `$${Prisma.Decimal.add(
281285
Prisma.Decimal.add(processingFee, donationAmount),
282286
Prisma.Decimal.add(secondProcessingFee || 0, secondDonationAmount || 0)

lib/reports/schema.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ export default gql`
2929
PAYMENT_METHOD
3030
FEE_AMOUNT
3131
DONATION_AMOUNT
32+
SECOND_PAYMENT_METHOD
33+
SECOND_FEE_AMOUNT
34+
SECOND_DONATION_AMOUNT
3235
TOTAL_AMOUNT
3336
}
3437
@@ -50,6 +53,7 @@ export default gql`
5053
USER_ID
5154
APPLICANT_NAME
5255
APPLICANT_DATE_OF_BIRTH
56+
APPLICANT_AGE
5357
HOME_ADDRESS
5458
EMAIL
5559
PHONE_NUMBER
@@ -58,6 +62,7 @@ export default gql`
5862
GUARDIAN_POA_ADDRESS
5963
RECENT_APP_NUMBER
6064
RECENT_APP_TYPE
65+
RECENT_APP_EXPIRY_DATE
6166
USER_STATUS
6267
}
6368

lib/utils/format.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export const formatStreetAddress = (addressLine1: string, addressLine2: string |
7575
* @param postalCode Postal code
7676
* @param province Province (optional)
7777
* @param country Country (optional)
78-
* @returns Formatted Canadian address
78+
* @returns Formatted Canadian address in one line
7979
*/
8080
export const formatAddress = (
8181
addressLine1: string,
@@ -85,9 +85,9 @@ export const formatAddress = (
8585
province?: Province,
8686
country?: string
8787
): string => {
88-
return `${addressLine2 ? `${addressLine2} - ${addressLine1}` : addressLine1}
89-
${province ? `${city} ${province}` : city}
90-
${country || ''}
91-
${postalCode}
92-
`;
88+
const streetAddress = formatStreetAddress(addressLine1, addressLine2);
89+
const postalCodeFormatted = formatPostalCode(postalCode);
90+
const provinceFormatted = province ? `, ${province}` : '';
91+
const countryFormatted = country ? `, ${country}` : '';
92+
return `${streetAddress}, ${city}${provinceFormatted} ${postalCodeFormatted}${countryFormatted}`;
9393
};

tools/admin/reports.ts

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ export const APPLICATIONS_COLUMNS: Array<{
5454
value: 'DONATION_AMOUNT',
5555
reportColumnId: 'donationAmount',
5656
},
57+
{
58+
name: 'Second Payment Method',
59+
value: 'SECOND_PAYMENT_METHOD',
60+
reportColumnId: 'secondPaymentMethod',
61+
},
62+
{
63+
name: 'Second Fee Amount',
64+
value: 'SECOND_FEE_AMOUNT',
65+
reportColumnId: 'secondProcessingFee',
66+
},
67+
{
68+
name: 'Second Donation Amount',
69+
value: 'SECOND_DONATION_AMOUNT',
70+
reportColumnId: 'secondDonationAmount',
71+
},
5772
{
5873
name: 'Total Amount',
5974
value: 'TOTAL_AMOUNT',
@@ -65,7 +80,7 @@ export const APPLICATIONS_COLUMNS: Array<{
6580
export const PERMIT_HOLDERS_COLUMNS: Array<{
6681
name: string;
6782
value: PermitHoldersReportColumn;
68-
reportColumnId: string | Array<[string, string]>;
83+
reportColumnId: string;
6984
}> = [
7085
{
7186
name: 'User ID',
@@ -82,16 +97,15 @@ export const PERMIT_HOLDERS_COLUMNS: Array<{
8297
value: 'APPLICANT_DATE_OF_BIRTH',
8398
reportColumnId: 'dateOfBirth',
8499
},
100+
{
101+
name: 'Applicant Age',
102+
value: 'APPLICANT_AGE',
103+
reportColumnId: 'age',
104+
},
85105
{
86106
name: 'Home Address',
87107
value: 'HOME_ADDRESS',
88-
reportColumnId: [
89-
['Address Line 1', 'addressLine1'],
90-
['Address Line 2', 'addressLine2'],
91-
['City', 'city'],
92-
['Province', 'province'],
93-
['Postal Code', 'postalCode'],
94-
],
108+
reportColumnId: 'homeAddress',
95109
},
96110
{
97111
name: 'Email',
@@ -116,13 +130,7 @@ export const PERMIT_HOLDERS_COLUMNS: Array<{
116130
{
117131
name: 'Guardian/POA Address',
118132
value: 'GUARDIAN_POA_ADDRESS',
119-
reportColumnId: [
120-
['Guardian/POA Address Line 1', 'guardianAddressLine1'],
121-
['Guardian/POA Address Line 2', 'guardianAddressLine2'],
122-
['Guardian/POA City', 'guardianCity'],
123-
['Guardian/POA Province', 'guardianProvince'],
124-
['Guardian/POA Postal Code', 'guardianPostalCode'],
125-
],
133+
reportColumnId: 'guardianAddress',
126134
},
127135
{
128136
name: 'Recent APP Number',
@@ -134,6 +142,11 @@ export const PERMIT_HOLDERS_COLUMNS: Array<{
134142
value: 'RECENT_APP_TYPE',
135143
reportColumnId: 'permitType',
136144
},
145+
{
146+
name: 'Recent APP Expiry Date',
147+
value: 'RECENT_APP_EXPIRY_DATE',
148+
reportColumnId: 'permitExpiryDate',
149+
},
137150
{
138151
name: 'User Status',
139152
value: 'USER_STATUS',

0 commit comments

Comments
 (0)