diff --git a/backend/app/main.py b/backend/app/main.py index c94b058..922c454 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -207,7 +207,7 @@ def send_completed_inspection_to_n8n(inspection, db): # No lanzamos excepción para no interrumpir el flujo normal -BACKEND_VERSION = "1.0.87" +BACKEND_VERSION = "1.0.88" app = FastAPI(title="Checklist Inteligente API", version=BACKEND_VERSION) # S3/MinIO configuration @@ -964,12 +964,8 @@ def create_question( db_question = models.Question(**question.dict()) db.add(db_question) - # Actualizar max_score del checklist - checklist = db.query(models.Checklist).filter( - models.Checklist.id == question.checklist_id - ).first() - if checklist: - checklist.max_score += question.points + # Recalcular max_score del checklist (más robusto que sumar) + recalculate_checklist_max_score(question.checklist_id, db) db.commit() db.refresh(db_question) @@ -989,6 +985,22 @@ def create_question( return db_question +# Helper function para recalcular max_score de un checklist +def recalculate_checklist_max_score(checklist_id: int, db: Session): + """Recalcula el max_score sumando los puntos de todas las preguntas NO eliminadas""" + total_score = db.query(func.sum(models.Question.points)).filter( + models.Question.checklist_id == checklist_id, + models.Question.is_deleted == False + ).scalar() or 0 + + checklist = db.query(models.Checklist).filter(models.Checklist.id == checklist_id).first() + if checklist: + checklist.max_score = total_score + print(f"✅ Checklist #{checklist_id} max_score recalculado: {total_score}") + + return total_score + + @app.put("/api/questions/{question_id}", response_model=schemas.Question) def update_question( question_id: int, @@ -1021,6 +1033,10 @@ def update_question( }) setattr(db_question, key, value) + # Si cambiaron los puntos, recalcular max_score del checklist + if any(change['field'] == 'points' for change in changes): + recalculate_checklist_max_score(db_question.checklist_id, db) + db.commit() db.refresh(db_question) @@ -1144,6 +1160,9 @@ def delete_question( ) db.add(sub_audit_log) + # Recalcular max_score del checklist después de eliminar + recalculate_checklist_max_score(db_question.checklist_id, db) + db.commit() message = "Pregunta eliminada exitosamente"