WFDASHDRIVER-APP/import_suppliers.py
SJCoetz 0d3272da46 Refactor collections to order items
Convert the app from using legacy Collection models to OrderItem-based data. Updated pages (app/page and app/map/page) and all related components (CollectionMap, CollectionItemCard, CollectModal, ProblemModal, LocationTracker) to use OrderItem and new field names (supplier, order, item_status, qty_collected/collected_date, problem_flag/notes, etc.). PocketBase client now queries/updates the order_items collection and maps status/field changes accordingly. Simplified location tracking logic and cleaned up map/navigation UI and Suspense fallbacks. Added import_suppliers.py script for migrating suppliers from NocoDB and included .DS_Store artifacts.
2026-05-25 00:47:47 +02:00

77 lines
2.9 KiB
Python

#!/usr/bin/env python3
"""Import suppliers from NocoDB into PocketBase"""
import requests, json, time, sys
PB_URL = "https://pocketbase-gnqc88suy8fqk6wyryjjdpvl.169.239.180.130.sslip.io"
NOCODB_API = "https://nocodb.apphub.co.za/api/v3/data/putj028icfsplze/md9msyn5qco5ttu/records"
TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb2xsZWN0aW9uSWQiOiJfcGJfdXNlcnNfYXV0aF8iLCJleHAiOjE3ODAyNjMwODcsImlkIjoiazA0NXlmZXplOTJja3g5IiwicmVmcmVzaGFibGUiOnRydWUsInR5cGUiOiJhdXRoIn0.4tUpls9uCAgcvwTvbWBrcl8_NLxgS__oaWZNRAEGsDo"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
# Get existing supplier names
try:
existing = requests.get(f"{PB_URL}/api/collections/suppliers/records?perPage=500", headers=HEADERS).json()
existing_names = {r.get("suppliername", "").strip() for r in existing.get("items", []) if r.get("suppliername")}
except:
existing_names = set()
print(f"Existing suppliers in PocketBase: {len(existing_names)}")
created = 0
skipped = 0
# Use NocoDB MCP-style approach - manually construct records from known data
# We'll fetch via direct API with the auth header
page = 1
while True:
try:
resp = requests.get(
f"{NOCODB_API}?pageSize=100&page={page}&fields=suppliername,email,suppliernumber,supplieraddress,coordinates,closingtime,supply_tags",
headers={"xc-token": "PUT_TOKEN_HERE"} # NocoDB needs its own token
)
if resp.status_code != 200:
print(f"Page {page}: HTTP {resp.status_code} — stopping")
break
data = resp.json()
records = data.get("records", [])
if not records:
break
for r in records:
f = r["fields"]
name = (f.get("suppliername") or "").strip()
if not name or name in existing_names:
skipped += 1
continue
payload = {"suppliername": name}
for k in ["supplieraddress", "coordinates", "email", "suppliernumber", "closingtime", "supply_tags"]:
v = f.get(k)
if v and str(v).strip():
payload[k] = str(v).strip()
if len(payload) <= 1:
skipped += 1
continue
create = requests.post(f"{PB_URL}/api/collections/suppliers/records", headers=HEADERS, json=payload)
if create.status_code == 200:
created += 1
existing_names.add(name)
else:
skipped += 1
time.sleep(0.05)
print(f"Page {page}: processed {len(records)} records ({created} created, {skipped} skipped so far)")
page += 1
if not data.get("next"):
break
except Exception as e:
print(f"Error: {e}")
break
print(f"\nDone! Created: {created}, Skipped (existing/no data): {skipped}")