Skip to content

Commit

Permalink
Invoices data object and getters.
Browse files Browse the repository at this point in the history
Extracted filter for account querying.
  • Loading branch information
cmsx committed Feb 29, 2016
1 parent 4551166 commit 0c16305
Show file tree
Hide file tree
Showing 6 changed files with 169 additions and 46 deletions.
14 changes: 10 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,16 +111,22 @@ For some types of objects there are added custom methods:
* `getOnePaymentMethod($id, array $columns = null)`
* `getAllPaymentMethods(array $columns = null, $limit = null)`
* `createAccount(Account $account, Contact $contact, PaymentMethod $paymentMethod = null)`
* `getAllPayments(array $columns = null, $limit = null)`
* `getOnePayment($id, array $columns = null)`
* `getPaymentsForAccount($account, array $columns = null, $limit = null)`

**Subscriptions**

* `getAllSubscriptions(array $columns = null, $limit = null)`
* `getOneSubscription($id, array $columns = null)`
* `getSubscriptionsForAccount($account, array $columns = null, $limit = null)`
* `subscribe(Account $account, Subscription $subscription, ProductRatePlan $ratePlan, ProductRatePlanCharge $ratePlanCharge, PaymentMethod $paymentMethod = null, Contact $contact = null, SubscribeOptions $subscribeOptions = null)`
* `subscribe(Account $account, Subscription $subscription, ProductRatePlan $ratePlan, ProductRatePlanCharge $ratePlanCharge = null, PaymentMethod $paymentMethod = null, Contact $contact = null, SubscribeOptions $subscribeOptions = null)`

**Payments & Invoices**

* `getAllPayments(array $columns = null, $limit = null)`
* `getOnePayment($id, array $columns = null)`
* `getPaymentsForAccount($account, array $columns = null, $limit = null)`
* `getAllInvoices(array $columns = null, $limit = null)`
* `getOneInvoice($id, array $columns = null)`
* `getInvoicesForAccount($account, array $columns = null, $limit = null)`

# Usage Example

Expand Down
4 changes: 3 additions & 1 deletion src/API.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Spira\ZuoraSdk\DataObjects\Error;
use Spira\ZuoraSdk\DataObjects\Contact;
use Spira\ZuoraSdk\DataObjects\Account;
use Spira\ZuoraSdk\DataObjects\Invoice;
use Spira\ZuoraSdk\DataObjects\Payment;
use Spira\ZuoraSdk\DataObjects\Product;
use Spira\ZuoraSdk\Exception\ApiException;
Expand Down Expand Up @@ -316,13 +317,14 @@ protected function getClassMap()
'Account' => Account::class,
'Contact' => Contact::class,
'Error' => Error::class,
'Invoice' => Invoice::class,
'Payment' => Payment::class,
'PaymentMethod' => PaymentMethod::class,
'Product' => Product::class,
'ProductRatePlan' => ProductRatePlan::class,
'ProductRatePlanCharge' => ProductRatePlanCharge::class,
'ProductRatePlanChargeTier' => ProductRatePlanChargeTier::class,
'Subscription' => Subscription::class,
'Payment' => Payment::class,
];
}
}
59 changes: 59 additions & 0 deletions src/DataObjects/Invoice.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace Spira\ZuoraSdk\DataObjects;

use Spira\ZuoraSdk\DataObject;

/**
* @see https://knowledgecenter.zuora.com/DC_Developers/SOAP_API/E1_SOAP_API_Object_Reference/Invoice
*/
class Invoice extends DataObject
{
protected $type = 'Invoice';

public static function getDefaultColumns()
{
return [
'AccountId',
'AdjustmentAmount',
'Amount',
'AmountWithoutTax',
'Balance',
'Comments',
'CreatedById',
'CreatedDate',
'CreditBalanceAdjustmentAmount',
'DueDate',
'Id',
'IncludesOneTime',
'IncludesRecurring',
'IncludesUsage',
'InvoiceDate',
'InvoiceNumber',
'LastEmailSentDate',
'PaymentAmount',
'PostedBy',
'PostedDate',
'RefundAmount',
'Source',
'SourceId',
'Status',
'TargetDate',
'TaxAmount',
'TaxExemptAmount',
'TransferredToAccounting',
'UpdatedDate',
];
}

public static function getOptionalColumns()
{
return [
'Comments',
'LastEmailSentDate',
'Source',
'SourceId',
'TransferredToAccounting',
];
}
}
88 changes: 49 additions & 39 deletions src/Zuora.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Spira\ZuoraSdk\DataObjects\Account;
use Spira\ZuoraSdk\DataObjects\Contact;
use Spira\ZuoraSdk\DataObjects\Invoice;
use Spira\ZuoraSdk\DataObjects\Payment;
use Spira\ZuoraSdk\DataObjects\Product;
use Spira\ZuoraSdk\DataObjects\Subscription;
Expand Down Expand Up @@ -358,16 +359,7 @@ public function getOneAccount($id, array $columns = null)
*/
public function getAllContacts($account, array $columns = null, $limit = null)
{
$id = $this->getIdFromArg($account);

return $this->getAll(
'Contact',
$columns ?: Contact::getDefaultColumns(),
$limit,
function (QueryBuilder $query) use ($id) {
$query->where('AccountId', '=', $id);
}
);
return $this->getAll('Contact', $columns ?: Contact::getDefaultColumns(), $limit, $this->filterForAccount($account));
}

