Metadata-Version: 2.1
Name: docmaker
Version: 0.1.1
Summary: 
Author: renatormc
Author-email: renatomartinsrmc@gmail.com
Requires-Python: >=3.11,<3.12
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Requires-Dist: beautifulsoup4 (>=4.12.2,<5.0.0)
Requires-Dist: bootstrap-flask (>=2.3.2,<3.0.0)
Requires-Dist: docxtpl (>=0.16.7,<0.17.0)
Requires-Dist: flask (>=3.0.0,<4.0.0)
Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
Requires-Dist: pdfminer-six (>=20221105,<20221106)
Requires-Dist: pillow (>=10.1.0,<11.0.0)
Requires-Dist: pydantic (>=2.4.2,<3.0.0)
Requires-Dist: pyside6 (>=6.6.0,<7.0.0)
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
Requires-Dist: pywin32 (>=306,<307) ; sys_platform == "win32"
Requires-Dist: tinydb (>=4.8.0,<5.0.0)
Requires-Dist: tinydb-serialization (>=2.1.1,<3.0.0)
Description-Content-Type: text/markdown

# Docmaker

Docmaker is a framework to create forms to generate docx documents. It uses docxtpl and pyside6 libs.

# Install

You need to have python 3.11 installed and install dockmaker with command below:

```bash
pip install docmaker
```

# Creating models

In order to create a model you have to create a new instance of DocModel defining the templates folder and the widget matrix as example below. You have to point the folder where your templates docx are.

```python
# app.py
from docmaker.gui import widgets as wt
from docmaker.gui.widgets.types import ValidationError
from docmaker.converters import StringListConverter, DateConverter
from docmaker import DocModel
from docmaker import App
from pathlib import Path
import os

SCRIPT_DIR = Path(os.path.dirname(os.path.realpath(__file__)))

def convert_pericia(value: str) -> dict:
    ret = {}
    try:
        parts = value.split("/")
        ret['seq'], ret['rg'], ret['ano'] = int(
            parts[0]), int(parts[1]), int(parts[2])
        return ret
    except:
        raise ValidationError("Valor incorreto")


celular_model = DocModel(
    "Celular", 
    templates_folder=SCRIPT_DIR / "models/celular/templates",
    lists_folder=SCRIPT_DIR / "models/celular/listas",
)

celular_model.widgets = [
    [
        wt.SText("pericia", label="Pericia", placeholder="SEQ/RG/ANO", converter=convert_pericia),
        wt.SText("requisitante", label="Requisitante"),
        wt.SText("procedimento", label="Procedimento", placeholder="RAI ou inquérito"),
        wt.SText("ocorrencia_odin", label="Ocorrência ODIN"),
        wt.SSpinBox("n_objetos", label="N de objetos", required=True, default=1)
    ],
    [
        wt.SText("data_odin", label="Data ODIN", converter=DateConverter()),
        wt.SText("inicio_exame", label="Inicio Exame", converter=DateConverter()),
        wt.SText("data_recimento", label="data de recebimento", converter=DateConverter()),
    ],
    [
        wt.SText("n_quesito", label="Número quesito"),
        wt.SText("autoridade", label="Autoridade"),
    ],
    [
        wt.SText("relatores", label="Relatores", placeholder="Relatores separados por vírgula",
                 required=True, converter=StringListConverter()),
        wt.SText("revisores", label="Revisores", placeholder="Revisores separados por vírgula", converter=StringListConverter()),
    ],
    [
        wt.SText("lacre_entrada", label="Lacre entrada"),
        wt.SText("lacre_saida", label="Lacre saída"),
        wt.SComboBox("n_midias", "Nº Mídias", choices="opcoes_midias")
    ]
]

@celular_model.pre_process()
def pre_process(context):
    context['peritos'] = context['relatores'] + context['revisores']
    return context

app = App()
app.add_docmodel(celular_model)
app.run_gui()  
```


# Run application

```bash
python app.py
```
