diff --git a/apps/web/src/lib/components/PrintModal.svelte b/apps/web/src/lib/components/PrintModal.svelte index 283edd7..0995b0f 100644 --- a/apps/web/src/lib/components/PrintModal.svelte +++ b/apps/web/src/lib/components/PrintModal.svelte @@ -23,33 +23,43 @@ let modalRef: HTMLDialogElement; let generating = $state(false); - // Seções selecionáveis - let sections = $state({ - dadosPessoais: true, - filiacao: true, - naturalidade: true, - documentos: true, - formacao: true, - saude: true, - endereco: true, - contato: true, - cargo: true, - bancario: true - }); + // Seções selecionáveis + let sections = $state({ + dadosPessoais: true, + filiacao: true, + naturalidade: true, + documentos: true, + formacao: true, + saude: true, + endereco: true, + contato: true, + cargo: true, + financeiro: true, + bancario: true, + }); - function getLabelFromOptions( - value: string | undefined, - options: Array<{ value: string; label: string }> - ): string { - if (!value) return '-'; - return options.find((opt) => opt.value === value)?.label || value; - } + const REGIME_LABELS: Record = { + clt: "CLT", + estatutario_municipal: "Estatutário Municipal", + estatutario_pe: "Estatutário PE", + estatutario_federal: "Estatutário Federal", + }; - function selectAll() { - Object.keys(sections).forEach((key) => { - sections[key as keyof typeof sections] = true; - }); - } + function getLabelFromOptions(value: string | undefined, options: Array<{value: string, label: string}>): string { + if (!value) return "-"; + return options.find(opt => opt.value === value)?.label || value; + } + + function getRegimeLabel(value?: string) { + if (!value) return "-"; + return REGIME_LABELS[value] ?? value; + } + + function selectAll() { + Object.keys(sections).forEach(key => { + sections[key as keyof typeof sections] = true; + }); + } function deselectAll() { Object.keys(sections).forEach((key) => { @@ -144,8 +154,26 @@ styles: { fontSize: 9 } }); - yPosition = (doc as any).lastAutoTable.finalY + 10; - } + // Documentos + if (sections.documentos) { + const documentosData: any[] = []; + + if (funcionario.carteiraProfissionalNumero) { + documentosData.push(['Cart. Profissional', `Nº ${funcionario.carteiraProfissionalNumero}${funcionario.carteiraProfissionalSerie ? ' - Série: ' + funcionario.carteiraProfissionalSerie : ''}`]); + } + if (funcionario.carteiraProfissionalDataEmissao) { + documentosData.push(['Emissão Cart. Profissional', funcionario.carteiraProfissionalDataEmissao]); + } + if (funcionario.reservistaNumero) { + documentosData.push(['Reservista', `Nº ${funcionario.reservistaNumero}${funcionario.reservistaSerie ? ' - Série: ' + funcionario.reservistaSerie : ''}`]); + } + if (funcionario.tituloEleitorNumero) { + let titulo = `Nº ${funcionario.tituloEleitorNumero}`; + if (funcionario.tituloEleitorZona) titulo += ` - Zona: ${funcionario.tituloEleitorZona}`; + if (funcionario.tituloEleitorSecao) titulo += ` - Seção: ${funcionario.tituloEleitorSecao}`; + documentosData.push(['Título Eleitor', titulo]); + } + if (funcionario.pisNumero) documentosData.push(['PIS/PASEP', funcionario.pisNumero]); // Filiação if (sections.filiacao && (funcionario.nomePai || funcionario.nomeMae)) { @@ -266,14 +294,22 @@ yPosition = (doc as any).lastAutoTable.finalY + 10; } - // Endereço - if (sections.endereco) { - const enderecoData: any[] = [ - ['Endereço', funcionario.endereco], - ['Cidade', funcionario.cidade], - ['UF', funcionario.uf], - ['CEP', maskCEP(funcionario.cep)] - ]; + const simboloInfo = funcionario.simbolo ?? funcionario.simboloDetalhes ?? funcionario.simboloDados; + if (simboloInfo) { + cargoData.push(['Símbolo', simboloInfo.nome]); + if (simboloInfo.descricao) cargoData.push(['Descrição do Símbolo', simboloInfo.descricao]); + } + if (funcionario.descricaoCargo) cargoData.push(['Descrição', funcionario.descricaoCargo]); + if (funcionario.regimeTrabalho) cargoData.push(['Regime do Funcionário', getRegimeLabel(funcionario.regimeTrabalho)]); + if (funcionario.admissaoData) cargoData.push(['Data Admissão', funcionario.admissaoData]); + if (funcionario.nomeacaoPortaria) cargoData.push(['Portaria', funcionario.nomeacaoPortaria]); + if (funcionario.nomeacaoData) cargoData.push(['Data Nomeação', funcionario.nomeacaoData]); + if (funcionario.nomeacaoDOE) cargoData.push(['DOE', funcionario.nomeacaoDOE]); + cargoData.push(['Pertence Órgão Público', funcionario.pertenceOrgaoPublico ? 'Sim' : 'Não']); + if (funcionario.pertenceOrgaoPublico && funcionario.orgaoOrigem) cargoData.push(['Órgão Origem', funcionario.orgaoOrigem]); + if (funcionario.aposentado && funcionario.aposentado !== 'nao') { + cargoData.push(['Aposentado', getLabelFromOptions(funcionario.aposentado, APOSENTADO_OPTIONS)]); + } autoTable(doc, { startY: yPosition, @@ -287,12 +323,42 @@ yPosition = (doc as any).lastAutoTable.finalY + 10; } - // Contato - if (sections.contato) { - const contatoData: any[] = [ - ['E-mail', funcionario.email], - ['Telefone', maskPhone(funcionario.telefone)] - ]; + // Dados Financeiros + if (sections.financeiro && funcionario.simbolo) { + const simbolo = funcionario.simbolo; + const financeiroData: any[] = [ + ['Símbolo', simbolo.nome], + ['Tipo', simbolo.tipo === 'cargo_comissionado' ? 'Cargo Comissionado' : 'Função Gratificada'], + ['Remuneração Total', `R$ ${simbolo.valor}`], + ]; + + if (funcionario.simboloTipo === 'cargo_comissionado') { + if (simbolo.vencValor) { + financeiroData.push(['Vencimento', `R$ ${simbolo.vencValor}`]); + } + if (simbolo.repValor) { + financeiroData.push(['Representação', `R$ ${simbolo.repValor}`]); + } + } + + autoTable(doc, { + startY: yPosition, + head: [['DADOS FINANCEIROS', '']], + body: financeiroData, + theme: 'grid', + headStyles: { fillColor: [41, 128, 185], fontStyle: 'bold' }, + styles: { fontSize: 9 }, + }); + + yPosition = (doc as any).lastAutoTable.finalY + 10; + } + + // Dados Bancários + if (sections.bancario && funcionario.contaBradescoNumero) { + const bancarioData: any[] = [ + ['Conta', `${funcionario.contaBradescoNumero}${funcionario.contaBradescoDV ? '-' + funcionario.contaBradescoDV : ''}`], + ]; + if (funcionario.contaBradescoAgencia) bancarioData.push(['Agência', funcionario.contaBradescoAgencia]); autoTable(doc, { startY: yPosition, @@ -488,11 +554,16 @@ Cargo e Vínculo - - + + + +