mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-07 13:14:30 -04:00
Updates for castables
This commit is contained in:
parent
49601dfa5e
commit
09b803d9dc
@ -18,33 +18,19 @@ class QuickbooksSettingsCast implements CastsAttributes
|
|||||||
{
|
{
|
||||||
public function get($model, string $key, $value, array $attributes)
|
public function get($model, string $key, $value, array $attributes)
|
||||||
{
|
{
|
||||||
|
if (is_null($value)) {
|
||||||
|
return new QuickbooksSettings();
|
||||||
|
|
||||||
$data = json_decode($value, true);
|
$data = json_decode($value, true);
|
||||||
|
return QuickbooksSettings::fromArray($data);
|
||||||
if(!is_array($data))
|
|
||||||
return null;
|
|
||||||
|
|
||||||
$qb = new QuickbooksSettings();
|
|
||||||
$qb->accessTokenKey = $data['accessTokenKey'];
|
|
||||||
$qb->refresh_token = $data['refresh_token'];
|
|
||||||
$qb->realmID = $data['realmID'];
|
|
||||||
$qb->accessTokenExpiresAt = $data['accessTokenExpiresAt'];
|
|
||||||
$qb->refreshTokenExpiresAt = $data['refreshTokenExpiresAt'];
|
|
||||||
$qb->settings = $data['settings'] ?? [];
|
|
||||||
|
|
||||||
return $qb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function set($model, string $key, $value, array $attributes)
|
public function set($model, string $key, $value, array $attributes)
|
||||||
{
|
{
|
||||||
return [
|
if ($value instanceof QuickbooksSettings) {
|
||||||
$key => json_encode([
|
return json_encode(get_object_vars($value));
|
||||||
'accessTokenKey' => $value->accessTokenKey,
|
}
|
||||||
'refresh_token' => $value->refresh_token,
|
|
||||||
'realmID' => $value->realmID,
|
return json_encode($value);
|
||||||
'accessTokenExpiresAt' => $value->accessTokenExpiresAt,
|
|
||||||
'refreshTokenExpiresAt' => $value->refreshTokenExpiresAt,
|
|
||||||
'settings' => $value->settings,
|
|
||||||
])
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,10 @@ class ClientSync implements Castable
|
|||||||
{
|
{
|
||||||
public string $qb_id;
|
public string $qb_id;
|
||||||
|
|
||||||
|
public function __construct(array $attributes = [])
|
||||||
|
{
|
||||||
|
$this->qb_id = $attributes['qb_id'] ?? '';
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Get the name of the caster class to use when casting from / to this cast target.
|
* Get the name of the caster class to use when casting from / to this cast target.
|
||||||
*
|
*
|
||||||
@ -32,4 +35,8 @@ class ClientSync implements Castable
|
|||||||
return ClientSyncCast::class;
|
return ClientSyncCast::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function fromArray(array $data): self
|
||||||
|
{
|
||||||
|
return new self($data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,11 @@ use Illuminate\Contracts\Database\Eloquent\Castable;
|
|||||||
class InvoiceSync implements Castable
|
class InvoiceSync implements Castable
|
||||||
{
|
{
|
||||||
public string $qb_id;
|
public string $qb_id;
|
||||||
|
|
||||||
|
public function __construct(array $attributes = [])
|
||||||
|
{
|
||||||
|
$this->qb_id = $attributes['qb_id'] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the name of the caster class to use when casting from / to this cast target.
|
* Get the name of the caster class to use when casting from / to this cast target.
|
||||||
@ -32,4 +36,8 @@ class InvoiceSync implements Castable
|
|||||||
return InvoiceSyncCast::class;
|
return InvoiceSyncCast::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function fromArray(array $data): self
|
||||||
|
{
|
||||||
|
return new self($data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,10 @@ class ProductSync implements Castable
|
|||||||
{
|
{
|
||||||
public string $qb_id;
|
public string $qb_id;
|
||||||
|
|
||||||
|
public function __construct(array $attributes = [])
|
||||||
|
{
|
||||||
|
$this->qb_id = $attributes['qb_id'] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the name of the caster class to use when casting from / to this cast target.
|
* Get the name of the caster class to use when casting from / to this cast target.
|
||||||
@ -32,4 +36,8 @@ class ProductSync implements Castable
|
|||||||
return ProductSyncCast::class;
|
return ProductSyncCast::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function fromArray(array $data): self
|
||||||
|
{
|
||||||
|
return new self($data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,34 +30,28 @@ class QuickbooksSettings implements Castable
|
|||||||
public int $refreshTokenExpiresAt;
|
public int $refreshTokenExpiresAt;
|
||||||
|
|
||||||
public string $baseURL;
|
public string $baseURL;
|
||||||
/**
|
|
||||||
* entity client,invoice,quote,purchase_order,vendor,payment
|
public QuickbooksSync $settings;
|
||||||
* sync true/false
|
|
||||||
* update_record true/false
|
|
||||||
* direction push/pull/birectional
|
|
||||||
* */
|
|
||||||
public array $settings = [
|
|
||||||
'client' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'vendor' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'invoice' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'sales' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'quote' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'purchase_order' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'product' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'payment' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'vendor' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
'expense' => ['sync' => true, 'update_record' => true, 'direction' => 'bidirectional'],
|
|
||||||
];
|
|
||||||
|
|
||||||
|
public function __construct(array $attributes = [])
|
||||||
|
{
|
||||||
|
$this->accessTokenKey = $attributes['accessTokenKey'] ?? '';
|
||||||
|
$this->refresh_token = $attributes['refresh_token'] ?? '';
|
||||||
|
$this->realmID = $attributes['realmID'] ?? '';
|
||||||
|
$this->accessTokenExpiresAt = $attributes['accessTokenExpiresAt'] ?? 0;
|
||||||
|
$this->refreshTokenExpiresAt = $attributes['refreshTokenExpiresAt'] ?? 0;
|
||||||
|
$this->baseURL = $attributes['baseURL'] ?? '';
|
||||||
|
$this->settings = new QuickbooksSync($attributes['settings']);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the name of the caster class to use when casting from / to this cast target.
|
|
||||||
*
|
|
||||||
* @param array<string, mixed> $arguments
|
|
||||||
*/
|
|
||||||
public static function castUsing(array $arguments): string
|
public static function castUsing(array $arguments): string
|
||||||
{
|
{
|
||||||
return QuickbooksSettingsCast::class;
|
return QuickbooksSettingsCast::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function fromArray(array $data): self
|
||||||
|
{
|
||||||
|
return new self($data);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
49
app/DataMapper/QuickbooksSync.php
Normal file
49
app/DataMapper/QuickbooksSync.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\DataMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* QuickbooksSync.
|
||||||
|
*/
|
||||||
|
class QuickbooksSync
|
||||||
|
{
|
||||||
|
public QuickbooksSyncMap $client;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $vendor;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $invoice;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $sales;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $quote;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $purchase_order;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $product;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $payment;
|
||||||
|
|
||||||
|
public QuickbooksSyncMap $expense;
|
||||||
|
|
||||||
|
public function __construct(array $attributes = [])
|
||||||
|
{
|
||||||
|
$this->client = new QuickbooksSyncMap($attributes['client'] ?? []);
|
||||||
|
$this->vendor = new QuickbooksSyncMap($attributes['vendor'] ?? []);
|
||||||
|
$this->invoice = new QuickbooksSyncMap($attributes['invoice'] ?? []);
|
||||||
|
$this->sales = new QuickbooksSyncMap($attributes['sales'] ?? []);
|
||||||
|
$this->quote = new QuickbooksSyncMap($attributes['quote'] ?? []);
|
||||||
|
$this->purchase_order = new QuickbooksSyncMap($attributes['purchase_order'] ?? []);
|
||||||
|
$this->product = new QuickbooksSyncMap($attributes['product'] ?? []);
|
||||||
|
$this->payment = new QuickbooksSyncMap($attributes['payment'] ?? []);
|
||||||
|
$this->expense = new QuickbooksSyncMap($attributes['expense'] ?? []);
|
||||||
|
}
|
||||||
|
}
|
32
app/DataMapper/QuickbooksSyncMap.php
Normal file
32
app/DataMapper/QuickbooksSyncMap.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\DataMapper;
|
||||||
|
|
||||||
|
enum SyncDirection: string
|
||||||
|
{
|
||||||
|
case PUSH = 'push';
|
||||||
|
case PULL = 'pull';
|
||||||
|
case BIDIRECTIONAL = 'bidirectional';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* QuickbooksSyncMap.
|
||||||
|
*/
|
||||||
|
class QuickbooksSyncMap
|
||||||
|
{
|
||||||
|
public bool $sync = true;
|
||||||
|
|
||||||
|
public bool $update_record = true;
|
||||||
|
|
||||||
|
public SyncDirection $direction = SyncDirection::BIDIRECTIONAL;
|
||||||
|
}
|
||||||
|
|
@ -104,7 +104,7 @@ class QuickbooksSync implements ShouldQueue
|
|||||||
*/
|
*/
|
||||||
private function syncGate(string $entity, string $direction): bool
|
private function syncGate(string $entity, string $direction): bool
|
||||||
{
|
{
|
||||||
return (bool) $this->settings[$entity]['sync'] && in_array($this->settings[$entity]['direction'], [$direction,'bidirectional']);
|
return (bool) $this->settings->{$entity}->sync && in_array($this->settings->{$entity}->direction, [$direction,'bidirectional']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -115,7 +115,7 @@ class QuickbooksSync implements ShouldQueue
|
|||||||
*/
|
*/
|
||||||
private function updateGate(string $entity): bool
|
private function updateGate(string $entity): bool
|
||||||
{
|
{
|
||||||
return (bool) $this->settings[$entity]['sync'] && $this->settings[$entity]['update_record'];
|
return (bool) $this->settings->{$entity}->sync && $this->settings->{$entity}->update_record;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -222,7 +222,7 @@ class QuickbooksSync implements ShouldQueue
|
|||||||
|
|
||||||
return $invoice;
|
return $invoice;
|
||||||
} elseif($search->count() == 1) {
|
} elseif($search->count() == 1) {
|
||||||
return $this->settings['invoice']['update_record'] ? $search->first() : null;
|
return $this->settings->invoice->update_record ? $search->first() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -347,7 +347,7 @@ class QuickbooksSync implements ShouldQueue
|
|||||||
return ExpenseFactory::create($this->company->id, $this->company->owner()->id);
|
return ExpenseFactory::create($this->company->id, $this->company->owner()->id);
|
||||||
}
|
}
|
||||||
elseif($search->count() == 1) {
|
elseif($search->count() == 1) {
|
||||||
return $this->settings['expense']['update_record'] ? $search->first() : null;
|
return $this->settings->expense->update_record ? $search->first() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -377,7 +377,7 @@ class QuickbooksSync implements ShouldQueue
|
|||||||
return VendorFactory::create($this->company->id, $this->company->owner()->id);
|
return VendorFactory::create($this->company->id, $this->company->owner()->id);
|
||||||
}
|
}
|
||||||
elseif($search->count() == 1) {
|
elseif($search->count() == 1) {
|
||||||
return $this->settings['vendor']['update_record'] ? $search->first() : null;
|
return $this->settings->vendor->update_record ? $search->first() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -411,7 +411,7 @@ class QuickbooksSync implements ShouldQueue
|
|||||||
return $client;
|
return $client;
|
||||||
}
|
}
|
||||||
elseif($search->count() == 1) {
|
elseif($search->count() == 1) {
|
||||||
return $this->settings['client']['update_record'] ? $search->first() : null;
|
return $this->settings->client->update_record ? $search->first() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -66,7 +66,7 @@ class QbProduct
|
|||||||
return $product;
|
return $product;
|
||||||
|
|
||||||
} elseif($search->count() == 1) {
|
} elseif($search->count() == 1) {
|
||||||
return $this->service->settings['product']['update_record'] ? $search->first() : null;
|
return $this->service->settings->product->update_record ? $search->first() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user