@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.
Files changed (36) hide show
  1. package/dist/person/person.service.d.ts +2 -0
  2. package/dist/person/person.service.d.ts.map +1 -1
  3. package/dist/person/person.service.js +111 -127
  4. package/dist/person/person.service.js.map +1 -1
  5. package/dist/person/person.service.spec.d.ts +2 -0
  6. package/dist/person/person.service.spec.d.ts.map +1 -0
  7. package/dist/person/person.service.spec.js +106 -0
  8. package/dist/person/person.service.spec.js.map +1 -0
  9. package/dist/proposal/proposal.service.d.ts +5 -0
  10. package/dist/proposal/proposal.service.d.ts.map +1 -1
  11. package/dist/proposal/proposal.service.js +242 -19
  12. package/dist/proposal/proposal.service.js.map +1 -1
  13. package/dist/proposal/proposal.service.spec.js +153 -165
  14. package/dist/proposal/proposal.service.spec.js.map +1 -1
  15. package/hedhog/data/menu.yaml +35 -18
  16. package/hedhog/frontend/app/accounts/_components/account-form-sheet.tsx.ejs +517 -346
  17. package/hedhog/frontend/app/activities/_components/activity-detail-sheet.tsx.ejs +42 -17
  18. package/hedhog/frontend/app/activities/_components/activity-types.ts.ejs +1 -1
  19. package/hedhog/frontend/app/activities/page.tsx.ejs +315 -101
  20. package/hedhog/frontend/app/follow-ups/page.tsx.ejs +172 -22
  21. package/hedhog/frontend/app/page.tsx.ejs +1 -1
  22. package/hedhog/frontend/app/person/_components/person-form-sheet.tsx.ejs +1 -1
  23. package/hedhog/frontend/app/pipeline/_components/lead-detail-sheet.tsx.ejs +1 -1
  24. package/hedhog/frontend/app/pipeline/_components/lead-proposals-tab.tsx.ejs +505 -428
  25. package/hedhog/frontend/app/pipeline/page.tsx.ejs +30 -4
  26. package/hedhog/frontend/app/proposals/_components/proposals-management-page.tsx.ejs +773 -0
  27. package/hedhog/frontend/app/proposals/approvals/page.tsx.ejs +5 -0
  28. package/hedhog/frontend/app/proposals/page.tsx.ejs +5 -0
  29. package/hedhog/frontend/app/reports/page.tsx.ejs +431 -375
  30. package/hedhog/frontend/messages/en.json +100 -1
  31. package/hedhog/frontend/messages/pt.json +100 -1
  32. package/package.json +6 -6
  33. package/src/person/person.service.spec.ts +143 -0
  34. package/src/person/person.service.ts +147 -158
  35. package/src/proposal/proposal.service.spec.ts +196 -0
  36. 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
- const proposal_dto_1 = require("./dto/proposal.dto");
3
+ /// <reference types="jest" />
5
4
  const proposal_service_1 = require("./proposal.service");
6
- describe('ProposalService hardening', () => {
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
- integrationApi = {
86
+ service = new proposal_service_1.ProposalService(prisma, {
17
87
  findLinksBySource: jest.fn(),
18
88
  publishEvent: jest.fn(),
19
- };
20
- fileService = {
21
- upload: jest.fn().mockResolvedValue({
22
- id: 901,
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('rejects submission when the proposal is already expired', async () => {
61
- jest.spyOn(service, 'loadProposalDetail').mockResolvedValue({
62
- id: 12,
63
- status: proposal_dto_1.ProposalStatus.DRAFT,
64
- current_revision_number: 1,
65
- valid_until: '2020-01-01T00:00:00.000Z',
66
- total_amount_cents: 50000,
67
- proposal_revision: [
68
- {
69
- id: 22,
70
- is_current: true,
71
- proposal_item: [
72
- {
73
- id: 2,
74
- name: 'Monthly retainer',
75
- total_amount_cents: 50000,
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
- await expect(service.submitForApproval(12, { note: 'send for approval' }, 'en', 5)).rejects.toThrow('Expired proposals cannot be submitted for approval.');
82
- expect(prisma.$transaction).not.toHaveBeenCalled();
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('generates a branded proposal PDF and stores the current generated version on the revision', async () => {
85
- const tx = {
86
- $queryRawUnsafe: jest.fn().mockResolvedValue([{ id: 101 }]),
87
- proposal_document: {
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
- proposal_revision: {
93
- update: jest.fn().mockResolvedValue(undefined),
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
- prisma.$transaction.mockImplementation(async (callback) => callback(tx));
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
- proposal_revision: [
117
- {
118
- id: 501,
119
- revision_number: 3,
120
- is_current: true,
121
- summary: 'Scope, pricing, and onboarding included.',
122
- content_html: '<p>Implementation and support package.</p>',
123
- snapshot_json: {
124
- source: 'crm',
125
- },
126
- proposal_item: [
127
- {
128
- id: 1,
129
- name: 'Onboarding',
130
- description: 'Initial setup',
131
- quantity: 1,
132
- recurrence: 'one_time',
133
- unit_amount_cents: 20000,
134
- total_amount_cents: 20000,
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":"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"}
1
+ {"version":3,"file":"proposal.service.spec.js","sourceRoot":"","sources":["../../src/proposal/proposal.service.spec.ts"],"names":[],"mappings":"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"}
@@ -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: 47
142
+ order: 49
126
143
  relations:
127
144
  role:
128
145
  - where: