bmc_hub/search_all_ar2.py

77 lines
3.4 KiB
Python
Raw Normal View History

"""Search ALL e-conomic invoices for Hosting - AR2"""
import asyncio
import sys
import os
import aiohttp
# Add app to path
sys.path.insert(0, '/Users/christianthomas/DEV/bmc_hub_dev')
from app.core.config import settings
async def main():
headers = {
"X-AppSecretToken": settings.ECONOMIC_APP_SECRET_TOKEN,
"X-AgreementGrantToken": settings.ECONOMIC_AGREEMENT_GRANT_TOKEN,
"Content-Type": "application/json"
}
endpoints = [
"https://restapi.e-conomic.com/invoices/drafts",
"https://restapi.e-conomic.com/invoices/sent",
"https://restapi.e-conomic.com/invoices/booked",
"https://restapi.e-conomic.com/invoices/paid",
"https://restapi.e-conomic.com/invoices/unpaid"
]
customers_with_ar2 = set()
async with aiohttp.ClientSession() as session:
for endpoint in endpoints:
print(f"\nChecking {endpoint.split('/')[-1]}...")
try:
async with session.get(endpoint, headers=headers) as resp:
if resp.status == 200:
data = await resp.json()
invoices = data.get('collection', [])
print(f" Found {len(invoices)} invoices")
for inv in invoices:
# Fetch full invoice with lines
self_link = inv.get('self')
if not self_link:
continue
async with session.get(self_link, headers=headers) as inv_resp:
if inv_resp.status == 200:
full_inv = await inv_resp.json()
lines = full_inv.get('lines', [])
for line in lines:
product_name = line.get('product', {}).get('name') or line.get('description', '')
if 'AR2' in product_name.upper() or 'HOSTING' in product_name.upper() or 'ABONNEMENT' in product_name.upper() or 'PERIODE' in product_name.upper():
customer_num = full_inv.get('customer', {}).get('customerNumber')
inv_num = full_inv.get('bookedInvoiceNumber') or full_inv.get('draftInvoiceNumber')
inv_date = full_inv.get('date')
period = line.get('period', {})
customers_with_ar2.add(customer_num)
print(f" ✅ Customer {customer_num} | Invoice {inv_num} | {inv_date} | {product_name[:60]}")
if period:
print(f" Period: {period}")
except Exception as e:
print(f" ❌ Error: {e}")
print(f"\n{'='*60}")
print(f"📊 SUMMARY: Found {len(customers_with_ar2)} customers with Hosting - AR2")
print(f" Customer numbers: {sorted(customers_with_ar2)}")
print('='*60)
if __name__ == "__main__":
asyncio.run(main())