feat: integrate jsPDF and jsPDF-autotable for document generation; enhance employee management with print functionality and improved data handling in employee forms
This commit is contained in:
138
packages/backend/convex/documentos.ts
Normal file
138
packages/backend/convex/documentos.ts
Normal file
@@ -0,0 +1,138 @@
|
||||
import { v } from "convex/values";
|
||||
import { mutation, query } from "./_generated/server";
|
||||
|
||||
// Mutation para fazer upload de arquivo e obter o storage ID
|
||||
export const generateUploadUrl = mutation({
|
||||
args: {},
|
||||
returns: v.string(),
|
||||
handler: async (ctx) => {
|
||||
return await ctx.storage.generateUploadUrl();
|
||||
},
|
||||
});
|
||||
|
||||
// Mutation para atualizar um campo de documento do funcionário
|
||||
export const updateDocumento = mutation({
|
||||
args: {
|
||||
funcionarioId: v.id("funcionarios"),
|
||||
campo: v.string(),
|
||||
storageId: v.union(v.id("_storage"), v.null()),
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
const funcionario = await ctx.db.get(args.funcionarioId);
|
||||
if (!funcionario) {
|
||||
throw new Error("Funcionário não encontrado");
|
||||
}
|
||||
|
||||
// Atualizar o campo específico do documento
|
||||
await ctx.db.patch(args.funcionarioId, {
|
||||
[args.campo]: args.storageId,
|
||||
} as any);
|
||||
|
||||
return null;
|
||||
},
|
||||
});
|
||||
|
||||
// Query para obter URLs de todos os documentos de um funcionário
|
||||
export const getDocumentosUrls = query({
|
||||
args: { funcionarioId: v.id("funcionarios") },
|
||||
returns: v.object({
|
||||
certidaoAntecedentesPF: v.union(v.string(), v.null()),
|
||||
certidaoAntecedentesJFPE: v.union(v.string(), v.null()),
|
||||
certidaoAntecedentesSDS: v.union(v.string(), v.null()),
|
||||
certidaoAntecedentesTJPE: v.union(v.string(), v.null()),
|
||||
certidaoImprobidade: v.union(v.string(), v.null()),
|
||||
rgFrente: v.union(v.string(), v.null()),
|
||||
rgVerso: v.union(v.string(), v.null()),
|
||||
cpfFrente: v.union(v.string(), v.null()),
|
||||
cpfVerso: v.union(v.string(), v.null()),
|
||||
situacaoCadastralCPF: v.union(v.string(), v.null()),
|
||||
tituloEleitorFrente: v.union(v.string(), v.null()),
|
||||
tituloEleitorVerso: v.union(v.string(), v.null()),
|
||||
comprovanteVotacao: v.union(v.string(), v.null()),
|
||||
carteiraProfissionalFrente: v.union(v.string(), v.null()),
|
||||
carteiraProfissionalVerso: v.union(v.string(), v.null()),
|
||||
comprovantePIS: v.union(v.string(), v.null()),
|
||||
certidaoRegistroCivil: v.union(v.string(), v.null()),
|
||||
certidaoNascimentoDependentes: v.union(v.string(), v.null()),
|
||||
cpfDependentes: v.union(v.string(), v.null()),
|
||||
reservistaDoc: v.union(v.string(), v.null()),
|
||||
comprovanteEscolaridade: v.union(v.string(), v.null()),
|
||||
comprovanteResidencia: v.union(v.string(), v.null()),
|
||||
comprovanteContaBradesco: v.union(v.string(), v.null()),
|
||||
declaracaoAcumulacaoCargo: v.union(v.string(), v.null()),
|
||||
declaracaoDependentesIR: v.union(v.string(), v.null()),
|
||||
declaracaoIdoneidade: v.union(v.string(), v.null()),
|
||||
termoNepotismo: v.union(v.string(), v.null()),
|
||||
termoOpcaoRemuneracao: v.union(v.string(), v.null()),
|
||||
}),
|
||||
handler: async (ctx, args) => {
|
||||
const funcionario = await ctx.db.get(args.funcionarioId);
|
||||
if (!funcionario) {
|
||||
throw new Error("Funcionário não encontrado");
|
||||
}
|
||||
|
||||
// Gerar URLs para todos os documentos
|
||||
const urls: Record<string, string | null> = {};
|
||||
const campos = [
|
||||
"certidaoAntecedentesPF",
|
||||
"certidaoAntecedentesJFPE",
|
||||
"certidaoAntecedentesSDS",
|
||||
"certidaoAntecedentesTJPE",
|
||||
"certidaoImprobidade",
|
||||
"rgFrente",
|
||||
"rgVerso",
|
||||
"cpfFrente",
|
||||
"cpfVerso",
|
||||
"situacaoCadastralCPF",
|
||||
"tituloEleitorFrente",
|
||||
"tituloEleitorVerso",
|
||||
"comprovanteVotacao",
|
||||
"carteiraProfissionalFrente",
|
||||
"carteiraProfissionalVerso",
|
||||
"comprovantePIS",
|
||||
"certidaoRegistroCivil",
|
||||
"certidaoNascimentoDependentes",
|
||||
"cpfDependentes",
|
||||
"reservistaDoc",
|
||||
"comprovanteEscolaridade",
|
||||
"comprovanteResidencia",
|
||||
"comprovanteContaBradesco",
|
||||
"declaracaoAcumulacaoCargo",
|
||||
"declaracaoDependentesIR",
|
||||
"declaracaoIdoneidade",
|
||||
"termoNepotismo",
|
||||
"termoOpcaoRemuneracao",
|
||||
];
|
||||
|
||||
for (const campo of campos) {
|
||||
const storageId = (funcionario as any)[campo];
|
||||
if (storageId) {
|
||||
urls[campo] = await ctx.storage.getUrl(storageId);
|
||||
} else {
|
||||
urls[campo] = null;
|
||||
}
|
||||
}
|
||||
|
||||
return urls as any;
|
||||
},
|
||||
});
|
||||
|
||||
// Query para obter metadados de um documento
|
||||
export const getDocumentoMetadata = query({
|
||||
args: { storageId: v.id("_storage") },
|
||||
returns: v.union(
|
||||
v.object({
|
||||
_id: v.id("_storage"),
|
||||
_creationTime: v.number(),
|
||||
contentType: v.optional(v.string()),
|
||||
sha256: v.string(),
|
||||
size: v.number(),
|
||||
}),
|
||||
v.null()
|
||||
),
|
||||
handler: async (ctx, args) => {
|
||||
return await ctx.db.system.get(args.storageId);
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user