Skip to content

Commit

Permalink
feat: implement ability to load client custom fields
Browse files Browse the repository at this point in the history
  • Loading branch information
alexbuckham committed Jan 28, 2025
1 parent 3424f83 commit e2f242a
Show file tree
Hide file tree
Showing 9 changed files with 278 additions and 2 deletions.
54 changes: 54 additions & 0 deletions src/Objects/Client/ClientCustomFieldData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

namespace BuckhamDuffy\LaravelXeroPracticeManager\Objects\Client;

use BuckhamDuffy\LaravelXeroPracticeManager\Support\AbstractResponse;

class ClientCustomFieldData extends AbstractResponse
{

public ?string $UUID = null;
public ?string $Name = null;

public ?string $Text = null;
public ?string $Date = null;
public ?string $Number = null;
public ?string $Decimal = null;
public ?bool $Boolean = null;

public function getUUID(): ?string
{
return $this->UUID;
}

public function getName(): ?string
{
return $this->Name;
}

public function getText(): ?string
{
return $this->Text;
}

public function getDate(): ?string
{
return $this->Date;
}

public function getNumber(): ?string
{
return $this->Number;
}

public function getDecimal(): ?string
{
return $this->Decimal;
}

public function getBoolean(): ?bool
{
return $this->Boolean;
}

}
84 changes: 84 additions & 0 deletions src/Objects/CustomFieldData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?php

namespace BuckhamDuffy\LaravelXeroPracticeManager\Objects;

use Spatie\LaravelData\DataCollection;
use Spatie\LaravelData\Attributes\DataCollectionOf;
use BuckhamDuffy\LaravelXeroPracticeManager\Support\AbstractResponse;

class CustomFieldData extends AbstractResponse
{

public ?string $UUID = null;
public ?string $Name = null;
public ?string $Type = null;
public ?string $LinkUrl = null;
public ?string $Options = null;
public ?bool $UseClient = null;
public ?bool $UseContact = null;
public ?bool $UseJob = null;
public ?bool $UseJobTask = null;
public ?bool $UseJobCost = null;
public ?bool $UseJobTime = null;
public ?string $ValueElement = null;

public function getUUID(): ?string
{
return $this->UUID;
}

public function getName(): ?string
{
return $this->Name;
}

public function getType(): ?string
{
return $this->Type;
}

public function getLinkUrl(): ?string
{
return $this->LinkUrl;
}

public function getOptions(): ?string
{
return $this->Options;
}

public function getUseClient(): ?bool
{
return $this->UseClient;
}

public function getUseContact(): ?bool
{
return $this->UseContact;
}

public function getUseJob(): ?bool
{
return $this->UseJob;
}

public function getUseJobTask(): ?bool
{
return $this->UseJobTask;
}

public function getUseJobCost(): ?bool
{
return $this->UseJobCost;
}

public function getUseJobTime(): ?bool
{
return $this->UseJobTime;
}

public function getValueElement(): ?string
{
return $this->ValueElement;
}
}
26 changes: 26 additions & 0 deletions src/Resources/Clients/ClientGetCustomFieldsRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace BuckhamDuffy\LaravelXeroPracticeManager\Resources\Clients;

use Saloon\Enums\Method;
use BuckhamDuffy\LaravelXeroPracticeManager\Support\AbstractRequest;
use BuckhamDuffy\LaravelXeroPracticeManager\XeroPracticeManagerConnector;
use BuckhamDuffy\LaravelXeroPracticeManager\Objects\Client\ClientCustomFieldData;
use BuckhamDuffy\LaravelXeroPracticeManager\Responses\ClientCustomFieldsCollectionResponse;

class ClientGetCustomFieldsRequest extends AbstractRequest
{
protected Method $method = Method::GET;

protected ?string $responseModel = ClientCustomFieldsCollectionResponse::class;

public function __construct(XeroPracticeManagerConnector $connector, private readonly string $xeroId)
{
parent::__construct($connector);
}

public function resolveEndpoint(): string
{
return '/client.api/get/' . $this->xeroId . '/customfield';
}
}
5 changes: 5 additions & 0 deletions src/Resources/Clients/ClientsResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,9 @@ public function archive(string $uuid): ClientArchiveRequest
{
return new ClientArchiveRequest($this->connector, $uuid);
}

