Documentação como desenvolver um relatório PDF

Para desenvolver um relatório PDF, é necessário criar um template. Para isso, acesse a pasta `src` e execute o seguinte comando:

python3 gen_report_template `name_report`

Substituia `name_report` pelo nome do seu relatório.

Esse comando vai gerar 2 arquivos. Um arquivo dentro de `src/templates/views` com o nome name_report.hbs e outro arquivo dentro de `src/templates/mocks` com arquivo name_report.json

Essa estrutura é uma estrutura inicial e deve ser modificada de acordo com a necessidade do relatório

O mock será utilizado para teste, durante a fase inicial, onde o desenvolvedor precisa ajustar layout do relatório e também testar a exibição dos dados no PDF. O mesmo também deve ser editado de acordo com a necessidade do relatório. Para testar o relatório deve acessar a rotina de teste de PDF, pelo menu lateral ou clicando aqui: TestePDF

Para a criação do template .hbs deve ser utilizado a estrutura do jinja2 que pode ser acessado em: https://jinja.palletsprojects.com/en/3.1.x/templates/#variables

Para estilização, existem duas formas de estilizar, usando Tailwind ou css puro.

Caso seja necessário criar estilizações customizadas, criar um arquivo dentro de `src/static/custom` com o mesmo nome do relatório

Para que o tailwind faça o build do CSS, estando na pasta `root`do projeto deve ser necessário rodar o mesmo em modo de desenvolvimento utilizando o comando:

yarn dev

ou

npm run dev

Esse comando vai fazer com que o tailwind interprete todas as classes utilizadas nos relatórios e irá gerar o css final automaticamente

É possível criar "helpers" ou como chamamos aqui de `templatetags` ou `filters`, que são funções que podem ser utilizadas no template .hbs

A função deve ser criada dentro do arquivo `custom_filters` que fica dentro de `src/pdf/templatetags`

Um exemplo de função é a função que formata CNPJ

@register.filter(name='cnpjMask')
def cnpj_mask(cnpj):
    if len(cnpj) == 14:
        return f"{cnpj[:2]}.{cnpj[2:5]}.{cnpj[5:8]}/{cnpj[8:12]}-{cnpj[12:]}"
    else:
        return cnpj
          

Exemplo do seu uso no template:

{{ data.branch.cnpj|cnpjMask }}