feat(customers): show vehicles and delete customer
- get_customer now returns fleet_vehicles assigned to the customer. - Added DELETE /pos/api/customers/<id> soft-delete (is_active=false) with customers.delete permission. - Added Vehicles section in customer detail panel. - Added Eliminar button in quick actions (owner/admin/customers.delete).
This commit is contained in:
@@ -165,6 +165,21 @@ def get_customer(customer_id):
|
||||
float(customer['credit_limit']) - float(customer['credit_balance']), 2
|
||||
)
|
||||
|
||||
# Fleet vehicles assigned to this customer
|
||||
cur.execute("""
|
||||
SELECT id, plate, vin, make, model, year, current_mileage, color, owner_name, is_active, created_at
|
||||
FROM fleet_vehicles
|
||||
WHERE customer_id = %s
|
||||
ORDER BY is_active DESC, created_at DESC
|
||||
""", (customer_id,))
|
||||
customer['fleet_vehicles'] = []
|
||||
for r in cur.fetchall():
|
||||
customer['fleet_vehicles'].append({
|
||||
'id': r[0], 'plate': r[1], 'vin': r[2], 'make': r[3], 'model': r[4],
|
||||
'year': r[5], 'current_mileage': r[6], 'color': r[7], 'owner_name': r[8],
|
||||
'is_active': r[9], 'created_at': str(r[10]) if r[10] else None,
|
||||
})
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
return jsonify(customer)
|
||||
@@ -303,6 +318,26 @@ def update_customer(customer_id):
|
||||
return jsonify({'message': 'Customer updated'})
|
||||
|
||||
|
||||
@customers_bp.route('/<int:customer_id>', methods=['DELETE'])
|
||||
@require_auth('customers.delete')
|
||||
def delete_customer(customer_id):
|
||||
"""Soft-delete (deactivate) a customer."""
|
||||
conn = get_tenant_conn(g.tenant_id)
|
||||
cur = conn.cursor()
|
||||
|
||||
cur.execute("SELECT id FROM customers WHERE id = %s", (customer_id,))
|
||||
if not cur.fetchone():
|
||||
cur.close(); conn.close()
|
||||
return jsonify({'error': 'Customer not found'}), 404
|
||||
|
||||
cur.execute("UPDATE customers SET is_active = false WHERE id = %s", (customer_id,))
|
||||
log_action(conn, 'CUSTOMER_DEACTIVATE', 'customer', customer_id)
|
||||
conn.commit()
|
||||
cur.close()
|
||||
conn.close()
|
||||
return jsonify({'message': 'Cliente eliminado'})
|
||||
|
||||
|
||||
@customers_bp.route('/<int:customer_id>/statement', methods=['GET'])
|
||||
@require_auth('customers.view')
|
||||
def customer_statement(customer_id):
|
||||
|
||||
Reference in New Issue
Block a user