- Added a new VTigerService class for handling API interactions with vTiger CRM. - Implemented methods to fetch customer subscriptions and sales orders. - Created a new database migration for BMC Office subscriptions, including table structure and view for totals. - Enhanced customer detail frontend to display subscriptions and sales orders with improved UI/UX. - Added JavaScript functions for loading and displaying subscription data dynamically. - Created tests for vTiger API queries and field inspections to ensure data integrity and functionality.
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
"""
|
|
Detailed vTiger field inspection for SalesOrder
|
|
"""
|
|
import asyncio
|
|
import sys
|
|
import json
|
|
sys.path.insert(0, '/app')
|
|
|
|
from app.services.vtiger_service import get_vtiger_service
|
|
|
|
async def inspect_fields():
|
|
vtiger = get_vtiger_service()
|
|
|
|
print("="*60)
|
|
print("Inspecting SalesOrder for Arbodania (3x760)")
|
|
print("="*60)
|
|
|
|
query = "SELECT * FROM SalesOrder WHERE account_id='3x760';"
|
|
results = await vtiger.query(query)
|
|
|
|
if results:
|
|
print(f"\n✅ Found {len(results)} sales orders\n")
|
|
for i, order in enumerate(results, 1):
|
|
print(f"\n{'='*60}")
|
|
print(f"Sales Order #{i}")
|
|
print(f"{'='*60}")
|
|
for key, value in sorted(order.items()):
|
|
if value and str(value).strip(): # Only show non-empty values
|
|
print(f"{key:30s} = {value}")
|
|
|
|
print("\n" + "="*60)
|
|
print("Inspecting ALL SalesOrders (first 5)")
|
|
print("="*60)
|
|
|
|
query2 = "SELECT * FROM SalesOrder LIMIT 5;"
|
|
all_orders = await vtiger.query(query2)
|
|
|
|
if all_orders:
|
|
print(f"\n✅ Found {len(all_orders)} sales orders total\n")
|
|
|
|
# Collect all unique field names
|
|
all_fields = set()
|
|
for order in all_orders:
|
|
all_fields.update(order.keys())
|
|
|
|
print(f"Total unique fields: {len(all_fields)}")
|
|
print("\nField names related to frequency/recurring:")
|
|
freq_fields = [f for f in sorted(all_fields) if any(x in f.lower() for x in ['freq', 'recur', 'billing', 'period', 'subscr'])]
|
|
if freq_fields:
|
|
for f in freq_fields:
|
|
print(f" - {f}")
|
|
else:
|
|
print(" ⚠️ No frequency-related fields found")
|
|
|
|
print("\nAll field names:")
|
|
for f in sorted(all_fields):
|
|
print(f" - {f}")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(inspect_fields())
|