Skip to content

Commit edfc73b

Browse files
committed
PM-1142 - reset tax forms
1 parent 15bacc4 commit edfc73b

File tree

7 files changed

+72
-116
lines changed

7 files changed

+72
-116
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-- DropForeignKey
2+
ALTER TABLE "docusign_envelopes" DROP CONSTRAINT "docusign_envelopes_user_tax_form_association_id_fkey";
3+
4+
-- DropForeignKey
5+
ALTER TABLE "user_tax_form_associations" DROP CONSTRAINT "user_tax_form_associations_tax_form_id_fkey";
6+
7+
-- AlterTable
8+
DROP TABLE "user_tax_form_associations";
9+
DROP TYPE "tax_form_status";
10+
11+
CREATE TYPE "tax_form_status" AS ENUM ('incomplete', 'submitted', 'reviewed', 'voided');
12+
13+
-- CreateTable
14+
CREATE TABLE "user_tax_form_associations" (
15+
"id" UUID NOT NULL DEFAULT uuid_generate_v4(),
16+
"user_id" VARCHAR(80) NOT NULL,
17+
"tax_form_id" TEXT,
18+
"date_filed" TIMESTAMP(6),
19+
"tax_form_status" "tax_form_status",
20+
21+
CONSTRAINT "user_tax_form_associations_pkey" PRIMARY KEY ("id")
22+
);
23+
24+
-- DropTable
25+
DROP TABLE "docusign_envelopes";
26+
27+
-- DropTable
28+
DROP TABLE "tax_forms";
29+
30+
-- DropEnum
31+
DROP TYPE "docusign_envelope_status";

prisma/schema.prisma

+6-39
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,6 @@ model audit {
1919
winnings winnings @relation(fields: [winnings_id], references: [winning_id], onDelete: NoAction, onUpdate: NoAction)
2020
}
2121

