From 5e3a53a804c7c80f301fb1b6e67ebb8641823a77 Mon Sep 17 00:00:00 2001 From: radomangutic Date: Mon, 1 Apr 2024 22:46:00 +0200 Subject: [PATCH 1/3] Update fields parameter in Accounts class --- src/outsetapy/api/crm/accounts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/outsetapy/api/crm/accounts.py b/src/outsetapy/api/crm/accounts.py index 11e8ccb..608753a 100644 --- a/src/outsetapy/api/crm/accounts.py +++ b/src/outsetapy/api/crm/accounts.py @@ -21,7 +21,7 @@ async def get_all(self, options: dict = {}) -> List[Account]: .with_params( { "fields": options.get( - "fields", "*,PersonAccount.*,PersonAccount.Person.Uid" + "fields", "*,PrimaryContact.*,Subscriptions.*,Subscriptions.Plan.*,CurrentSubscription.*,CurrentSubscription.Plan.*,PersonAccount.*,PersonAccount.Person.Uid" ) } ) From c839d72fd5ba1a0f344403cfdf64822c0093ffbd Mon Sep 17 00:00:00 2001 From: radomangutic Date: Tue, 2 Apr 2024 10:50:54 +0200 Subject: [PATCH 2/3] Update CurrentSubscription attribute to Account class --- src/outsetapy/models/crm/account.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/outsetapy/models/crm/account.py b/src/outsetapy/models/crm/account.py index ec8270f..2db39d5 100644 --- a/src/outsetapy/models/crm/account.py +++ b/src/outsetapy/models/crm/account.py @@ -30,6 +30,7 @@ def __init__(self, data: object, store: Store): self.LatestSubscription = None self.PrimaryContact = None self.PrimarySubscription = None + self.CurrentSubscription = None self.RecaptchaToken = None self.LifetimeRevenue = 0 self.Uid = "" @@ -59,10 +60,7 @@ def __init__(self, data: object, store: Store): self.AccountStageLabel = data["AccountStageLabel"] self.DomainName = data["DomainName"] self.LatestSubscription = data["LatestSubscription"] - if "CurrentSubscription" in data and data["CurrentSubscription"] and "Uid" in data["CurrentSubscription"]: - self._current_subscription = data["CurrentSubscription"]['Uid'] - else: - self._current_subscription = None + self.CurrentSubscription = data['CurrentSubscription'] self.PrimaryContact = data["PrimaryContact"] self.PrimarySubscription = data["PrimarySubscription"] self.RecaptchaToken = data["RecaptchaToken"] @@ -72,9 +70,3 @@ def __init__(self, data: object, store: Store): self.Updated = data["Updated"] elif "_objectType" in data: raise Exception(f"Invalid object type: {data['_objectType']}") - - @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 From 1bf6991f77e82b6bb36fc9339004f0e626200e60 Mon Sep 17 00:00:00 2001 From: radomangutic Date: Tue, 2 Apr 2024 11:49:32 +0200 Subject: [PATCH 3/3] Refactor account and subscription models --- src/outsetapy/api/billing/subscriptions.py | 5 +---- src/outsetapy/api/crm/accounts.py | 8 ++++++-- src/outsetapy/models/billing/subscription.py | 10 ++++++---- src/outsetapy/models/crm/account.py | 5 +++-- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/outsetapy/api/billing/subscriptions.py b/src/outsetapy/api/billing/subscriptions.py index 203e828..36f2f4c 100644 --- a/src/outsetapy/api/billing/subscriptions.py +++ b/src/outsetapy/api/billing/subscriptions.py @@ -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 @@ -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() diff --git a/src/outsetapy/api/crm/accounts.py b/src/outsetapy/api/crm/accounts.py index 608753a..a525ce6 100644 --- a/src/outsetapy/api/crm/accounts.py +++ b/src/outsetapy/api/crm/accounts.py @@ -14,6 +14,7 @@ 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") @@ -21,7 +22,8 @@ async def get_all(self, options: dict = {}) -> List[Account]: .with_params( { "fields": options.get( - "fields", "*,PrimaryContact.*,Subscriptions.*,Subscriptions.Plan.*,CurrentSubscription.*,CurrentSubscription.Plan.*,PersonAccount.*,PersonAccount.Person.Uid" + "fields", + f"{fields}CurrentSubscription.Plan.*,PersonAccount.*,PersonAccount.Person.Uid", ) } ) @@ -47,6 +49,7 @@ 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() @@ -54,7 +57,8 @@ async def get(self, uid: str, options: dict = {}) -> Account: { "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.*", ) } ) diff --git a/src/outsetapy/models/billing/subscription.py b/src/outsetapy/models/billing/subscription.py index bd43db1..af32a35 100644 --- a/src/outsetapy/models/billing/subscription.py +++ b/src/outsetapy/models/billing/subscription.py @@ -40,8 +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'] + self.Account_Uid = data["Account"]["Uid"] + self._plan = data["Plan"]["Uid"] self.Quantity = data["Quantity"] self.StartDate = data["StartDate"] self.EndDate = data["EndDate"] @@ -53,8 +53,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) diff --git a/src/outsetapy/models/crm/account.py b/src/outsetapy/models/crm/account.py index 2db39d5..9e14753 100644 --- a/src/outsetapy/models/crm/account.py +++ b/src/outsetapy/models/crm/account.py @@ -1,9 +1,10 @@ from datetime import datetime -import importlib from outsetapy.util.store import Store from outsetapy.models.shared.address import Address + # from .deal import Deal + class Account: def __init__(self, data: object, store: Store): self.__store = store @@ -60,7 +61,7 @@ def __init__(self, data: object, store: Store): self.AccountStageLabel = data["AccountStageLabel"] self.DomainName = data["DomainName"] self.LatestSubscription = data["LatestSubscription"] - self.CurrentSubscription = data['CurrentSubscription'] + self.CurrentSubscription = data["CurrentSubscription"] self.PrimaryContact = data["PrimaryContact"] self.PrimarySubscription = data["PrimarySubscription"] self.RecaptchaToken = data["RecaptchaToken"]