diff --git a/app_new/cleaning/routes.py b/app_new/cleaning/routes.py index 93b8803..5bb8c24 100644 --- a/app_new/cleaning/routes.py +++ b/app_new/cleaning/routes.py @@ -12,6 +12,7 @@ from ..core.models import ( StockLocation, StockLot, StockLotBalance, StockMovement, Staff, RequestProfile, StockInventory, StockInventoryLine, Equipment, MaterialAssignment, + ProductDocument, ) from .services.stock import StockError, receive_stock, issue_stock, transfer_stock, transvasement, dilute from .services.forecast import forecast_product @@ -84,6 +85,22 @@ def product_edit(id): def references(): return render_template("cleaning/references.html", references=CommercialProduct.query.order_by(CommercialProduct.commercial_name).all(), products=ProductGeneric.query.order_by(ProductGeneric.name).all()) + +@cleaning_bp.route("/documents") +@login_required +def documents(): + return render_template("cleaning/documents.html", documents=ProductDocument.query.order_by(ProductDocument.uploaded_at.desc()).all()) + + +@cleaning_bp.route("/labels/") +@login_required +def label(movement_id): + movement = StockMovement.query.get_or_404(movement_id) + if not movement.lot or not movement.commercial_product: + flash("Impossible de générer une étiquette : lot ou référence commerciale manquant.", "danger") + return redirect(url_for("cleaning.movements")) + return render_template("cleaning/label.html", movement=movement) + @cleaning_bp.route("/references/new", methods=["GET", "POST"]) @login_required def reference_new(): diff --git a/app_new/cleaning/templates/cleaning/documents.html b/app_new/cleaning/templates/cleaning/documents.html new file mode 100644 index 0000000..32c56ab --- /dev/null +++ b/app_new/cleaning/templates/cleaning/documents.html @@ -0,0 +1 @@ +{% extends "base.html" %}{% block title %}FDS et fiches techniques{% endblock %}{% block content %}

Documents produits

Les documents sont conservés par version ; les mentions CLP sont saisies depuis les documents officiels.

{% for d in documents %}{% else %}{% endfor %}
RéférenceTypeTitreVersionDate
{{ d.commercial_product.commercial_name }}{{ d.document_type|upper }}{{ d.title }}{{ d.version or '—' }}{{ d.published_at or '—' }}
Aucun document.
{% endblock %} diff --git a/app_new/cleaning/templates/cleaning/label.html b/app_new/cleaning/templates/cleaning/label.html new file mode 100644 index 0000000..55f9b7d --- /dev/null +++ b/app_new/cleaning/templates/cleaning/label.html @@ -0,0 +1 @@ +{% extends "base.html" %}{% block title %}Étiquette{% endblock %}{% block content %}

{{ movement.generic_product.name }}

{{ movement.commercial_product.commercial_name }}

Préparé le : {{ movement.created_at|datetime_fmt }}
Lot source : {{ movement.lot.lot_number }}
Quantité : {{ (-movement.quantity_reference) }} {{ movement.generic_product.reference_unit }}

{% if movement.commercial_product.pictograms %}

Pictogrammes configurés : {{ movement.commercial_product.pictograms }}

{% endif %}{% if movement.commercial_product.warning_statement %}

{{ movement.commercial_product.warning_statement }}

{% endif %}

{{ movement.commercial_product.required_ppe or 'EPI non renseignés — compléter depuis la FDS officielle.' }}

{% endblock %} diff --git a/app_new/templates/base.html b/app_new/templates/base.html index 86601af..a04e673 100644 --- a/app_new/templates/base.html +++ b/app_new/templates/base.html @@ -225,6 +225,7 @@
  • Matériel & Entretien
  • Produits génériques
  • Références / conditionnements
  • +
  • FDS / fiches techniques
  • État du stock
  • Réceptions
  • Sorties agents