@hed-hog/contact 0.0.301 → 0.0.302
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/person/person.service.d.ts +2 -0
- package/dist/person/person.service.d.ts.map +1 -1
- package/dist/person/person.service.js +111 -127
- package/dist/person/person.service.js.map +1 -1
- package/dist/person/person.service.spec.d.ts +2 -0
- package/dist/person/person.service.spec.d.ts.map +1 -0
- package/dist/person/person.service.spec.js +106 -0
- package/dist/person/person.service.spec.js.map +1 -0
- package/dist/proposal/proposal.service.d.ts +5 -0
- package/dist/proposal/proposal.service.d.ts.map +1 -1
- package/dist/proposal/proposal.service.js +242 -19
- package/dist/proposal/proposal.service.js.map +1 -1
- package/dist/proposal/proposal.service.spec.js +153 -165
- package/dist/proposal/proposal.service.spec.js.map +1 -1
- package/hedhog/data/menu.yaml +35 -18
- package/hedhog/frontend/app/accounts/_components/account-form-sheet.tsx.ejs +517 -346
- package/hedhog/frontend/app/activities/_components/activity-detail-sheet.tsx.ejs +42 -17
- package/hedhog/frontend/app/activities/_components/activity-types.ts.ejs +1 -1
- package/hedhog/frontend/app/activities/page.tsx.ejs +315 -101
- package/hedhog/frontend/app/follow-ups/page.tsx.ejs +172 -22
- package/hedhog/frontend/app/page.tsx.ejs +1 -1
- package/hedhog/frontend/app/person/_components/person-form-sheet.tsx.ejs +1 -1
- package/hedhog/frontend/app/pipeline/_components/lead-detail-sheet.tsx.ejs +1 -1
- package/hedhog/frontend/app/pipeline/_components/lead-proposals-tab.tsx.ejs +505 -428
- package/hedhog/frontend/app/pipeline/page.tsx.ejs +30 -4
- package/hedhog/frontend/app/proposals/_components/proposals-management-page.tsx.ejs +773 -0
- package/hedhog/frontend/app/proposals/approvals/page.tsx.ejs +5 -0
- package/hedhog/frontend/app/proposals/page.tsx.ejs +5 -0
- package/hedhog/frontend/app/reports/page.tsx.ejs +431 -375
- package/hedhog/frontend/messages/en.json +100 -1
- package/hedhog/frontend/messages/pt.json +100 -1
- package/package.json +6 -6
- package/src/person/person.service.spec.ts +143 -0
- package/src/person/person.service.ts +147 -158
- package/src/proposal/proposal.service.spec.ts +196 -0
- package/src/proposal/proposal.service.ts +348 -18
|
@@ -1,187 +1,175 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/// <reference types="jest" />
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
|
|
3
|
+
/// <reference types="jest" />
|
|
5
4
|
const proposal_service_1 = require("./proposal.service");
|
|
6
|
-
describe('ProposalService
|
|
5
|
+
describe('ProposalService regression coverage', () => {
|
|
7
6
|
let prisma;
|
|
8
|
-
let integrationApi;
|
|
9
|
-
let fileService;
|
|
10
|
-
let settingService;
|
|
11
7
|
let service;
|
|
12
8
|
beforeEach(() => {
|
|
13
9
|
prisma = {
|
|
10
|
+
proposal: {
|
|
11
|
+
findMany: jest.fn().mockImplementation(({ include }) => {
|
|
12
|
+
var _a, _b, _c, _d, _e, _f;
|
|
13
|
+
if (((_b = (_a = include === null || include === void 0 ? void 0 : include.person) === null || _a === void 0 ? void 0 : _a.select) === null || _b === void 0 ? void 0 : _b.trade_name) ||
|
|
14
|
+
((_d = (_c = include === null || include === void 0 ? void 0 : include.person) === null || _c === void 0 ? void 0 : _c.select) === null || _d === void 0 ? void 0 : _d.email) ||
|
|
15
|
+
((_f = (_e = include === null || include === void 0 ? void 0 : include.person) === null || _e === void 0 ? void 0 : _e.select) === null || _f === void 0 ? void 0 : _f.phone)) {
|
|
16
|
+
throw new Error('Unknown field selected directly on model `person`.');
|
|
17
|
+
}
|
|
18
|
+
return Promise.resolve([
|
|
19
|
+
{
|
|
20
|
+
id: 101,
|
|
21
|
+
person_id: 8,
|
|
22
|
+
person: {
|
|
23
|
+
id: 8,
|
|
24
|
+
name: 'Ana Cliente',
|
|
25
|
+
email: 'contato@cliente.test',
|
|
26
|
+
phone: '+55 11 99999-0000',
|
|
27
|
+
},
|
|
28
|
+
proposal_revision: [],
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
}),
|
|
32
|
+
count: jest.fn().mockResolvedValue(1),
|
|
33
|
+
aggregate: jest.fn().mockResolvedValue({
|
|
34
|
+
_sum: {
|
|
35
|
+
total_amount_cents: 0,
|
|
36
|
+
},
|
|
37
|
+
}),
|
|
38
|
+
},
|
|
39
|
+
person_company: {
|
|
40
|
+
findMany: jest.fn().mockResolvedValue([
|
|
41
|
+
{
|
|
42
|
+
id: 8,
|
|
43
|
+
trade_name: 'Cliente SA',
|
|
44
|
+
},
|
|
45
|
+
]),
|
|
46
|
+
},
|
|
47
|
+
contact: {
|
|
48
|
+
findMany: jest.fn().mockResolvedValue([
|
|
49
|
+
{
|
|
50
|
+
id: 1,
|
|
51
|
+
person_id: 8,
|
|
52
|
+
value: 'contato@cliente.test',
|
|
53
|
+
is_primary: true,
|
|
54
|
+
contact_type: {
|
|
55
|
+
code: 'EMAIL',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 2,
|
|
60
|
+
person_id: 8,
|
|
61
|
+
value: '+55 11 99999-0000',
|
|
62
|
+
is_primary: true,
|
|
63
|
+
contact_type: {
|
|
64
|
+
code: 'PHONE',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
]),
|
|
68
|
+
},
|
|
69
|
+
document: {
|
|
70
|
+
findMany: jest.fn().mockResolvedValue([
|
|
71
|
+
{
|
|
72
|
+
id: 3,
|
|
73
|
+
person_id: 8,
|
|
74
|
+
value: '12.345.678/0001-90',
|
|
75
|
+
},
|
|
76
|
+
]),
|
|
77
|
+
},
|
|
78
|
+
person_metadata: {
|
|
79
|
+
findFirst: jest.fn().mockResolvedValue(null),
|
|
80
|
+
update: jest.fn().mockResolvedValue(null),
|
|
81
|
+
create: jest.fn().mockResolvedValue(null),
|
|
82
|
+
delete: jest.fn().mockResolvedValue(null),
|
|
83
|
+
},
|
|
14
84
|
$transaction: jest.fn(),
|
|
15
85
|
};
|
|
16
|
-
|
|
86
|
+
service = new proposal_service_1.ProposalService(prisma, {
|
|
17
87
|
findLinksBySource: jest.fn(),
|
|
18
88
|
publishEvent: jest.fn(),
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
path: 'contact/proposals/generated/proposal-101.pdf',
|
|
24
|
-
}),
|
|
25
|
-
};
|
|
26
|
-
settingService = {
|
|
27
|
-
getSettingValues: jest.fn().mockResolvedValue({
|
|
28
|
-
'system-name': 'HedHog',
|
|
29
|
-
}),
|
|
30
|
-
};
|
|
31
|
-
service = new proposal_service_1.ProposalService(prisma, integrationApi, fileService, settingService);
|
|
32
|
-
});
|
|
33
|
-
afterEach(() => {
|
|
34
|
-
jest.clearAllMocks();
|
|
35
|
-
});
|
|
36
|
-
it('rejects approval when the proposal is not pending approval', async () => {
|
|
37
|
-
jest.spyOn(service, 'loadProposalDetail').mockResolvedValue({
|
|
38
|
-
id: 11,
|
|
39
|
-
status: proposal_dto_1.ProposalStatus.DRAFT,
|
|
40
|
-
current_revision_number: 1,
|
|
41
|
-
valid_until: '2030-01-01T00:00:00.000Z',
|
|
42
|
-
total_amount_cents: 150000,
|
|
43
|
-
proposal_revision: [
|
|
44
|
-
{
|
|
45
|
-
id: 21,
|
|
46
|
-
is_current: true,
|
|
47
|
-
proposal_item: [
|
|
48
|
-
{
|
|
49
|
-
id: 1,
|
|
50
|
-
name: 'Implementation package',
|
|
51
|
-
total_amount_cents: 150000,
|
|
52
|
-
},
|
|
53
|
-
],
|
|
54
|
-
},
|
|
55
|
-
],
|
|
89
|
+
}, {
|
|
90
|
+
upload: jest.fn(),
|
|
91
|
+
}, {
|
|
92
|
+
getSettingValues: jest.fn(),
|
|
56
93
|
});
|
|
57
|
-
await expect(service.approve(11, { note: 'approve now' }, 'en', 7)).rejects.toThrow('Only proposals pending approval can be approved.');
|
|
58
|
-
expect(prisma.$transaction).not.toHaveBeenCalled();
|
|
59
94
|
});
|
|
60
|
-
it('
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
95
|
+
it('lists proposals without selecting a missing person.trade_name column', async () => {
|
|
96
|
+
const result = await service.list({
|
|
97
|
+
search: 'cliente',
|
|
98
|
+
take: 20,
|
|
99
|
+
skip: 0,
|
|
100
|
+
pageSize: 20,
|
|
101
|
+
});
|
|
102
|
+
expect(prisma.proposal.findMany).toHaveBeenCalledWith(expect.objectContaining({
|
|
103
|
+
include: expect.objectContaining({
|
|
104
|
+
person: expect.objectContaining({
|
|
105
|
+
select: expect.not.objectContaining({
|
|
106
|
+
trade_name: true,
|
|
107
|
+
}),
|
|
108
|
+
}),
|
|
109
|
+
}),
|
|
110
|
+
}));
|
|
111
|
+
expect(prisma.person_company.findMany).toHaveBeenCalledWith({
|
|
112
|
+
where: {
|
|
113
|
+
id: {
|
|
114
|
+
in: [8],
|
|
78
115
|
},
|
|
79
|
-
|
|
116
|
+
},
|
|
117
|
+
select: {
|
|
118
|
+
id: true,
|
|
119
|
+
trade_name: true,
|
|
120
|
+
},
|
|
80
121
|
});
|
|
81
|
-
|
|
82
|
-
expect(prisma
|
|
122
|
+
expect(prisma.contact.findMany).toHaveBeenCalled();
|
|
123
|
+
expect(prisma.document.findMany).toHaveBeenCalled();
|
|
124
|
+
expect(result.data).toEqual(expect.arrayContaining([
|
|
125
|
+
expect.objectContaining({
|
|
126
|
+
person: expect.objectContaining({
|
|
127
|
+
trade_name: 'Cliente SA',
|
|
128
|
+
email: 'contato@cliente.test',
|
|
129
|
+
phone: '+55 11 99999-0000',
|
|
130
|
+
document: '12.345.678/0001-90',
|
|
131
|
+
}),
|
|
132
|
+
}),
|
|
133
|
+
]));
|
|
83
134
|
});
|
|
84
|
-
it('
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
count: jest.fn().mockResolvedValue(1),
|
|
89
|
-
updateMany: jest.fn().mockResolvedValue({ count: 1 }),
|
|
90
|
-
create: jest.fn().mockResolvedValue({ id: 301 }),
|
|
135
|
+
it('syncs person deal value metadata from approved and converted proposal totals', async () => {
|
|
136
|
+
prisma.proposal.aggregate.mockResolvedValue({
|
|
137
|
+
_sum: {
|
|
138
|
+
total_amount_cents: 125050,
|
|
91
139
|
},
|
|
92
|
-
|
|
93
|
-
|
|
140
|
+
});
|
|
141
|
+
prisma.person_metadata.findFirst.mockResolvedValue({ id: 77 });
|
|
142
|
+
await service.syncPersonDealValueFromApprovedProposals(prisma, 8);
|
|
143
|
+
expect(prisma.proposal.aggregate).toHaveBeenCalledWith({
|
|
144
|
+
where: {
|
|
145
|
+
deleted_at: null,
|
|
146
|
+
person_id: 8,
|
|
147
|
+
status: {
|
|
148
|
+
in: ['approved', 'contract_generated'],
|
|
149
|
+
},
|
|
94
150
|
},
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const proposal = {
|
|
98
|
-
id: 101,
|
|
99
|
-
code: 'PROP-101',
|
|
100
|
-
title: 'Commercial Proposal',
|
|
101
|
-
status: proposal_dto_1.ProposalStatus.DRAFT,
|
|
102
|
-
currency_code: 'BRL',
|
|
103
|
-
valid_until: '2030-02-15T00:00:00.000Z',
|
|
104
|
-
subtotal_amount_cents: 120000,
|
|
105
|
-
discount_amount_cents: 20000,
|
|
106
|
-
tax_amount_cents: 0,
|
|
107
|
-
total_amount_cents: 100000,
|
|
108
|
-
notes: 'Payment within 15 days.',
|
|
109
|
-
person: {
|
|
110
|
-
id: 8,
|
|
111
|
-
name: 'Ana Cliente',
|
|
112
|
-
trade_name: 'Cliente SA',
|
|
113
|
-
email: 'contato@cliente.test',
|
|
114
|
-
document: '12.345.678/0001-90',
|
|
151
|
+
_sum: {
|
|
152
|
+
total_amount_cents: true,
|
|
115
153
|
},
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
id: 2,
|
|
138
|
-
name: 'Monthly retainer',
|
|
139
|
-
description: 'Managed support',
|
|
140
|
-
quantity: 1,
|
|
141
|
-
recurrence: 'monthly',
|
|
142
|
-
unit_amount_cents: 100000,
|
|
143
|
-
total_amount_cents: 100000,
|
|
144
|
-
},
|
|
145
|
-
],
|
|
146
|
-
},
|
|
147
|
-
],
|
|
148
|
-
};
|
|
149
|
-
jest.spyOn(service, 'loadProposalDetail').mockResolvedValue(proposal);
|
|
150
|
-
jest
|
|
151
|
-
.spyOn(service, 'renderProposalPdfBuffer')
|
|
152
|
-
.mockResolvedValue(Buffer.from('proposal-pdf'));
|
|
153
|
-
const result = await service.generateDocument(101, 'pt-BR', 44);
|
|
154
|
-
expect(fileService.upload).toHaveBeenCalledWith('contact/proposals/generated', expect.objectContaining({
|
|
155
|
-
originalname: expect.stringMatching(/\.pdf$/),
|
|
156
|
-
mimetype: 'application/pdf',
|
|
157
|
-
}));
|
|
158
|
-
expect(tx.proposal_document.updateMany).toHaveBeenCalledWith(expect.objectContaining({
|
|
159
|
-
where: expect.objectContaining({
|
|
160
|
-
proposal_id: 101,
|
|
161
|
-
proposal_revision_id: 501,
|
|
162
|
-
document_type: 'generated_pdf',
|
|
163
|
-
}),
|
|
164
|
-
}));
|
|
165
|
-
expect(tx.proposal_document.create).toHaveBeenCalledWith(expect.objectContaining({
|
|
166
|
-
data: expect.objectContaining({
|
|
167
|
-
proposal_id: 101,
|
|
168
|
-
proposal_revision_id: 501,
|
|
169
|
-
document_type: 'generated_pdf',
|
|
170
|
-
file_id: 901,
|
|
171
|
-
source_kind: 'generated',
|
|
172
|
-
}),
|
|
173
|
-
}));
|
|
174
|
-
expect(tx.proposal_revision.update).toHaveBeenCalledWith(expect.objectContaining({
|
|
175
|
-
where: { id: 501 },
|
|
176
|
-
}));
|
|
177
|
-
expect(result).toEqual(expect.objectContaining({
|
|
178
|
-
proposalId: 101,
|
|
179
|
-
proposalRevisionId: 501,
|
|
180
|
-
renderVersion: 2,
|
|
181
|
-
documentType: 'generated_pdf',
|
|
182
|
-
fileId: 901,
|
|
183
|
-
html: expect.stringContaining('Proposta Comercial'),
|
|
184
|
-
}));
|
|
154
|
+
});
|
|
155
|
+
expect(prisma.person_metadata.update).toHaveBeenCalledWith({
|
|
156
|
+
where: { id: 77 },
|
|
157
|
+
data: { value: '1250.50' },
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
it('clears person deal value metadata when there are no approved proposals left', async () => {
|
|
161
|
+
prisma.proposal.aggregate.mockResolvedValue({
|
|
162
|
+
_sum: {
|
|
163
|
+
total_amount_cents: 0,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
prisma.person_metadata.findFirst.mockResolvedValue({ id: 88 });
|
|
167
|
+
await service.syncPersonDealValueFromApprovedProposals(prisma, 8);
|
|
168
|
+
expect(prisma.person_metadata.delete).toHaveBeenCalledWith({
|
|
169
|
+
where: { id: 88 },
|
|
170
|
+
});
|
|
171
|
+
expect(prisma.person_metadata.create).not.toHaveBeenCalled();
|
|
172
|
+
expect(prisma.person_metadata.update).not.toHaveBeenCalled();
|
|
185
173
|
});
|
|
186
174
|
});
|
|
187
175
|
//# sourceMappingURL=proposal.service.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.service.spec.js","sourceRoot":"","sources":["../../src/proposal/proposal.service.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proposal.service.spec.js","sourceRoot":"","sources":["../../src/proposal/proposal.service.spec.ts"],"names":[],"mappings":"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"}
|
package/hedhog/data/menu.yaml
CHANGED
|
@@ -11,23 +11,6 @@
|
|
|
11
11
|
- where:
|
|
12
12
|
slug: admin-contact
|
|
13
13
|
|
|
14
|
-
- menu_id:
|
|
15
|
-
where:
|
|
16
|
-
slug: /contact
|
|
17
|
-
icon: layout-dashboard
|
|
18
|
-
url: /contact/dashboard
|
|
19
|
-
name:
|
|
20
|
-
en: Dashboard
|
|
21
|
-
pt: Dashboard
|
|
22
|
-
slug: /contact/dashboard
|
|
23
|
-
order: 41
|
|
24
|
-
relations:
|
|
25
|
-
role:
|
|
26
|
-
- where:
|
|
27
|
-
slug: admin
|
|
28
|
-
- where:
|
|
29
|
-
slug: admin-contact
|
|
30
|
-
|
|
31
14
|
- menu_id:
|
|
32
15
|
where:
|
|
33
16
|
slug: /contact
|
|
@@ -113,6 +96,40 @@
|
|
|
113
96
|
- where:
|
|
114
97
|
slug: admin-contact
|
|
115
98
|
|
|
99
|
+
- menu_id:
|
|
100
|
+
where:
|
|
101
|
+
slug: /contact
|
|
102
|
+
icon: file-text
|
|
103
|
+
url: /contact/proposals
|
|
104
|
+
name:
|
|
105
|
+
en: Proposals
|
|
106
|
+
pt: Propostas
|
|
107
|
+
slug: /contact/proposals
|
|
108
|
+
order: 47
|
|
109
|
+
relations:
|
|
110
|
+
role:
|
|
111
|
+
- where:
|
|
112
|
+
slug: admin
|
|
113
|
+
- where:
|
|
114
|
+
slug: admin-contact
|
|
115
|
+
|
|
116
|
+
- menu_id:
|
|
117
|
+
where:
|
|
118
|
+
slug: /contact
|
|
119
|
+
icon: check-circle-2
|
|
120
|
+
url: /contact/proposals/approvals
|
|
121
|
+
name:
|
|
122
|
+
en: Pending Approvals
|
|
123
|
+
pt: Aprovações Pendentes
|
|
124
|
+
slug: /contact/proposals/approvals
|
|
125
|
+
order: 48
|
|
126
|
+
relations:
|
|
127
|
+
role:
|
|
128
|
+
- where:
|
|
129
|
+
slug: admin
|
|
130
|
+
- where:
|
|
131
|
+
slug: admin-contact
|
|
132
|
+
|
|
116
133
|
- menu_id:
|
|
117
134
|
where:
|
|
118
135
|
slug: /contact
|
|
@@ -122,7 +139,7 @@
|
|
|
122
139
|
en: Reports
|
|
123
140
|
pt: Relatórios
|
|
124
141
|
slug: /contact/reports
|
|
125
|
-
order:
|
|
142
|
+
order: 49
|
|
126
143
|
relations:
|
|
127
144
|
role:
|
|
128
145
|
- where:
|