Merge remote-tracking branch 'origin' into feat-many-fixes

This commit is contained in:
2025-11-11 16:25:29 -03:00
11 changed files with 5158 additions and 2366 deletions

View File

@@ -19,13 +19,12 @@
let funcionarioId = $derived($page.params.funcionarioId as string);
let funcionario = $state<any>(null);
let simbolo = $state<any>(null);
let cursos = $state<any[]>([]);
let documentosUrls = $state<Record<string, string | null>>({});
let loading = $state(true);
let showPrintModal = $state(false);
let showPrintFinanceiro = $state(false);
let funcionario = $state<any>(null);
let simbolo = $state<any>(null);
let cursos = $state<any[]>([]);
let documentosUrls = $state<Record<string, string | null>>({});
let loading = $state(true);
let showPrintModal = $state(false);
async function load() {
try {
@@ -39,9 +38,12 @@
return;
}
funcionario = data;
simbolo = data.simbolo;
cursos = data.cursos || [];
funcionario = data;
simbolo = data.simbolo;
if (simbolo) {
funcionario = { ...funcionario, simbolo };
}
cursos = data.cursos || [];
// Carregar URLs dos documentos
try {
@@ -130,84 +132,74 @@
</div>
</div>
<div class="flex flex-wrap gap-2">
<button
class="btn btn-primary gap-2"
onclick={() => goto(`/recursos-humanos/funcionarios/${funcionarioId}/editar`)}
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
/>
</svg>
Editar
</button>
<button
class="btn btn-secondary gap-2"
onclick={() => goto(`/recursos-humanos/funcionarios/${funcionarioId}/documentos`)}
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z"
/>
</svg>
Ver Documentos
</button>
<button class="btn btn-accent gap-2" onclick={() => (showPrintModal = true)}>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"
/>
</svg>
Imprimir Ficha
</button>
<button class="btn btn-info gap-2" onclick={() => (showPrintFinanceiro = true)}>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
/>
</svg>
Imprimir Dados Financeiros
</button>
</div>
</div>
</div>
<div class="flex flex-wrap gap-2">
<button
class="btn btn-primary gap-2"
onclick={() =>
goto(`/recursos-humanos/funcionarios/${funcionarioId}/editar`)}
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
/>
</svg>
Editar
</button>
<button
class="btn btn-secondary gap-2"
onclick={() =>
goto(
`/recursos-humanos/funcionarios/${funcionarioId}/documentos`,
)}
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z"
/>
</svg>
Ver Documentos
</button>
<button
class="btn btn-accent gap-2"
onclick={() => (showPrintModal = true)}
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"
/>
</svg>
Imprimir Ficha
</button>
</div>
</div>
</div>
<!-- Dados Financeiros - Destaque -->
{#if simbolo}
@@ -856,126 +848,5 @@
<PrintModal {funcionario} onClose={() => (showPrintModal = false)} />
{/if}
<!-- Modal de Impressão Dados Financeiros -->
{#if showPrintFinanceiro && simbolo}
<dialog class="modal modal-open">
<div class="modal-box max-w-2xl">
<h3 class="mb-6 border-b pb-3 text-2xl font-bold">
Dados Financeiros - {funcionario.nome}
</h3>
<div class="space-y-4 print:space-y-2" id="dados-financeiros-print">
<!-- Informações Básicas -->
<div class="grid grid-cols-2 gap-4">
<div>
<p class="text-base-content/70 text-sm font-semibold">Nome</p>
<p class="text-lg">{funcionario.nome}</p>
</div>
<div>
<p class="text-base-content/70 text-sm font-semibold">Matrícula</p>
<p class="text-lg">{funcionario.matricula || 'N/A'}</p>
</div>
<div>
<p class="text-base-content/70 text-sm font-semibold">CPF</p>
<p class="text-lg">{maskCPF(funcionario.cpf)}</p>
</div>
<div>
<p class="text-base-content/70 text-sm font-semibold">Data Admissão</p>
<p class="text-lg">{funcionario.admissaoData || 'N/A'}</p>
</div>
</div>
<div class="divider"></div>
<!-- Dados Financeiros -->
<div>
<h4 class="mb-3 text-lg font-bold">Remuneração</h4>
<div class="space-y-2">
<div class="bg-base-200 flex justify-between rounded p-2">
<span class="font-semibold">Símbolo:</span>
<span>{simbolo.nome}</span>
</div>
<div class="bg-base-200 flex justify-between rounded p-2">
<span class="font-semibold">Tipo:</span>
<span
>{simbolo.tipo === 'cargo_comissionado'
? 'Cargo Comissionado'
: 'Função Gratificada'}</span
>
</div>
{#if funcionario.simboloTipo === 'cargo_comissionado'}
<div class="bg-info/10 flex justify-between rounded p-2">
<span class="font-semibold">Vencimento:</span>
<span class="text-info font-bold">R$ {simbolo.vencValor}</span>
</div>
<div class="bg-warning/10 flex justify-between rounded p-2">
<span class="font-semibold">Representação:</span>
<span class="text-warning font-bold">R$ {simbolo.repValor}</span>
</div>
{/if}
<div
class="bg-success/20 border-success/40 flex justify-between rounded border-2 p-3"
>
<span class="text-lg font-bold">TOTAL:</span>
<span class="text-success text-2xl font-bold">R$ {simbolo.valor}</span>
</div>
</div>
</div>
{#if funcionario.contaBradescoNumero}
<div class="divider"></div>
<div>
<h4 class="mb-3 text-lg font-bold">Dados Bancários</h4>
<div class="space-y-2">
<div class="bg-base-200 flex justify-between rounded p-2">
<span class="font-semibold">Banco:</span>
<span>Bradesco</span>
</div>
<div class="bg-base-200 flex justify-between rounded p-2">
<span class="font-semibold">Agência:</span>
<span>{funcionario.contaBradescoAgencia || 'N/A'}</span>
</div>
<div class="bg-base-200 flex justify-between rounded p-2">
<span class="font-semibold">Conta:</span>
<span
>{funcionario.contaBradescoNumero}{funcionario.contaBradescoDV
? `-${funcionario.contaBradescoDV}`
: ''}</span
>
</div>
</div>
</div>
{/if}
</div>
<div class="modal-action">
<button class="btn btn-primary gap-2" onclick={() => window.print()}>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"
/>
</svg>
Imprimir
</button>
<button class="btn" onclick={() => (showPrintFinanceiro = false)}>Fechar</button>
</div>
</div>
<form method="dialog" class="modal-backdrop">
<button
type="button"
onclick={() => (showPrintFinanceiro = false)}
aria-label="Fechar modal">Fechar</button
>
</form>
</dialog>
{/if}
<!-- Modal de Impressão Dados Financeiros removido -->
{/if}