- Add GET/PUT /pos/api/config/modules endpoints in POS config_bp.py - Update sidebar.js to filter nav items based on enabled modules - Add Modules section to POS config.html with toggles for WhatsApp, Marketplace, MercadoLibre - Add module load/save logic to POS config.js - Preload modules in app-init.js for sidebar caching - Add tenant module management to Instance Manager - get_tenant_modules / update_tenant_modules in tenant_service.py - GET/PUT /api/tenants/<id>/modules endpoints in tenants_bp.py - Add modules modal to manager index.html - Add module editing UI and logic to manager.js - Add toggle-switch CSS to manager.css
82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
"""Tenant management blueprint."""
|
|
from flask import Blueprint, request, jsonify
|
|
from blueprints.auth_bp import require_manager_auth
|
|
from services import tenant_service
|
|
|
|
tenants_bp = Blueprint("tenants", __name__, url_prefix="/api/tenants")
|
|
|
|
|
|
@tenants_bp.route("", methods=["GET"])
|
|
@require_manager_auth
|
|
def list_tenants():
|
|
include_stats = request.args.get("stats", "false").lower() == "true"
|
|
return jsonify({"data": tenant_service.list_tenants(include_stats=include_stats)})
|
|
|
|
|
|
@tenants_bp.route("/<int:tenant_id>", methods=["GET"])
|
|
@require_manager_auth
|
|
def get_tenant(tenant_id):
|
|
tenant = tenant_service.get_tenant(tenant_id)
|
|
if not tenant:
|
|
return jsonify({"error": "Tenant not found"}), 404
|
|
return jsonify({"data": tenant})
|
|
|
|
|
|
@tenants_bp.route("/<int:tenant_id>/stats", methods=["GET"])
|
|
@require_manager_auth
|
|
def get_tenant_stats(tenant_id):
|
|
tenant = tenant_service.get_tenant(tenant_id)
|
|
if not tenant:
|
|
return jsonify({"error": "Tenant not found"}), 404
|
|
return jsonify({"data": tenant_service._get_tenant_quick_stats(tenant["db_name"])})
|
|
|
|
|
|
@tenants_bp.route("/<int:tenant_id>/toggle", methods=["POST"])
|
|
@require_manager_auth
|
|
def toggle_tenant(tenant_id):
|
|
data = request.get_json() or {}
|
|
active = data.get("active", True)
|
|
result = tenant_service.toggle_tenant(tenant_id, active)
|
|
return jsonify(result)
|
|
|
|
|
|
@tenants_bp.route("/<int:tenant_id>/reset", methods=["POST"])
|
|
@require_manager_auth
|
|
def reset_tenant(tenant_id):
|
|
try:
|
|
result = tenant_service.reset_tenant(tenant_id)
|
|
return jsonify(result)
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@tenants_bp.route("/<int:tenant_id>", methods=["DELETE"])
|
|
@require_manager_auth
|
|
def delete_tenant(tenant_id):
|
|
try:
|
|
result = tenant_service.delete_tenant(tenant_id)
|
|
return jsonify(result)
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@tenants_bp.route("/<int:tenant_id>/modules", methods=["GET"])
|
|
@require_manager_auth
|
|
def get_tenant_modules(tenant_id):
|
|
try:
|
|
result = tenant_service.get_tenant_modules(tenant_id)
|
|
return jsonify({"data": result})
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
|
|
@tenants_bp.route("/<int:tenant_id>/modules", methods=["PUT"])
|
|
@require_manager_auth
|
|
def update_tenant_modules(tenant_id):
|
|
data = request.get_json() or {}
|
|
try:
|
|
result = tenant_service.update_tenant_modules(tenant_id, data)
|
|
return jsonify(result)
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|