Laravel Developer
David Carr
Web Developer
All Posts Archives Categories Authors
About Books Packages Templates Contact
Blog
All Posts Archives Categories Authors
About Books Packages Templates Contact
Laravel Xero
Laravel Packages
Laravel Microsoft Graph Laravel Xero Laravel Sent Emails Laravel Dropbox Laravel Box Laravel Companies House Laravel Countries Laravel Eventbrite Laravel Blade Components
PHP Packages
PDO Wrapper PHP find and replace JSON SQL Import IMAP Export CSV Pagination
v1
Navigation
  • Introduction
  • Install
  • Commands
  • Middleware
  • Is Connected
  • Disconnect
  • Tenant
  • Helpers
  • DTOs
  • Enums
  • Contacts
  • Credit Notes
  • Invoices
  • Webhooks
Navigation
  • Introduction
  • Install
  • Commands
  • Middleware
  • Is Connected
  • Disconnect
  • Tenant
  • Helpers
  • DTOs
  • Enums
  • Contacts
  • Credit Notes
  • Invoices
  • Webhooks

Data Transfer Objects (DTOs)

From version 1.1.14

Using DTOs

The package provides Data Transfer Objects (DTOs) to help with creating and updating resources:

ContactDTO

use Dcblogdev\Xero\DTOs\ContactDTO;
use Dcblogdev\Xero\Enums\ContactStatus;

// Create a new contact DTO
$contactDTO = new ContactDTO(
    name: 'ACME Inc',
    firstName: 'John',
    lastName: 'Doe',
    emailAddress: 'john.doe@example.com',
    accountNumber: 'ACME001',
    bankAccountDetails: '12-3456-7890123-00',
    taxNumber: '123-456-789',
    contactStatus: ContactStatus::Active->value,
    isSupplier: false,
    isCustomer: true,
    website: 'https://example.com'
);

// Add an address
$contactDTO->addresses[] = ContactDTO::createAddress(
    addressType: 'POBOX',
    addressLine1: '123 Main St',
    city: 'New York',
    region: 'NY',
    postalCode: '10001',
    country: 'USA'
);

// Add a phone number
$contactDTO->phones[] = ContactDTO::createPhone(
    phoneType: 'MOBILE',
    phoneNumber: '555-1234'
);

// Add a contact person
$contactDTO->contactPersons[] = ContactDTO::createContactPerson(
    firstName: 'Jane',
    lastName: 'Smith',
    emailAddress: 'jane.smith@example.com',
    includeInEmails: true
);

// Convert to array for API request
$contactArray = $contactDTO->toArray();

InvoiceDTO

use Dcblogdev\Xero\DTOs\InvoiceDTO;
use Dcblogdev\Xero\Enums\InvoiceType;
use Dcblogdev\Xero\Enums\InvoiceStatus;
use Dcblogdev\Xero\Enums\InvoiceLineAmountType;

// Create a new invoice DTO
$invoiceDTO = new InvoiceDTO(
    type: InvoiceType::AccRec->value,
    invoiceNumber: 'INV-001',
    reference: 'REF-001',
    date: date('Y-m-d'),
    dueDate: date('Y-m-d', strtotime('+30 days')),
    status: InvoiceStatus::Draft->value,
    lineAmountTypes: InvoiceLineAmountType::Exclusive->value,
    currencyCode: 'USD',
    contactID: 'contact-id'
);

// Add line items
$invoiceDTO->lineItems[] = InvoiceDTO::createLineItem(
    description: 'Web Development Services',
    quantity: 10,
    unitAmount: 100.00,
    accountCode: 200,
    taxType: 'OUTPUT',
    discountRate: 10
);

// Convert to array for API request
$invoiceArray = $invoiceDTO->toArray();
Table of Contents
  • Using DTOs
    • ContactDTO
    • InvoiceDTO

DCBlog

Practical tutorials, code snippets, and in-depth guides for modern web development. Helping developers build better applications since 2009.

Subscribe to my newsletter for the latest updates on my books and digital products.

© 2009 - 2025 DC Blog. All rights reserved.

Privacy Policy • Terms of Service