API to get a list of invoices

This commit is contained in:
Deon George 2022-08-19 20:51:35 +10:00
parent 59302bd3e8
commit 1d209fdbdc
4 changed files with 173 additions and 7 deletions

View File

@ -164,8 +164,6 @@ final class API
/** /**
* Get a list of our clients * Get a list of our clients
* *
* select * from Account where Metadata.CreateTime > '2014-12-31'
*
* @param array $parameters * @param array $parameters
* @return ListList * @return ListList
* @throws \Exception * @throws \Exception
@ -179,6 +177,22 @@ final class API
return new ListList($this->execute('query',$parameters),$key); return new ListList($this->execute('query',$parameters),$key);
} }
/**
* Get a list of our invoices
*
* @param array $parameters
* @return ListList
* @throws \Exception
*/
public function getInvoices(array $parameters=[]): ListList
{
Log::debug(sprintf('%s:Get a list of invoices',static::LOGKEY));
$key = 'invoices';
$parameters['query'] = 'select * from Invoice';
return new ListList($this->execute('query',$parameters),$key);
}
/** /**
* Setup the API call * Setup the API call
* *

View File

@ -3,9 +3,10 @@
namespace Intuit\Models; namespace Intuit\Models;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Intuit\Traits\CompareAttributes;
use Jenssegers\Model\Model; use Jenssegers\Model\Model;
use Intuit\Traits\CompareAttributes;
/* /*
+"Customer": {#1760 +"Customer": {#1760
+"Taxable": false +"Taxable": false
@ -54,11 +55,11 @@ final class Customer extends Model
public function __get($key) { public function __get($key) {
$keymap = [ $keymap = [
'id' => 'Id', 'id' => 'Id',
'synctoken' => 'SyncToken',
'active' => 'Active', 'active' => 'Active',
'companyname' => 'CompanyName', 'companyname' => 'CompanyName',
'fullname' => 'FullyQualifiedName', 'fullname' => 'FullyQualifiedName',
'ref' => 'ResaleNum', 'ref' => 'ResaleNum',
'synctoken' => 'SyncToken',
]; ];
switch ($key) { switch ($key) {

144
src/Models/Invoice.php Normal file
View File

@ -0,0 +1,144 @@
<?php
namespace Intuit\Models;
use Illuminate\Support\Arr;
use Jenssegers\Model\Model;
use Intuit\Traits\CompareAttributes;
/*
{#5766
+"AllowIPNPayment": false
+"AllowOnlinePayment": false
+"AllowOnlineCreditCardPayment": false
+"AllowOnlineACHPayment": false
+"domain": "QBO"
+"sparse": false
+"Id": "192"
+"SyncToken": "0"
+"MetaData": {#5765
+"CreateTime": "2018-06-09T07:41:49-07:00"
+"LastUpdatedTime": "2018-06-09T07:41:49-07:00"
}
+"CustomField": array:1 [
0 => {#5764
+"DefinitionId": "1"
+"Name": "Event Rep"
+"Type": "StringType"
}
]
+"DocNumber": "1022"
+"TxnDate": "2018-06-10"
+"CurrencyRef": {#5763
+"value": "AUD"
+"name": "Australian Dollar"
}
+"ExchangeRate": 1
+"LinkedTxn": []
+"Line": array:2 [
0 => {#5762
+"Id": "1"
+"LineNum": 1
+"Description": "Holiday party - gold level"
+"Amount": 6000.0
+"DetailType": "SalesItemLineDetail"
+"SalesItemLineDetail": {#5761
+"TaxInclusiveAmt": 6600.0
+"ItemRef": {#5760
+"value": "7"
+"name": "Holiday party:Gold party"
}
+"UnitPrice": 2000
+"Qty": 3
+"ItemAccountRef": {#5759
+"value": "1"
+"name": "Services"
}
+"TaxCodeRef": {#5758
+"value": "10"
}
}
}
1 => {#5757
+"Amount": 6000.0
+"DetailType": "SubTotalLineDetail"
+"SubTotalLineDetail": {#5756}
}
]
+"TxnTaxDetail": {#5755
+"TotalTax": 600.0
+"TaxLine": array:1 [
0 => {#5754
+"Amount": 600.0
+"DetailType": "TaxLineDetail"
+"TaxLineDetail": {#5753
+"TaxRateRef": {#5752
+"value": "20"
}
+"PercentBased": true
+"TaxPercent": 10
+"NetAmountTaxable": 6000.0
}
}
]
}
+"RecurDataRef": {#5751
+"value": "11"
}
+"CustomerRef": {#5750
+"value": "17"
+"name": "Jordan Burgess"
}
+"CustomerMemo": {#5749
+"value": "Thanks for your business! We appreciate referrals!"
}
+"BillAddr": {#5748
+"Id": "15"
+"Line1": "1 Success Way"
+"City": "Sydney"
+"CountrySubDivisionCode": "NSW"
+"PostalCode": "2000"
+"Lat": "-33.871226"
+"Long": "150.897656"
}
+"FreeFormAddress": false
+"SalesTermRef": {#5747
+"value": "3"
}
+"DueDate": "2018-07-10"
+"GlobalTaxCalculation": "TaxInclusive"
+"TotalAmt": 6600.0
+"HomeTotalAmt": 6600.0
+"PrintStatus": "NotSet"
+"EmailStatus": "NotSet"
+"Balance": 6600.0
+"HomeBalance": 6600.0
}
+"time": "2022-08-13T21:15:37.254-07:00"
*/
final class Invoice extends Model
{
use CompareAttributes;
public function __get($key) {
$keymap = [
'id' => 'Id',
'synctoken' => 'SyncToken',
'invoice_num' => 'DocNumber',
'invoice_date' => 'TxnDate',
'due_date' => 'DueDate',
];
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));
}
}
}

View File

@ -5,7 +5,8 @@ namespace Intuit\Response;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Intuit\Models\Customer;
use Intuit\Models\{Customer,Invoice};
/** /**
* This is a Generic Intuit Response to API calls that produces a list of objects * This is a Generic Intuit Response to API calls that produces a list of objects
@ -22,6 +23,7 @@ class ListList extends Base implements \Countable, \ArrayAccess, \Iterator
private ?int $counter = NULL; private ?int $counter = NULL;
protected const TYPES = [ protected const TYPES = [
'customers', 'customers',
'invoices',
]; ];
/** /**
@ -124,13 +126,18 @@ class ListList extends Base implements \Countable, \ArrayAccess, \Iterator
switch ($type) { switch ($type) {
case 'customers': case 'customers':
$data = collect(Customer::hydrate($response->QueryResponse->Customer)); $data = collect(Customer::hydrate($response->QueryResponse->Customer));
$this->startPosition = $response->QueryResponse->startPosition; break;
$this->maxResults = $response->QueryResponse->maxResults;
case 'invoices':
$data = collect(Invoice::hydrate($response->QueryResponse->Invoice));
break; break;
default: throw new \Exception('Unknown object type: '.$this->_type); default: throw new \Exception('Unknown object type: '.$this->_type);
} }
$this->startPosition = $response->QueryResponse->startPosition;
$this->maxResults = $response->QueryResponse->maxResults;
return $data; return $data;
} }
} }