Skip to content

Commit

Permalink
[Feature] Tax receipt (#311)
Browse files Browse the repository at this point in the history
* Add donation receipt pdf

* Add signature and stamp pngs

* Increase stamp size and add "Receipt" text to location

* generate receipt

* 2 separate PDFs generated

* Remove unused pdf generation

* Remove second step

* Make combined pdf

* Remove unused props

* Update utils.ts

* Change > $20 to >= $20 for donation generation
  • Loading branch information
ChinemeremChigbo committed Sep 21, 2023
1 parent f2912b3 commit eb84373
Show file tree
Hide file tree
Showing 8 changed files with 329 additions and 21 deletions.
22 changes: 13 additions & 9 deletions components/admin/requests/processing/TasksCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa

const [generateInvoice, { loading: generateInvoiceLoading }] =
useMutation<GenerateInvoiceResponse, GenerateInvoiceRequest>(GENERATE_INVOICE_MUTATION);
const handleGenerateInvoice = async () => {
await generateInvoice({ variables: { input: { applicationId } } });
const handleGenerateInvoice = async (isDonation: boolean) => {
await generateInvoice({ variables: { input: { applicationId, isDonation } } });
refetch();
};

Expand Down Expand Up @@ -184,6 +184,7 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
paidThroughShopify,
shopifyConfirmationNumber,
shopifyOrderNumber,
donationAmount,
processing: {
status,
appNumber,
Expand Down Expand Up @@ -327,7 +328,6 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
</Button>
) : null}
</ProcessingTaskStep>

{/* Task 2: Hole punch parking permit: Mark as complete (CHECK) */}
<ProcessingTaskStep
id={2}
Expand Down Expand Up @@ -380,7 +380,6 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
</Button>
) : null}
</ProcessingTaskStep>

{/* Task 3: Create a new wallet card: Mark as complete (CHECK) */}
<ProcessingTaskStep
id={3}
Expand Down Expand Up @@ -433,7 +432,6 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
</Button>
) : null}
</ProcessingTaskStep>

{/* Task 4: Review Information: Review Information (MODAL) */}
<ProcessingTaskStep
id={4}
Expand Down Expand Up @@ -468,7 +466,11 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
{/* Task 5: Generate Invoice */}
<ProcessingTaskStep
id={5}
label="Generate invoice"
label={
Number(donationAmount) >= 20
? 'Generate invoice and donation receipt'
: 'Generate invoice'
}
description="Invoice number will be automatically assigned"
isCompleted={invoice !== null}
showLog={showTaskLog}
Expand All @@ -489,7 +491,11 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
_hover={!reviewRequestCompleted ? undefined : { bg: 'background.grayHover' }}
disabled={!reviewRequestCompleted || generateInvoiceLoading}
color="black"
onClick={handleGenerateInvoice}
onClick={() => {
Number(donationAmount) >= 20
? handleGenerateInvoice(true)
: handleGenerateInvoice(false);
}}
isLoading={generateInvoiceLoading}
loadingText="Generate document"
fontWeight="normal"
Expand Down Expand Up @@ -520,7 +526,6 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
</Tooltip>
)}
</ProcessingTaskStep>

{/* Task 6: Upload document: Choose document (UPLOAD FILE) */}
<ProcessingTaskStep
id={6}
Expand Down Expand Up @@ -548,7 +553,6 @@ export default function ProcessingTasksCard({ applicationId }: ProcessingTasksCa
loading={uploadDocumentsLoading}
/>
</ProcessingTaskStep>

{/* Task 7: Mail out: Mark as complete (CHECK) */}
<ProcessingTaskStep
id={7}
Expand Down
26 changes: 17 additions & 9 deletions lib/application-processing/resolvers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import {
UpdateApplicationProcessingRefundPaymentResult,
} from '@lib/graphql/types';
import { getPermanentPermitExpiryDate } from '@lib/utils/permit-expiry';
import { generateApplicationInvoicePdf } from '@lib/invoices/utils';
import { generateApplicationInvoicePdf, generateDonationInvoicePdf } from '@lib/invoices/utils';
import { getSignedUrlForS3, serverUploadToS3 } from '@lib/utils/s3-utils';
import { formatDateYYYYMMDD } from '@lib/utils/date';
import { Prisma } from '@prisma/client';
Expand Down Expand Up @@ -963,7 +963,7 @@ export const updateApplicationProcessingGenerateInvoice: Resolver<
> = async (_parent, args, { prisma, session, logger }) => {
// TODO: Validation
const { input } = args;
const { applicationId } = input;
const { applicationId, isDonation } = input;

if (!session) {
return { ok: false, error: 'Not authenticated' };
Expand Down Expand Up @@ -1011,13 +1011,21 @@ export const updateApplicationProcessingGenerateInvoice: Resolver<
const s3InvoiceKey = `rcd/invoices/${fileName}`;

// Generate application invoice
const pdfDoc = generateApplicationInvoicePdf(
application,
session,
// TODO: Remove typecast when backend guard is implemented
application.applicationProcessing.appNumber as number,
receiptNumber
);
const pdfDoc = isDonation
? generateDonationInvoicePdf(
application,
session,
// TODO: Remove typecast when backend guard is implemented
application.applicationProcessing.appNumber as number,
receiptNumber
)
: generateApplicationInvoicePdf(
application,
session,
// TODO: Remove typecast when backend guard is implemented
application.applicationProcessing.appNumber as number,
receiptNumber
);

// Upload pdf to s3
let uploadedPdf;
Expand Down
1 change: 1 addition & 0 deletions lib/application-processing/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ export default gql`
# Generate invoice PDF for application
input UpdateApplicationProcessingGenerateInvoiceInput {
applicationId: Int!
isDonation: Boolean!
}
type UpdateApplicationProcessingGenerateInvoiceResult {
Expand Down
1 change: 1 addition & 0 deletions lib/graphql/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1389,6 +1389,7 @@ export type UpdateApplicationProcessingCreateWalletCardResult = {

export type UpdateApplicationProcessingGenerateInvoiceInput = {
applicationId: Scalars['Int'];
isDonation: Scalars['Boolean'];
};

export type UpdateApplicationProcessingGenerateInvoiceResult = {
Expand Down
Loading

0 comments on commit eb84373

Please sign in to comment.