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();