public function customFields(string $xeroId): ClientGetCustomFieldsRequest
{
return new ClientGetCustomFieldsRequest($this->connector, $xeroId);
}
}
32 changes: 32 additions & 0 deletions src/Resources/CustomFields/CustomFieldsListRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace BuckhamDuffy\LaravelXeroPracticeManager\Resources\CustomFields;

use Saloon\Enums\Method;
use BuckhamDuffy\LaravelXeroPracticeManager\Support\AbstractRequest;
use BuckhamDuffy\LaravelXeroPracticeManager\XeroPracticeManagerConnector;
use BuckhamDuffy\LaravelXeroPracticeManager\Responses\CustomFieldCollectionResponse;

class CustomFieldsListRequest extends AbstractRequest
{
protected Method $method = Method::GET;

protected ?string $responseModel = CustomFieldCollectionResponse::class;
protected string $collectionKey = 'CustomFieldDefinitions';

public function __construct(
XeroPracticeManagerConnector $connector,
) {
parent::__construct($connector);
}

public function resolveEndpoint(): string
{
return '/customfield.api/definition';
}

protected function defaultQuery(): array
{
return [];
}
}
13 changes: 13 additions & 0 deletions src/Resources/CustomFields/CustomFieldsResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace BuckhamDuffy\LaravelXeroPracticeManager\Resources\CustomFields;

use BuckhamDuffy\LaravelXeroPracticeManager\Support\AbstractResource;

class CustomFieldsResource extends AbstractResource
{
public function list(): CustomFieldsListRequest
{
return new CustomFieldsListRequest($this->connector);
}
}
28 changes: 28 additions & 0 deletions src/Responses/ClientCustomFieldsCollectionResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace BuckhamDuffy\LaravelXeroPracticeManager\Responses;

use Spatie\LaravelData\DataCollection;
use Spatie\LaravelData\Attributes\DataCollectionOf;
use BuckhamDuffy\LaravelXeroPracticeManager\Objects\Client\ClientCustomFieldData;
use BuckhamDuffy\LaravelXeroPracticeManager\Support\AbstractResponse;

class ClientCustomFieldsCollectionResponse extends AbstractResponse
{
/**
* @var null|DataCollection<int, ClientCustomFieldData>
*/
#[DataCollectionOf(ClientCustomFieldData::class)]
public ?DataCollection $CustomFields = null;

public static array $relations = ['CustomFields'];

/**
* @return DataCollection<int, ClientCustomFieldData>
*/
public function getCustomFields(): DataCollection
{
return $this->CustomFields ?: ClientCustomFieldData::collection([]);
}

}
28 changes: 28 additions & 0 deletions src/Responses/CustomFieldCollectionResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace BuckhamDuffy\LaravelXeroPracticeManager\Responses;

use Spatie\LaravelData\DataCollection;
use Spatie\LaravelData\Attributes\DataCollectionOf;
use BuckhamDuffy\LaravelXeroPracticeManager\Objects\CustomFieldData;
use BuckhamDuffy\LaravelXeroPracticeManager\Support\AbstractResponse;

class CustomFieldCollectionResponse extends AbstractResponse
{
/**
* @var null|DataCollection<int, CustomFieldData>
*/
#[DataCollectionOf(CustomFieldData::class)]
public ?DataCollection $CustomFieldDefinitions = null;

public static array $relations = ['CustomFieldDefinitions'];

/**
* @return DataCollection<int, CustomFieldData>
*/
public function getCustomFields(): DataCollection
{
return $this->CustomFieldDefinitions ?: CustomFieldData::collection([]);
}

}
10 changes: 8 additions & 2 deletions src/XeroPracticeManagerConnector.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use BuckhamDuffy\LaravelXeroPracticeManager\Resources\Staff\StaffResource;
use BuckhamDuffy\LaravelXeroPracticeManager\Resources\Clients\ClientsResource;
use BuckhamDuffy\LaravelXeroPracticeManager\Resources\ClientGroups\ClientGroupsResource;
use BuckhamDuffy\LaravelXeroPracticeManager\Resources\CustomFields\CustomFieldsResource;

class XeroPracticeManagerConnector extends Connector
{
Expand Down Expand Up @@ -55,9 +56,14 @@ public function staff(): StaffResource
return new StaffResource($this);
}

public function jobs(): JobsResource
public function jobs(): JobsResource
{
return new JobsResource($this);
}

public function customFields(): CustomFieldsResource
{
return new JobsResource($this);
return new CustomFieldsResource($this);
}

public function withVersion(string $version): self
Expand Down

0 comments on commit e2f242a

Please sign in to comment.