import os import requests import json import logging import argparse from dotenv import load_dotenv load_dotenv(override=True) from superoffice_client import SuperOfficeClient from config import settings # Setup Logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger("create-email-test") def create_email_document(person_id_input: int): print(f"πŸš€ Creating Email Document for Person ID {person_id_input}...") client = SuperOfficeClient() if not client.access_token: print("❌ Auth failed. Check .env") return # --- TARGET PERSON --- target_person_id = person_id_input contact_id = None person_id = None print(f"πŸ“‘ Fetching target Person {target_person_id}...") try: person = client._get(f"Person/{target_person_id}") if not person: print(f"❌ Person {target_person_id} not found.") return print(f"βœ… Found Person: {person.get('Firstname')} {person.get('Lastname')}") # Get associated Contact ID contact_id = person.get('Contact', {}).get('ContactId') if not contact_id: print("❌ Person has no associated company (ContactId).") return # Verify Contact contact = client._get(f"Contact/{contact_id}") if contact: print(f"βœ… Associated Company: {contact.get('Name')} (ID: {contact_id})") person_id = target_person_id except Exception as e: print(f"❌ Error fetching Person/Contact: {e}") return if not contact_id or not person_id: print("❌ Could not resolve Contact/Person IDs.") return # 2. Define Email Content subject = "Test E-Mail from Gemini CLI (API)" body = f"""Hallo {person.get('Firstname')}, Dies ist ein Test fΓΌr die Erstellung eines E-Mail-Dokuments direkt ΓΌber die SuperOffice API. Wir nutzen das Template 'Ausg. E-Mail' (ID 157). Viele Grüße, Gemini""" # 3. Create Document Payload # Note: DocumentTemplateId 157 = "Ausg. E-Mail" template_id = 157 payload = { "Name": subject, # Internal Name "Header": subject, # Subject Line # "OurRef": {"AssociateId": my_associate_id}, # Omitted, hoping SO uses API User context "Contact": {"ContactId": contact_id}, "Person": {"PersonId": person_id}, "DocumentTemplate": {"DocumentTemplateId": template_id}, "Content": body } print(f"πŸ“€ Sending POST /Document payload...") try: doc = client._post("Document", payload) if doc: doc_id = doc.get('DocumentId') print(f"βœ… Document Created Successfully!") print(f" ID: {doc_id}") print(f" Name: {doc.get('Name')}") print(f" Template: {doc.get('DocumentTemplate', {}).get('Name')}") # Construct direct link # Format: https://online3.superoffice.com/Cust26720/default.aspx?document_id=334050 env = settings.SO_ENVIRONMENT cust_id = settings.SO_CONTEXT_IDENTIFIER # Note: This is a best-guess link format for SO Online link = f"https://{env}.superoffice.com/{cust_id}/default.aspx?document_id={doc_id}" print(f"πŸ”— Direct Link: {link}") # 4. Create Linked Appointment (Activity) print("πŸ“… Creating Linked Appointment (Email Sent Activity)...") appt_payload = { "Description": body, "Contact": {"ContactId": contact_id}, "Person": {"PersonId": person_id}, "Task": {"Id": 6}, # 6 = Document / Email Out "Document": {"DocumentId": doc_id}, "MainHeader": f"E-Mail: {subject}"[:40] } try: appt = client._post("Appointment", appt_payload) if appt: print(f"βœ… Appointment Created: {appt.get('AppointmentId')}") else: print("⚠️ Failed to create appointment (None response).") except Exception as e: print(f"⚠️ Failed to create appointment: {e}") else: print("❌ Failed to create document (Response was empty/None).") except Exception as e: print(f"❌ Error creating document: {e}") if __name__ == "__main__": parser = argparse.ArgumentParser(description='Create a test email document in SuperOffice.') parser.add_argument('person_id', type=int, help='The SuperOffice Person ID to attach the email to.') args = parser.parse_args() create_email_document(args.person_id)