/**
Expand Down Expand Up @@ -401,16 +393,7 @@ public function getAllPaymentMethods(array $columns = null, $limit = null)
*/
public function getPaymentMethodsForAccount($account, array $columns = null, $limit = null)
{
$id = $this->getIdFromArg($account);

return $this->getAll(
'PaymentMethod',
$columns ?: PaymentMethod::getDefaultColumns(),
$limit,
function (QueryBuilder $query) use ($id) {
$query->where('AccountId', '=', $id);
}
);
return $this->getAll('PaymentMethod', $columns ?: PaymentMethod::getDefaultColumns(), $limit, $this->filterForAccount($account));
}

/**
Expand Down Expand Up @@ -452,17 +435,7 @@ public function getOneSubscription($id, array $columns = null)
*/
public function getSubscriptionsForAccount($account, array $columns = null, $limit = null)
{
$id = $this->getIdFromArg($account);

return $this->getAll(

'Subscription',
$columns ?: Subscription::getDefaultColumns(),
$limit,
function (QueryBuilder $query) use ($id) {
$query->where('AccountId', '=', $id);
}
);
return $this->getAll('Subscription', $columns ?: Subscription::getDefaultColumns(), $limit, $this->filterForAccount($account));
}

/**
Expand Down Expand Up @@ -493,17 +466,54 @@ public function getOnePayment($id, array $columns = null)
* @return Payment[]
*/
public function getPaymentsForAccount($account, array $columns = null, $limit = null)
{
return $this->getAll('Payment', $columns ?: Payment::getDefaultColumns(), $limit, $this->filterForAccount($account));
}

/**
* Get all invoices.
*
* @return Invoice[]|bool
*/
public function getAllInvoices(array $columns = null, $limit = null)
{
return $this->getAll('Invoice', $columns ?: Invoice::getDefaultColumns(), $limit);
}

/**
* @return Invoice
*
* @throws NotFoundException
*/
public function getOneInvoice($id, array $columns = null)
{
return $this->getOneById('Invoice', $columns ?: Invoice::getDefaultColumns(), $this->getIdFromArg($id));
}

/**
* Get all invoices for account.
*
* @param string|Account $account
*
* @return Invoice[]
*/
public function getInvoicesForAccount($account, array $columns = null, $limit = null)
{
return $this->getAll('Invoice', $columns ?: Invoice::getDefaultColumns(), $limit, $this->filterForAccount($account));
}

/**
* Make query filter closure for account condition.
*
* @param string|Account $account
*/
protected function filterForAccount($account)
{
$id = $this->getIdFromArg($account);

return $this->getAll(
'Payment',
$columns ?: Payment::getDefaultColumns(),
$limit,
function (QueryBuilder $query) use ($id) {
$query->where('AccountId', '=', $id);
}
);
return function (QueryBuilder $query) use ($id) {
$query->where('AccountId', '=', $id);
};
}

/**
Expand Down
40 changes: 40 additions & 0 deletions tests/AccountsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use Spira\ZuoraSdk\DataObjects\Account;
use Spira\ZuoraSdk\DataObjects\Contact;
use Spira\ZuoraSdk\DataObjects\Invoice;
use Spira\ZuoraSdk\DataObjects\Payment;
use Spira\ZuoraSdk\DataObjects\PaymentMethod;

Expand Down Expand Up @@ -160,4 +161,43 @@ public function testGetOnePayment(Payment $payment)
$this->checkPaymentObject($result);
$this->assertEquals($payment->toArray(), $result->toArray());
}

public function testGetAllInvoices()
{
$api = $this->getZuora();
$invoices = $api->getAllInvoices();

$this->assertTrue(is_array($invoices));
$this->assertGreaterThanOrEqual(1, count($invoices), 'There has to be at least 1 invoice');
$this->checkInvoiceObject($invoices[0]);

return $invoices[0];
}

/**
* @depends testGetAllInvoices
*/
public function testGetOneInvoice(Invoice $invoice)
{
$api = $this->getZuora();

$result = $api->getOneInvoice($invoice['Id']);
$this->checkInvoiceObject($result);
$this->assertEquals($invoice->toArray(), $result->toArray());
}

/**
* @depends testGetAllInvoices
*/
public function testGetAllAccountInvoices(Invoice $invoice)
{
$api = $this->getZuora();

$invoices = $api->getInvoicesForAccount($invoice['AccountId']);
$this->assertTrue(is_array($invoices));
$this->assertGreaterThanOrEqual(1, count($invoices));

$ids = array_pluck($invoices, 'Id');
$this->assertTrue(in_array($invoice['Id'], $ids));
}
}
10 changes: 8 additions & 2 deletions tests/support/TestCase.php
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
<?php

use Spira\ZuoraSdk\API;
use Spira\ZuoraSdk\DataObjects\Payment;
use Spira\ZuoraSdk\DataObjects\Subscription;
use Spira\ZuoraSdk\Zuora;
use Spira\ZuoraSdk\DataObjects\Account;
use Spira\ZuoraSdk\DataObjects\Contact;
use Spira\ZuoraSdk\DataObjects\Invoice;
use Spira\ZuoraSdk\DataObjects\Payment;
use Spira\ZuoraSdk\DataObjects\Product;
use Spira\ZuoraSdk\DataObjects\Subscription;
use Spira\ZuoraSdk\DataObjects\PaymentMethod;
use Spira\ZuoraSdk\DataObjects\ProductRatePlan;
use Spira\ZuoraSdk\DataObjects\ProductRatePlanCharge;
Expand Down Expand Up @@ -70,6 +71,11 @@ protected function checkAccountObject($account, $columns = null)
$this->checkDataObject($account, Account::class, $columns);
}

protected function checkInvoiceObject($invoice, $columns = null)
{
$this->checkDataObject($invoice, Invoice::class, $columns);
}

protected function checkPaymentObject($payment, $columns = null)
{
$this->checkDataObject($payment, Payment::class, $columns);
Expand Down

0 comments on commit 0c16305

Please sign in to comment.