Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/outsetapy/api/billing/subscriptions.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from outsetapy.models.billing.plan_family import PlanFamily
from outsetapy.util.store import Store
from outsetapy.models.wrappers.validation_error import ValidationError
from outsetapy.util.request import Request, hasMoreResults
Expand Down Expand Up @@ -67,9 +66,7 @@ async def get(self, uid: str, options: dict = {}) -> Subscription:
json_response = response.json()
return Subscription(json_response, self.store)

async def add(
self, subscription: dict
) -> Subscription:
async def add(self, subscription: dict) -> Subscription:
request = (
Request(self.store, "billing/subscriptions/firsttimesubscription")
.authenticate_as_server()
Expand Down
8 changes: 6 additions & 2 deletions src/outsetapy/api/crm/accounts.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@ def __init__(self, store):
async def get_all(self, options: dict = {}) -> List[Account]:
has_more = True
results = []
fields = "*,PrimaryContact.*,Subscriptions.*,Subscriptions.Plan.*,CurrentSubscription.*,"
while has_more:
request = (
Request(self.store, "crm/accounts")
.authenticate_as_server()
.with_params(
{
"fields": options.get(
"fields", "*,PersonAccount.*,PersonAccount.Person.Uid"
"fields",
f"{fields}CurrentSubscription.Plan.*,PersonAccount.*,PersonAccount.Person.Uid",
)
}
)
Expand All @@ -47,14 +49,16 @@ async def get_all(self, options: dict = {}) -> List[Account]:
return [Account(json_obj, self.store) for json_obj in results]

async def get(self, uid: str, options: dict = {}) -> Account:
fields = "*,PersonAccount.*,BillingAddress.*,MailingAddress.*,PersonAccount.Person.Uid,CurrentSubscription.Uid,"
request = (
Request(self.store, f"crm/accounts/{uid}")
.authenticate_as_server()
.with_params(
{
"fields": options.get(
# "fields", "*,PersonAccount.*,PersonAccount.Person.Uid"
"fields", "*,PersonAccount.*,BillingAddress.*,MailingAddress.*,PersonAccount.Person.Uid,CurrentSubscription.Uid,LatestSubscription.Uid, PrimarySubscription.Uid, PrimaryContact.*"
"fields",
f"{fields}LatestSubscription.Uid, PrimarySubscription.Uid, PrimaryContact.*",
)
}
)
Expand Down
8 changes: 6 additions & 2 deletions src/outsetapy/models/billing/subscription.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ def __init__(self, data: object, store: Store):
if "_objectType" in data and data["_objectType"] == "Subscription":
self.Uid = data["Uid"]
self.BillingRenewalTerm = data["BillingRenewalTerm"]
self.Account_Uid = data["Account"]["Uid"]
self._plan = data["Plan"]["Uid"]
if "Account" in data and data['Account'] is not None and '_objectType' in data["Account"] and data["Account"]["_objectType"] == 'Account':
self.Account_Uid = data["Account"]['Uid']
else:
Expand All @@ -56,8 +58,10 @@ def __init__(self, data: object, store: Store):
self.Updated = data["Updated"]
else:
raise ValueError("Invalid object type")

@property
async def Plan(self):
plan_api = importlib.import_module("outsetapy.api.billing.plans").Plans(self.__store)
plan_api = importlib.import_module("outsetapy.api.billing.plans").Plans(
self.__store
)
return await plan_api.get(self._plan)
180 changes: 83 additions & 97 deletions src/outsetapy/models/crm/account.py
Original file line number Diff line number Diff line change
@@ -1,104 +1,90 @@
from typing import List
from datetime import datetime
import importlib
from outsetapy.util.store import Store
from outsetapy.models.shared.address import Address
from outsetapy.models.billing.subscription import Subscription

# from .deal import Deal

class Account:
def __init__(self, data: object, store: Store):
self.__store = store
self.Name = None
self.ClientIdentifier = None
self.IsDemo = False
self.BillingAddress = Address()
self.MailingAddress = Address()
self.AccountStage = None
self.PaymentInformation = None
self.PersonAccount = []
self.Subscriptions = []
self.Deals = []
self.LastLoginDateTime = None
self.AccountSpecificPageUrl1 = ""
self.AccountSpecificPageUrl2 = ""
self.AccountSpecificPageUrl3 = ""
self.AccountSpecificPageUrl4 = ""
self.AccountSpecificPageUrl5 = ""
self.RewardFulReferralId = None
self.HasLoggedIn = False
self.AccountStageLabel = ""
self.DomainName = None
self.LatestSubscription = None
self.PrimaryContact = None
self.PrimarySubscription = None
self.RecaptchaToken = None
self.LifetimeRevenue = 0
self.Uid = ""
self.Created = datetime.now()
self.Updated = datetime.now()
class Deal:
def __init__(self, deal_id: str, deal_name: str):
self.deal_id = deal_id
self.deal_name = deal_name

# Update the account attributes based on the provided dictionary
if "_objectType" in data and data["_objectType"] == "Account":
self.Name = data["Name"]
self.ClientIdentifier = data["ClientIdentifier"]
self.IsDemo = data["IsDemo"]
self.BillingAddress = data["BillingAddress"]
self.MailingAddress = data["MailingAddress"]
self.AccountStage = data["AccountStage"]
self.PaymentInformation = data["PaymentInformation"]
self.PersonAccount = data["PersonAccount"]
self.Subscriptions = data["Subscriptions"]
self.Deals = data["Deals"]
self.LastLoginDateTime = data["LastLoginDateTime"]
self.AccountSpecificPageUrl1 = data["AccountSpecificPageUrl1"]
self.AccountSpecificPageUrl2 = data["AccountSpecificPageUrl2"]
self.AccountSpecificPageUrl3 = data["AccountSpecificPageUrl3"]
self.AccountSpecificPageUrl4 = data["AccountSpecificPageUrl4"]
self.AccountSpecificPageUrl5 = data["AccountSpecificPageUrl5"]
self.RewardFulReferralId = data["RewardFulReferralId"]
self.HasLoggedIn = data["HasLoggedIn"]
self.AccountStageLabel = data["AccountStageLabel"]
self.DomainName = data["DomainName"]
self.LatestSubscription = data["LatestSubscription"]
if "CurrentSubscription" in data and data["CurrentSubscription"] is not None and "Uid" in data["CurrentSubscription"]:
self._current_subscription = data["CurrentSubscription"]["Uid"]
else:
self._current_subscription = data["CurrentSubscription"]
class PersonAccount:
def __init__(self, person_id: str, person_name: str):
self.person_id = person_id
self.person_name = person_name

# if "CurrentSubscription" in data and '_objectType' in data["CurrentSubscription"] and data["Account"]["_objectType"] == 'Subscription':
# self.CurrentSubscription = Subscription(data["CurrentSubscription"], self.__store)
# else:
# self.CurrentSubscription = data["CurrentSubscription"]
self.PrimaryContact = data["PrimaryContact"]
self.PrimarySubscription = data["PrimarySubscription"]
self.RecaptchaToken = data["RecaptchaToken"]
self.LifetimeRevenue = data["LifetimeRevenue"]
self.Uid = data["Uid"]
self.Created = data["Created"]
self.Updated = data["Updated"]
elif "_objectType" in data:
raise Exception(f"Invalid object type: {data['_objectType']}")
class AccountStage:
def __init__(self, stage_id: str, stage_name: str):
self.stage_id = stage_id
self.stage_name = stage_name

# @property
# async def CurrentSubscription(self):
# subscription_api = importlib.import_module("outsetapy.api.billing.subscriptions").Subscriptions(self.__store)
# CurrentSubscription = await subscription_api.get(self._current_subscription)
# return CurrentSubscription
@property
def CurrentSubscription(self) -> Subscription:
if type(self._current_subscription) == Subscription:
return self._current_subscription
if self._current_subscription is None:
return None
subscription_api = importlib.import_module("outsetapy.api.billing.subscriptions").Subscriptions(self.__store)
return subscription_api.get(self._current_subscription)
@CurrentSubscription.setter
def CurrentSubscription(self, value):
if type(value) == Subscription:
self._current_subscription = value
else:
if hasattr(value, "Uid"):
self._current_subscription = value.Uid
else:
self._current_subscription = value
class Subscription:
def __init__(self, subscription_id: str, subscription_name: str):
self.subscription_id = subscription_id
self.subscription_name = subscription_name

class Account:
def __init__(self, data: object):
self.Name = None
self.ClientIdentifier = None
self.IsDemo = False
self.BillingAddress = Address("", "", "", "")
self.MailingAddress = Address("", "", "", "")
self.AccountStage = AccountStage("", "")
self.PaymentInformation = None
self.PersonAccount = []
self.Subscriptions = []
self.Deals = []
self.LastLoginDateTime = None
self.AccountSpecificPageUrl1 = ""
self.AccountSpecificPageUrl2 = ""
self.AccountSpecificPageUrl3 = ""
self.AccountSpecificPageUrl4 = ""
self.AccountSpecificPageUrl5 = ""
self.RewardFulReferralId = None
self.HasLoggedIn = False
self.AccountStageLabel = ""
self.DomainName = None
self.LatestSubscription = None
self.CurrentSubscription = None
self.PrimaryContact = None
self.PrimarySubscription = None
self.RecaptchaToken = None
self.LifetimeRevenue = 0
self.Uid = ""
self.Created = datetime.now()
self.Updated = datetime.now()

# Update the account attributes based on the provided dictionary
if '_objectType' in data and data['_objectType'] == 'Account':
self.Name = data['Name']
self.ClientIdentifier = data['ClientIdentifier']
self.IsDemo = data['IsDemo']
self.BillingAddress = data['BillingAddress']
self.MailingAddress = data['MailingAddress']
self.AccountStage = data['AccountStage']
self.PaymentInformation = data['PaymentInformation']
self.PersonAccount = data['PersonAccount']
self.Subscriptions = data['Subscriptions']
self.Deals = data['Deals']
self.LastLoginDateTime = data['LastLoginDateTime']
self.AccountSpecificPageUrl1 = data['AccountSpecificPageUrl1']
self.AccountSpecificPageUrl2 = data['AccountSpecificPageUrl2']
self.AccountSpecificPageUrl3 = data['AccountSpecificPageUrl3']
self.AccountSpecificPageUrl4 = data['AccountSpecificPageUrl4']
self.AccountSpecificPageUrl5 = data['AccountSpecificPageUrl5']
self.RewardFulReferralId = data['RewardFulReferralId']
self.HasLoggedIn = data['HasLoggedIn']
self.AccountStageLabel = data['AccountStageLabel']
self.DomainName = data['DomainName']
self.LatestSubscription = data['LatestSubscription']
self.CurrentSubscription = data['CurrentSubscription']
self.PrimaryContact = data['PrimaryContact']
self.PrimarySubscription = data['PrimarySubscription']
self.RecaptchaToken = data['RecaptchaToken']
self.LifetimeRevenue = data['LifetimeRevenue']
self.Uid = data['Uid']
self.Created = data['Created']
self.Updated = data['Updated']
elif '_objectType' in data:
raise Exception(f"Invalid object type: {data['_objectType']}")