""" Labels Module Routes Handles label printing pages and API endpoints """ from flask import Blueprint, render_template, session, redirect, url_for, jsonify, request import logging from .print_module import ( get_unprinted_orders_data, get_printed_orders_data, update_order_printed_status, search_orders_by_cp_code ) logger = logging.getLogger(__name__) labels_bp = Blueprint('labels', __name__, url_prefix='/labels') @labels_bp.route('/', methods=['GET']) def labels_index(): """Labels module home page""" if 'user_id' not in session: return redirect(url_for('main.login')) return render_template('modules/labels/index.html') @labels_bp.route('/print-module', methods=['GET']) def print_module(): """Label printing interface with thermal printer support""" if 'user_id' not in session: return redirect(url_for('main.login')) return render_template('modules/labels/print_module.html') @labels_bp.route('/print-lost-labels', methods=['GET']) def print_lost_labels(): """Print lost/missing labels interface""" if 'user_id' not in session: return redirect(url_for('main.login')) return render_template('modules/labels/print_lost_labels.html') # ============================================================================ # API Endpoints for Labels Module # ============================================================================ @labels_bp.route('/api/unprinted-orders', methods=['GET'], endpoint='api_unprinted_orders') def api_unprinted_orders(): """Get all unprinted orders for label printing""" if 'user_id' not in session: return jsonify({'success': False, 'error': 'Unauthorized'}), 401 try: limit = request.args.get('limit', 100, type=int) if limit > 500: limit = 500 if limit < 1: limit = 1 orders = get_unprinted_orders_data(limit) return jsonify({'success': True, 'orders': orders, 'count': len(orders)}), 200 except Exception as e: logger.error(f"Error getting unprinted orders: {e}") return jsonify({'success': False, 'error': str(e)}), 500 @labels_bp.route('/api/printed-orders', methods=['GET'], endpoint='api_printed_orders') def api_printed_orders(): """Get all printed orders""" if 'user_id' not in session: return jsonify({'success': False, 'error': 'Unauthorized'}), 401 try: limit = request.args.get('limit', 100, type=int) if limit > 500: limit = 500 if limit < 1: limit = 1 orders = get_printed_orders_data(limit) return jsonify({'success': True, 'orders': orders, 'count': len(orders)}), 200 except Exception as e: logger.error(f"Error getting printed orders: {e}") return jsonify({'success': False, 'error': str(e)}), 500 @labels_bp.route('/api/search-orders', methods=['POST'], endpoint='api_search_orders') def api_search_orders(): """Search for orders by CP code""" if 'user_id' not in session: return jsonify({'success': False, 'error': 'Unauthorized'}), 401 try: data = request.get_json() cp_code = data.get('cp_code', '').strip() if not cp_code or len(cp_code) < 1: return jsonify({'success': False, 'error': 'CP code is required'}), 400 results = search_orders_by_cp_code(cp_code) return jsonify({'success': True, 'orders': results, 'count': len(results)}), 200 except Exception as e: logger.error(f"Error searching orders: {e}") return jsonify({'success': False, 'error': str(e)}), 500 @labels_bp.route('/api/update-printed-status/', methods=['POST'], endpoint='api_update_printed_status') def api_update_printed_status(order_id): """Mark an order as printed""" if 'user_id' not in session: return jsonify({'success': False, 'error': 'Unauthorized'}), 401 try: data = request.get_json() or {} printed = data.get('printed', True) success = update_order_printed_status(order_id, printed) if success: return jsonify({'success': True, 'message': 'Order status updated'}), 200 else: return jsonify({'success': False, 'error': 'Failed to update order'}), 500 except Exception as e: logger.error(f"Error updating order status: {e}") return jsonify({'success': False, 'error': str(e)}), 500