@hed-hog/finance 0.0.238 → 0.0.240
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/README.md +1 -22
- package/dist/dto/reject-title.dto.d.ts +4 -0
- package/dist/dto/reject-title.dto.d.ts.map +1 -0
- package/dist/dto/reject-title.dto.js +22 -0
- package/dist/dto/reject-title.dto.js.map +1 -0
- package/dist/dto/reverse-settlement.dto.d.ts +4 -0
- package/dist/dto/reverse-settlement.dto.d.ts.map +1 -0
- package/dist/dto/reverse-settlement.dto.js +22 -0
- package/dist/dto/reverse-settlement.dto.js.map +1 -0
- package/dist/dto/settle-installment.dto.d.ts +12 -0
- package/dist/dto/settle-installment.dto.d.ts.map +1 -0
- package/dist/dto/settle-installment.dto.js +71 -0
- package/dist/dto/settle-installment.dto.js.map +1 -0
- package/dist/finance-data.controller.d.ts +13 -5
- package/dist/finance-data.controller.d.ts.map +1 -1
- package/dist/finance-installments.controller.d.ts +380 -12
- package/dist/finance-installments.controller.d.ts.map +1 -1
- package/dist/finance-installments.controller.js +144 -0
- package/dist/finance-installments.controller.js.map +1 -1
- package/dist/finance-statements.controller.d.ts +8 -0
- package/dist/finance-statements.controller.d.ts.map +1 -1
- package/dist/finance-statements.controller.js +40 -0
- package/dist/finance-statements.controller.js.map +1 -1
- package/dist/finance.module.d.ts.map +1 -1
- package/dist/finance.module.js +1 -0
- package/dist/finance.module.js.map +1 -1
- package/dist/finance.service.d.ts +435 -19
- package/dist/finance.service.d.ts.map +1 -1
- package/dist/finance.service.js +1286 -80
- package/dist/finance.service.js.map +1 -1
- package/hedhog/data/route.yaml +117 -0
- package/hedhog/frontend/app/accounts-payable/approvals/page.tsx.ejs +92 -12
- package/hedhog/frontend/app/accounts-payable/installments/[id]/page.tsx.ejs +434 -7
- package/hedhog/frontend/app/accounts-payable/installments/page.tsx.ejs +1172 -25
- package/hedhog/frontend/app/accounts-receivable/installments/[id]/page.tsx.ejs +396 -49
- package/hedhog/frontend/app/accounts-receivable/installments/page.tsx.ejs +430 -14
- package/hedhog/frontend/app/cash-and-banks/statements/page.tsx.ejs +212 -60
- package/hedhog/frontend/messages/en.json +1 -0
- package/hedhog/frontend/messages/pt.json +1 -0
- package/hedhog/query/0_constraints.sql +2 -0
- package/hedhog/query/constraints.sql +86 -0
- package/hedhog/table/bank_account.yaml +0 -8
- package/hedhog/table/financial_title.yaml +1 -9
- package/hedhog/table/settlement.yaml +0 -8
- package/package.json +6 -6
- package/src/dto/reject-title.dto.ts +7 -0
- package/src/dto/reverse-settlement.dto.ts +7 -0
- package/src/dto/settle-installment.dto.ts +55 -0
- package/src/finance-installments.controller.ts +172 -10
- package/src/finance-statements.controller.ts +61 -2
- package/src/finance.module.ts +2 -1
- package/src/finance.service.ts +1887 -106
- package/hedhog/table/branch.yaml +0 -18
|
@@ -31,9 +31,10 @@ import {
|
|
|
31
31
|
TableRow,
|
|
32
32
|
} from '@/components/ui/table';
|
|
33
33
|
import { Textarea } from '@/components/ui/textarea';
|
|
34
|
+
import { useApp } from '@hed-hog/next-app-provider';
|
|
34
35
|
import { AlertTriangle, CheckCircle, Clock, XCircle } from 'lucide-react';
|
|
35
36
|
import { useTranslations } from 'next-intl';
|
|
36
|
-
import {
|
|
37
|
+
import { useMemo, useState } from 'react';
|
|
37
38
|
import { formatarData } from '../../_lib/formatters';
|
|
38
39
|
import { useFinanceData } from '../../_lib/use-finance-data';
|
|
39
40
|
|
|
@@ -43,10 +44,11 @@ function AprovacaoDialog({
|
|
|
43
44
|
t,
|
|
44
45
|
}: {
|
|
45
46
|
tipo: 'aprovar' | 'reprovar';
|
|
46
|
-
onConfirm: () => void;
|
|
47
|
+
onConfirm: (comment?: string) => void;
|
|
47
48
|
t: ReturnType<typeof useTranslations>;
|
|
48
49
|
}) {
|
|
49
50
|
const isAprovar = tipo === 'aprovar';
|
|
51
|
+
const [comment, setComment] = useState('');
|
|
50
52
|
|
|
51
53
|
return (
|
|
52
54
|
<Dialog>
|
|
@@ -81,6 +83,8 @@ function AprovacaoDialog({
|
|
|
81
83
|
<Label htmlFor="comentario">{t('dialog.comment')}</Label>
|
|
82
84
|
<Textarea
|
|
83
85
|
id="comentario"
|
|
86
|
+
value={comment}
|
|
87
|
+
onChange={(event) => setComment(event.target.value)}
|
|
84
88
|
placeholder={
|
|
85
89
|
isAprovar
|
|
86
90
|
? t('dialog.optionalCommentPlaceholder')
|
|
@@ -96,7 +100,7 @@ function AprovacaoDialog({
|
|
|
96
100
|
<Button
|
|
97
101
|
type="button"
|
|
98
102
|
variant={isAprovar ? 'default' : 'destructive'}
|
|
99
|
-
onClick={onConfirm}
|
|
103
|
+
onClick={() => onConfirm(comment || undefined)}
|
|
100
104
|
>
|
|
101
105
|
{isAprovar ? t('dialog.confirmApprove') : t('dialog.confirmReject')}
|
|
102
106
|
</Button>
|
|
@@ -108,19 +112,84 @@ function AprovacaoDialog({
|
|
|
108
112
|
|
|
109
113
|
export default function AprovacoesPage() {
|
|
110
114
|
const t = useTranslations('finance.PayableApprovalsPage');
|
|
111
|
-
const {
|
|
115
|
+
const { request, showToastHandler } = useApp();
|
|
116
|
+
const { data, refetch } = useFinanceData();
|
|
112
117
|
const { aprovacoesPendentes, titulosPagar, pessoas } = data;
|
|
113
118
|
|
|
114
119
|
const getPessoaById = (id?: string) => pessoas.find((p) => p.id === id);
|
|
115
120
|
|
|
116
|
-
const
|
|
121
|
+
const aprovacoes = useMemo(() => {
|
|
122
|
+
const pendenciasDoBackend = Array.isArray(aprovacoesPendentes)
|
|
123
|
+
? aprovacoesPendentes
|
|
124
|
+
: [];
|
|
117
125
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
126
|
+
const pendenciasDerivadasDosTitulos = (
|
|
127
|
+
Array.isArray(titulosPagar) ? titulosPagar : []
|
|
128
|
+
)
|
|
129
|
+
.filter(
|
|
130
|
+
(titulo) => titulo.status === 'rascunho' || titulo.status === 'draft'
|
|
131
|
+
)
|
|
132
|
+
.map((titulo) => ({
|
|
133
|
+
id: String(titulo.id),
|
|
134
|
+
tituloId: String(titulo.id),
|
|
135
|
+
solicitante: '-',
|
|
136
|
+
valor: Number(titulo.valorTotal || 0),
|
|
137
|
+
politica: 'Aprovação financeira',
|
|
138
|
+
urgencia: 'media',
|
|
139
|
+
dataSolicitacao: titulo.criadoEm,
|
|
140
|
+
}));
|
|
121
141
|
|
|
122
|
-
|
|
123
|
-
|
|
142
|
+
const basePendencias =
|
|
143
|
+
pendenciasDoBackend.length > 0
|
|
144
|
+
? pendenciasDoBackend
|
|
145
|
+
: pendenciasDerivadasDosTitulos;
|
|
146
|
+
|
|
147
|
+
return basePendencias;
|
|
148
|
+
}, [aprovacoesPendentes, titulosPagar]);
|
|
149
|
+
|
|
150
|
+
const handleAprovacao = async (_id: string, tituloId?: string) => {
|
|
151
|
+
if (!tituloId) {
|
|
152
|
+
showToastHandler?.('error', 'Título inválido para aprovação');
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
await request({
|
|
158
|
+
url: `/finance/accounts-payable/installments/${tituloId}/approve`,
|
|
159
|
+
method: 'PATCH',
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
await refetch();
|
|
163
|
+
showToastHandler?.('success', 'Título aprovado com sucesso');
|
|
164
|
+
} catch {
|
|
165
|
+
showToastHandler?.('error', 'Não foi possível aprovar o título');
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const handleReprovacao = async (
|
|
170
|
+
_id: string,
|
|
171
|
+
tituloId?: string,
|
|
172
|
+
reason?: string
|
|
173
|
+
) => {
|
|
174
|
+
if (!tituloId) {
|
|
175
|
+
showToastHandler?.('error', 'Título inválido para reprovação');
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
try {
|
|
180
|
+
await request({
|
|
181
|
+
url: `/finance/accounts-payable/installments/${tituloId}/reject`,
|
|
182
|
+
method: 'PATCH',
|
|
183
|
+
data: {
|
|
184
|
+
reason: reason || undefined,
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
await refetch();
|
|
189
|
+
showToastHandler?.('success', 'Título reprovado com sucesso');
|
|
190
|
+
} catch {
|
|
191
|
+
showToastHandler?.('error', 'Não foi possível reprovar o título');
|
|
192
|
+
}
|
|
124
193
|
};
|
|
125
194
|
|
|
126
195
|
const urgenciaConfig = {
|
|
@@ -265,12 +334,23 @@ export default function AprovacoesPage() {
|
|
|
265
334
|
<AprovacaoDialog
|
|
266
335
|
tipo="aprovar"
|
|
267
336
|
t={t}
|
|
268
|
-
onConfirm={() =>
|
|
337
|
+
onConfirm={() =>
|
|
338
|
+
void handleAprovacao(
|
|
339
|
+
aprovacao.id,
|
|
340
|
+
aprovacao.tituloId
|
|
341
|
+
)
|
|
342
|
+
}
|
|
269
343
|
/>
|
|
270
344
|
<AprovacaoDialog
|
|
271
345
|
tipo="reprovar"
|
|
272
346
|
t={t}
|
|
273
|
-
onConfirm={() =>
|
|
347
|
+
onConfirm={(comment) =>
|
|
348
|
+
void handleReprovacao(
|
|
349
|
+
aprovacao.id,
|
|
350
|
+
aprovacao.tituloId,
|
|
351
|
+
comment
|
|
352
|
+
)
|
|
353
|
+
}
|
|
274
354
|
/>
|
|
275
355
|
</div>
|
|
276
356
|
</TableCell>
|