From fec1d9334aa660da724bf142a8481075e2b799cf Mon Sep 17 00:00:00 2001 From: Matthew Wire Date: Wed, 31 Jan 2024 11:35:50 +0000 Subject: [PATCH] Add API4 to delete tracking category option --- CRM/Civixero/Base.php | 6 ++- CRM/Civixero/TrackingCategory.php | 22 +++++++++ .../Xero/TrackingCategoryDeleteOption.php | 45 +++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 Civi/Api4/Action/Xero/TrackingCategoryDeleteOption.php diff --git a/CRM/Civixero/Base.php b/CRM/Civixero/Base.php index d6a6b27d..0a12db4c 100755 --- a/CRM/Civixero/Base.php +++ b/CRM/Civixero/Base.php @@ -2,6 +2,7 @@ use Civi\Xero\ConnectorInterface; use League\OAuth2\Client\Token\AccessToken; +use XeroAPI\XeroPHP\Api\AccountingApi; /** * Class CRM_Civixero_Base @@ -70,14 +71,15 @@ public function __construct($parameters = []) { $this->singleton($this->_xero_access_token->getToken(), $this->_xero_tenant_id, $this->connector_id, $force); } - public function getAccountingApiInstance(): \XeroAPI\XeroPHP\Api\AccountingApi { + public function getAccountingApiInstance(): AccountingApi { // Configure OAuth2 access token for authorization: OAuth2 $config = \XeroAPI\XeroPHP\Configuration::getDefaultConfiguration()->setAccessToken($this->getAccessToken()); - $apiInstance = new \XeroAPI\XeroPHP\Api\AccountingApi( + $apiInstance = new AccountingApi( new \GuzzleHttp\Client(), $config ); + return $apiInstance; } diff --git a/CRM/Civixero/TrackingCategory.php b/CRM/Civixero/TrackingCategory.php index 2701e1e0..5f4e9577 100644 --- a/CRM/Civixero/TrackingCategory.php +++ b/CRM/Civixero/TrackingCategory.php @@ -73,6 +73,28 @@ public function addOption(string $trackingCategoryID, string $trackingOptionName } } + /** + * @throws \Exception + */ + public function deleteOption(string $trackingCategoryID, string $trackingOptionID): array { + CRM_Civixero_Base::isApiRateLimitExceeded(TRUE); + + $apiInstance = $this->getAccountingApiInstance(); + + try { + $result = $apiInstance->deleteTrackingOptions($this->getTenantID(), $trackingCategoryID, $trackingOptionID); + return [ + 'name' => $result->getOptions()[0]->getName(), + 'status' => $result->getOptions()[0]->getStatus(), + 'id' => $result->getOptions()[0]->getTrackingOptionId(), + 'deleted' => TRUE, + ]; + } catch (\Exception $e) { + \Civi::log('civixero')->error('Exception when calling AccountingApi->deleteTrackingOptions: ' . $e->getMessage()); + throw $e; + } + } + /** * @throws \Exception */ diff --git a/Civi/Api4/Action/Xero/TrackingCategoryDeleteOption.php b/Civi/Api4/Action/Xero/TrackingCategoryDeleteOption.php new file mode 100644 index 00000000..2183311c --- /dev/null +++ b/Civi/Api4/Action/Xero/TrackingCategoryDeleteOption.php @@ -0,0 +1,45 @@ + $this->connectorID]; + $xero = new \CRM_Civixero_TrackingCategory($params); + $trackingOption = $xero->deleteOption($this->trackingCategoryID, $this->trackingOptionID); + $result->exchangeArray($trackingOption); + return $result; + } + +}