22-
model docusign_envelopes {
23-
id String @id @default(dbgenerated("uuid_generate_v4()")) @db.Uuid
24-
user_tax_form_association_id String @db.Uuid
25-
envelope_id String @db.VarChar(80)
26-
template_id String @db.VarChar(80)
27-
status_id docusign_envelope_status?
28-
user_tax_form_associations user_tax_form_associations @relation(fields: [user_tax_form_association_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
29-
}
30-
3122
model origin {
3223
origin_id Int @id @default(autoincrement())
3324
origin_name String @db.VarChar(255)
@@ -137,18 +128,6 @@ model reward {
137128
winnings winnings @relation(fields: [winnings_id], references: [winning_id], onDelete: NoAction, onUpdate: NoAction)
138129
}
139130

140-
model tax_forms {
141-
tax_form_id String @id @default(dbgenerated("uuid_generate_v4()")) @db.Uuid
142-
name String? @db.VarChar(30)
143-
text String?
144-
description String? @db.VarChar(255)
145-
default_withholding_amount Decimal? @db.Decimal(12, 2)
146-
default_withholding_percentage Decimal? @db.Decimal(5, 5)
147-
use_percentage Boolean?
148-
e_sign_template_id String @db.VarChar(80)
149-
user_tax_form_associations user_tax_form_associations[]
150-
}
151-
152131
model transaction {
153132
id String @id @default(dbgenerated("uuid_generate_v4()")) @db.Uuid
154133
user_id String @db.VarChar(255)
@@ -181,14 +160,9 @@ model user_payment_methods {
181160
model user_tax_form_associations {
182161
id String @id @default(dbgenerated("uuid_generate_v4()")) @db.Uuid
183162
user_id String @db.VarChar(80)
184-
tax_form_id String @db.Uuid
163+
tax_form_id String?
185164
date_filed DateTime? @db.Timestamp(6)
186-
withholding_amount Decimal? @db.Decimal
187-
withholding_percentage Decimal? @db.Decimal(5, 5)
188-
status_id tax_form_status?
189-
use_percentage Boolean?
190-
docusign_envelopes docusign_envelopes[]
191-
tax_forms tax_forms @relation(fields: [tax_form_id], references: [tax_form_id], onDelete: NoAction, onUpdate: NoAction)
165+
tax_form_status tax_form_status?
192166
}
193167

194168
model winnings {
@@ -248,13 +222,6 @@ enum action_type {
248222
REMOVE_TAX_FORMS
249223
}
250224

251-
enum docusign_envelope_status {
252-
CREATED
253-
OTP_VERIFIED
254-
COMPLETED
255-
DECLINED
256-
}
257-
258225
enum payment_method_status {
259226
OTP_PENDING
260227
OTP_VERIFIED
@@ -282,10 +249,10 @@ enum reference_type {
282249
}
283250

284251
enum tax_form_status {
285-
OTP_PENDING
286-
OTP_VERIFIED
287-
ACTIVE
288-
INACTIVE
252+
incomplete
253+
submitted
254+
reviewed
255+
voided
289256
}
290257

291258
enum transaction_status {

src/api/admin-winning/adminWinning.service.ts

+16-16
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
WinningUpdateRequestDto,
1818
PaymentStatus,
1919
AuditPayoutDto,
20+
WinningsCategory,
2021
} from 'src/dto/adminWinning.dto';
2122
import { TaxFormRepository } from '../repository/taxForm.repo';
2223
import { PaymentMethodRepository } from '../repository/paymentMethod.repo';
@@ -94,30 +95,29 @@ export class AdminWinningService {
9495
type: item.type,
9596
winnerId: item.winner_id,
9697
origin: item.origin?.origin_name,
97-
category: item.category,
98-
title: item.title,
99-
description: item.description,
100-
externalId: item.external_id,
101-
attributes: item.attributes,
98+
category: (item.category ?? '') as WinningsCategory,
99+
title: item.title as string,
100+
description: item.description as string,
101+
externalId: item.external_id as string,
102+
attributes: (item.attributes ?? {}) as object,
102103
details: item.payment?.map((paymentItem) => ({
103104
id: paymentItem.payment_id,
104105
netAmount: Number(paymentItem.net_amount),
105106
grossAmount: Number(paymentItem.gross_amount),
106107
totalAmount: Number(paymentItem.total_amount),
107-
installmentNumber: paymentItem.installment_number,
108-
datePaid: paymentItem.date_paid ?? undefined,
109-
status: paymentItem.payment_status,
110-
currency: paymentItem.currency,
111-
releaseDate: paymentItem.release_date,
112-
category: item.category,
108+
installmentNumber: paymentItem.installment_number as number,
109+
datePaid: (paymentItem.date_paid ?? undefined) as Date,
110+
status: paymentItem.payment_status as PaymentStatus,
111+
currency: paymentItem.currency as string,
112+
releaseDate: paymentItem.release_date as Date,
113+
category: item.category as string,
113114
billingAccount: paymentItem.billing_account,
114115
})),
115-
createdAt: item.created_at,
116-
updatedAt:
117-
item.payment?.[0].date_paid ??
116+
createdAt: item.created_at as Date,
117+
updatedAt: (item.payment?.[0].date_paid ??
118118
item.payment?.[0].updated_at ??
119-
undefined,
120-
releaseDate: item.payment?.[0]?.release_date,
119+
undefined) as Date,
120+
releaseDate: item.payment?.[0]?.release_date as Date,
121121
})),
122122
pagination: {
123123
totalItems: count,

src/api/repository/taxForm.repo.ts

+7-29
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Injectable } from '@nestjs/common';
22
import { TaxFormStatus } from 'src/dto/adminWinning.dto';
3-
import { TaxFormQueryResult } from 'src/dto/taxForm.dto';
43
import { PrismaService } from 'src/shared/global/prisma.service';
54

65
@Injectable()
@@ -14,34 +13,13 @@ export class TaxFormRepository {
1413
* @returns true if user has active tax form
1514
*/
1615
async hasActiveTaxForm(userId: string): Promise<boolean> {
17-
const ret = await this.findTaxFormByUserId(userId);
18-
for (const r of ret) {
19-
if (r.status_id === TaxFormStatus.Active.toString()) {
20-
return true;
21-
}
22-
}
23-
return false;
24-
}
25-
26-
/**
27-
* Find tax forms by user id
28-
*
29-
* @param userId user id
30-
* @param tx transaction
31-
* @returns tax forms
32-
*/
33-
async findTaxFormByUserId(
34-
userId: string,
35-
tx?,
36-
): Promise<TaxFormQueryResult[]> {
37-
const db = tx || this.prisma;
16+
const count = await this.prisma.user_tax_form_associations.count({
17+
where: {
18+
user_id: userId,
19+
tax_form_status: TaxFormStatus.Reviewed,
20+
},
21+
});
3822

39-
const ret = await db.$queryRaw`
40-
SELECT u.id, u.user_id, t.tax_form_id, t.name, t.text, t.description, u.date_filed, u.withholding_amount, u.withholding_percentage, u.status_id::text, u.use_percentage
41-
FROM user_tax_form_associations AS u
42-
JOIN tax_forms AS t ON u.tax_form_id = t.tax_form_id
43-
WHERE u.user_id=${userId}
44-
`;
45-
return (ret || []) as TaxFormQueryResult[];
23+
return count > 0;
4624
}
4725
}

src/api/winning/winning.service.ts

+4-20
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,7 @@ export class WinningService {
6767
create: [] as Partial<payment>[],
6868
},
6969
};
70-
const taxForms = await this.taxFormRepo.findTaxFormByUserId(
71-
body.winnerId,
72-
tx,
73-
);
70+
7471
const payrollPayment = (body.attributes || {})['payroll'] === true;
7572

7673
const hasPaymentMethod =
@@ -90,22 +87,9 @@ export class WinningService {
9087
created_by: userId,
9188
billing_account: detail.billingAccount,
9289
};
93-
if (taxForms.length > 0) {
94-
let netAmount = detail.grossAmount;
95-
for (const taxForm of taxForms) {
96-
const withholding = taxForm.withholding_amount;
97-
netAmount -= withholding;
98-
if (netAmount <= 0) {
99-
netAmount = 0;
100-
break;
101-
}
102-
}
103-
paymentModel.net_amount = Prisma.Decimal(netAmount);
104-
paymentModel.payment_status = PaymentStatus.OWED;
105-
} else {
106-
paymentModel.net_amount = Prisma.Decimal(detail.grossAmount);
107-
paymentModel.payment_status = PaymentStatus.ON_HOLD;
108-
}
90+
91+
paymentModel.net_amount = Prisma.Decimal(detail.grossAmount);
92+
paymentModel.payment_status = PaymentStatus.ON_HOLD;
10993

11094
if (!hasPaymentMethod) {
11195
paymentModel.payment_status = PaymentStatus.ON_HOLD;

src/dto/adminWinning.dto.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,10 @@ export enum WinningsCategory {
9393
}
9494

9595
export enum TaxFormStatus {
96-
Active = 'ACTIVE',
97-
Inactive = 'INACTIVE',
98-
Verified = 'OTP_VERIFIED',
99-
OtpPending = 'OTP_PENDING',
96+
Incomplete = 'incomplete',
97+
Submitted = 'submitted',
98+
Reviewed = 'reviewed',
99+
Voided = 'voided',
100100
}
101101

102102
export enum PaymentStatus {
@@ -528,7 +528,7 @@ export class AuditPayoutDto {
528528
status: string;
529529
totalNetAmount: number;
530530
createdAt: Date;
531-
metadata: object;
531+
metadata: string;
532532
paymentMethodUsed: string;
533533
externalTransactionDetails: object;
534534
}

src/dto/taxForm.dto.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1+
import { TaxFormStatus } from './adminWinning.dto';
2+
13
export class TaxFormQueryResult {
24
id: string;
35
user_id: string;
46
tax_form_id: string;
5-
name: string;
6-
text: string;
7-
description: string;
87
date_filed: Date;
9-
withholding_amount: number;
10-
withholding_percentage: number;
11-
status_id: string;
12-
use_percentage: number;
8+
tax_form_status: TaxFormStatus;
139
}

0 commit comments

Comments
 (0)