52 lines
2.6 KiB
Python
52 lines
2.6 KiB
Python
"""Service métier unique pour créer des équipements.
|
|
|
|
Les formulaires historiques (fiche avancée et wizard) délèguent ici la
|
|
construction de l'objet. Le lot reste facultatif : un inventaire incomplet est
|
|
valide et pourra être complété plus tard.
|
|
"""
|
|
from datetime import date
|
|
|
|
from ...extensions import db
|
|
from ..models.equipment import Equipment
|
|
|
|
|
|
def create_equipment(*, name, category_id=None, lot_id=None, room_id=None,
|
|
quantity=1, is_group=False, parent_id=None, room_profile_item_id=None,
|
|
tracked_individually=False, mobility="non_precise",
|
|
status="en_service", code=None, description=None,
|
|
management_mode=None, serial_number=None,
|
|
manufacturer=None, model_reference=None,
|
|
supplier_id=None, supplier_reference=None,
|
|
purchase_price=None, purchase_date=None,
|
|
recurrence_monitoring=False, position=None,
|
|
individual_number=None, create_schedule=True):
|
|
"""Construit, ajoute et flush un équipement sans recherche par nom.
|
|
|
|
Retourne l'instance persistable et son identifiant est disponible dès le
|
|
retour. La génération préventive est déclenchée uniquement si un lot est
|
|
effectivement renseigné.
|
|
"""
|
|
name = (name or "").strip()
|
|
if not name:
|
|
raise ValueError("Le nom de l'équipement est obligatoire.")
|
|
quantity = int(quantity or 1)
|
|
if quantity < 1:
|
|
raise ValueError("La quantité doit être positive.")
|
|
equipment = Equipment(
|
|
name=name, category_id=category_id or None, lot_id=lot_id or None,
|
|
room_id=room_id or None, quantity=quantity, is_group=bool(is_group),
|
|
parent_id=parent_id or None, room_profile_item_id=room_profile_item_id or None,
|
|
tracked_individually=bool(tracked_individually), mobility=mobility or "non_precise",
|
|
status=status or "en_service", code=code or None,
|
|
description=description or None, management_mode=management_mode or None,
|
|
serial_number=serial_number or None, manufacturer=manufacturer or None,
|
|
model_reference=model_reference or None, supplier_id=supplier_id or None,
|
|
supplier_reference=supplier_reference or None, purchase_price=purchase_price or None,
|
|
purchase_date=purchase_date, recurrence_monitoring=bool(recurrence_monitoring),
|
|
position=position or None, individual_number=individual_number,
|
|
)
|
|
db.session.add(equipment)
|
|
db.session.flush()
|
|
if create_schedule and equipment.lot_id:
|
|
equipment.create_scheduled_tasks_from_lot(commit=False)
|
|
return equipment
|