Metadata-Version: 2.4
Name: forge-mvc-workflow
Version: 1.0.0b8
Summary: Forge workflow — statuts et transitions applicatives.
Author: Roger Cauchon
License-Expression: LicenseRef-Forge-Proprietary
Project-URL: Homepage, https://github.com/caucrogeGit/Forge
Project-URL: Repository, https://github.com/caucrogeGit/Forge
Project-URL: Documentation, https://caucrogegit.github.io/Forge/
Keywords: python,mvc,forge,workflow,statuts
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: forge-mvc<2,>=1.0.0b5
Requires-Dist: markupsafe>=2.0

# forge-mvc-workflow

Module workflow pour Forge — statuts et transitions applicatives.

Extrait du core Forge depuis la version 2.6.0 (ADR-004).

## Installation

```bash
pip install forge-mvc-workflow
# ou en mode developpement
pip install -e packages/forge-mvc-workflow/
```

## Usage

```python
from forge_mvc_workflow import (
    WorkflowStatus,
    WorkflowTransition,
    make_status,
    make_transition,
    validate_statuses,
    validate_transitions,
    can_transition,
    get_available_transitions,
    make_workflow_jinja_helpers,
)

# Definir des statuts
statuses = validate_statuses([
    make_status("brouillon", label="Brouillon", color="gray"),
    make_status("confirme", label="Confirme", color="green"),
    make_status("annule", label="Annule", color="red"),
])

# Definir des transitions autorisees
transitions = validate_transitions([
    make_transition("brouillon", "confirme"),
    make_transition("brouillon", "annule"),
    make_transition("confirme", "annule"),
], statuses=statuses)

# Verifier une transition
if can_transition(transitions, "brouillon", "confirme"):
    ...

# Obtenir les transitions disponibles depuis un statut
available = get_available_transitions(transitions, "brouillon")
```

## Helpers Jinja2

```python
env.globals.update(make_workflow_jinja_helpers())
```

Dans un template :

```jinja2
{{ workflow_status_badge(reservation.status) }}
{{ workflow_status_label(reservation.status) }}
```

## Cas d'usage

- Statut d'une reservation (brouillon → confirmee → terminee → annulee)
- Statut d'un document (redaction → validation → publie)
- Statut d'une commande (panier → payee → expediee → livree)

## API publique

- `WorkflowStatus` — dataclass statut (name, label, color)
- `WorkflowTransition` — dataclass transition (from_status, to_status)
- `make_status(name, label, color)` — constructeur valide
- `make_transition(from_status, to_status)` — constructeur valide
- `validate_statuses(list)` — valide une liste de statuts
- `validate_transitions(list, statuses)` — valide les transitions par rapport aux statuts
- `can_transition(transitions, from_name, to_name)` — teste une transition
- `get_available_transitions(transitions, from_name)` — liste les transitions disponibles
- `make_workflow_jinja_helpers()` — dict de helpers Jinja2
