From 179c96ca5d8e086beee0146a927c3ec35a6061fa Mon Sep 17 00:00:00 2001 From: Deon George Date: Thu, 25 Aug 2022 11:22:24 +1000 Subject: [PATCH] Added Item/Category api queries --- src/API.php | 34 ++++++++++++++++- src/Models/Category.php | 35 ++++++++++++++++++ src/Models/Item.php | 77 +++++++++++++++++++++++++++++++++++++++ src/Response/Base.php | 3 -- src/Response/ListList.php | 26 ++++++++++--- 5 files changed, 165 insertions(+), 10 deletions(-) create mode 100644 src/Models/Category.php create mode 100644 src/Models/Item.php diff --git a/src/API.php b/src/API.php index 25bbee6..ce96a5e 100644 --- a/src/API.php +++ b/src/API.php @@ -161,6 +161,22 @@ final class API return new Customer($this->execute('customer/'.$id,$parameters)); } + /** + * Get a list of our classes + * + * @param array $parameters + * @return ListList + * @throws \Exception + */ + public function getClasses(array $parameters=[]): ListList + { + Log::debug(sprintf('%s:Get a list of classes',static::LOGKEY)); + $key = 'classes'; + $parameters['query'] = 'select * from Class'; + + return new ListList($this->execute('query',$parameters),$key); + } + /** * Get a list of our clients * @@ -193,10 +209,26 @@ final class API return new ListList($this->execute('query',$parameters),$key); } + /** + * Get a list of our items + * + * @param array $parameters + * @return ListList + * @throws \Exception + */ + public function getItems(array $parameters=[]): ListList + { + Log::debug(sprintf('%s:Get a list of items',static::LOGKEY)); + $key = 'items'; + $parameters['query'] = 'select * from Item'; + + return new ListList($this->execute('query',$parameters),$key); + } + /** * Setup the API call * - * @param $url + * @param string $url * @param array $parameters * @param array $headers * @return \CurlHandle diff --git a/src/Models/Category.php b/src/Models/Category.php new file mode 100644 index 0000000..1521807 --- /dev/null +++ b/src/Models/Category.php @@ -0,0 +1,35 @@ + 'Id', + 'synctoken' => 'SyncToken', + ]; + + switch ($key) { + case 'created_at': + return object_get($this->getAttribute('MetaData'),'CreateTime'); + case 'updated_at': + return object_get($this->getAttribute('MetaData'),'LastUpdatedTime'); + + default: + return parent::__get(Arr::get($keymap,$key,$key)); + } + } +} \ No newline at end of file diff --git a/src/Models/Item.php b/src/Models/Item.php new file mode 100644 index 0000000..23707f6 --- /dev/null +++ b/src/Models/Item.php @@ -0,0 +1,77 @@ + 'Id', + 'synctoken' => 'SyncToken', + ]; + + switch ($key) { + case 'created_at': + return object_get($this->getAttribute('MetaData'),'CreateTime'); + case 'updated_at': + return object_get($this->getAttribute('MetaData'),'LastUpdatedTime'); + + default: + return parent::__get(Arr::get($keymap,$key,$key)); + } + } +} \ No newline at end of file diff --git a/src/Response/Base.php b/src/Response/Base.php index fd656a0..bce55e0 100644 --- a/src/Response/Base.php +++ b/src/Response/Base.php @@ -2,13 +2,10 @@ namespace Intuit\Response; -use Illuminate\Support\Collection; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Log; use Jenssegers\Model\Model; -use Intuit\Models\Customer; - /** * This parent class handles responses received from Intuit * diff --git a/src/Response/ListList.php b/src/Response/ListList.php index fc2c978..2577ffa 100644 --- a/src/Response/ListList.php +++ b/src/Response/ListList.php @@ -2,11 +2,12 @@ namespace Intuit\Response; +use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Log; -use Intuit\Models\{Customer,Invoice}; +use Intuit\Models\{Category,Customer,Invoice,Item}; /** * This is a Generic Intuit Response to API calls that produces a list of objects @@ -22,8 +23,10 @@ class ListList extends Base implements \Countable, \ArrayAccess, \Iterator private ?int $counter = NULL; protected const TYPES = [ - 'customers', - 'invoices', + 'classes' => 'Class', + 'customers' => 'Customer', + 'invoices' => 'Invoice', + 'items' => 'Item', ]; /** @@ -37,7 +40,7 @@ class ListList extends Base implements \Countable, \ArrayAccess, \Iterator { parent::__construct($response); - if (! in_array($type,self::TYPES)) + if (! in_array($type,array_keys(self::TYPES))) throw new \Exception('Unknown data type: '.$type); if (object_get($response,'time')) @@ -123,13 +126,24 @@ class ListList extends Base implements \Countable, \ArrayAccess, \Iterator */ private function data(object $response,string $type): Collection { + if (! ($x=object_get($response->QueryResponse,Arr::get(self::TYPES,$type)))) + return collect(); + switch ($type) { + case 'classes': + $data = collect(Category::hydrate($x)); + break; + case 'customers': - $data = collect(Customer::hydrate($response->QueryResponse->Customer)); + $data = collect(Customer::hydrate($x)); break; case 'invoices': - $data = collect(Invoice::hydrate($response->QueryResponse->Invoice)); + $data = collect(Invoice::hydrate($x)); + break; + + case 'items': + $data = collect(Item::hydrate($x)); break; default: throw new \Exception('Unknown object type: '.$this->_type);