From 73e596d29c8abcfccee9c50ed2776880113b9a25 Mon Sep 17 00:00:00 2001 From: karneaud Date: Sat, 17 Aug 2024 11:24:53 -0400 Subject: [PATCH] group common methods into trait --- .../Quickbooks/ClientTransformer.php | 29 +++++---- .../Transformer/Quickbooks/CommonTrait.php | 36 ++++++++++ .../Quickbooks/InvoiceTransformer.php | 65 ++++++++++++------- .../Quickbooks/ProductTransformer.php | 47 +++----------- 4 files changed, 105 insertions(+), 72 deletions(-) create mode 100644 app/Import/Transformer/Quickbooks/CommonTrait.php diff --git a/app/Import/Transformer/Quickbooks/ClientTransformer.php b/app/Import/Transformer/Quickbooks/ClientTransformer.php index 313476307847..8cfbd94befe7 100644 --- a/app/Import/Transformer/Quickbooks/ClientTransformer.php +++ b/app/Import/Transformer/Quickbooks/ClientTransformer.php @@ -12,18 +12,23 @@ namespace App\Import\Transformer\Quickbooks; +use App\Import\Transformer\Quickbooks\CommonTrait; use App\Import\Transformer\BaseTransformer; use App\Models\Client as Model; use App\Models\ClientContact; use App\Import\ImportException; use Illuminate\Support\Str; -use Illuminate\Support\Arr; /** * Class ClientTransformer. */ class ClientTransformer extends BaseTransformer { + + use CommonTrait { + transform as preTransform; + } + private $fillable = [ 'name' => 'CompanyName', 'phone' => 'PrimaryPhone.FreeFormNumber', @@ -40,6 +45,14 @@ class ClientTransformer extends BaseTransformer 'public_notes' => 'Notes' ]; + public function __construct($company) + { + parent::__construct($company); + + $this->model = new Model; + } + + /** * Transforms a Customer array into a ClientContact model. * @@ -54,18 +67,10 @@ class ClientTransformer extends BaseTransformer return false; } - foreach($this->fillable as $key => $field) { - $transformed_data[$key] = method_exists($this, $method = sprintf("get%s", str_replace(".","",$field)) )? call_user_func([$this, $method],$data,$field) : $this->getString($data, $field); - } + $transformed_data = $this->preTransform($data); + $transformed_data['contacts'][0] = $this->getContacts($data)->toArray()+['company_id' => $this->company->id ]; - $transformed_data = (new Model)->fillable(array_keys($this->fillable))->fill($transformed_data); - $transformed_data->contacts[0] = $this->getContacts($data)->toArray()+['company_id' => $this->company->id ]; - return $transformed_data->toArray() + ['company_id' => $this->company->id ] ; - } - - public function getString($data, $field) - { - return Arr::get($data, $field); + return $transformed_data; } protected function getContacts($data) { diff --git a/app/Import/Transformer/Quickbooks/CommonTrait.php b/app/Import/Transformer/Quickbooks/CommonTrait.php new file mode 100644 index 000000000000..d618f94120ed --- /dev/null +++ b/app/Import/Transformer/Quickbooks/CommonTrait.php @@ -0,0 +1,36 @@ +parseDateOrNull($data, 'MetaData.CreateTime'); + } + + public function getLastUpdatedTime($data, $field = null) + { + return $this->parseDateOrNull($data,'MetaData.LastUpdatedTime'); + } + + public function transform($data) + { + $transformed = []; + + foreach ($this->fillable as $key => $field) { + $transformed[$key] = is_null((($v = $this->getString($data, $field))))? null : (method_exists($this, ($method = "get{$field}")) ? call_user_func([$this, $method], $data, $field ) : $this->getString($data,$field)); + } + + return $this->model->fillable(array_keys($this->fillable))->fill($transformed)->toArray() + ['company_id' => $this->company->id ] ; + } + +} \ No newline at end of file diff --git a/app/Import/Transformer/Quickbooks/InvoiceTransformer.php b/app/Import/Transformer/Quickbooks/InvoiceTransformer.php index 0d801f95344a..fe2f998c1c4a 100644 --- a/app/Import/Transformer/Quickbooks/InvoiceTransformer.php +++ b/app/Import/Transformer/Quickbooks/InvoiceTransformer.php @@ -17,6 +17,7 @@ use App\Import\ImportException; use App\DataMapper\InvoiceItem; use App\Models\Invoice as Model; use App\Import\Transformer\BaseTransformer; +use App\Import\Transformer\Quickbooks\CommonTrait; use App\Import\Transformer\Quickbooks\ClientTransformer; /** @@ -24,7 +25,9 @@ use App\Import\Transformer\Quickbooks\ClientTransformer; */ class InvoiceTransformer extends BaseTransformer { - + use CommonTrait { + transform as preTransform; + } private $fillable = [ 'amount' => "TotalAmt", @@ -32,21 +35,30 @@ class InvoiceTransformer extends BaseTransformer 'due_date' => "DueDate", 'partial' => "Deposit", 'balance' => "Balance", - 'comments' => "CustomerMemo", + 'private_notes' => "CustomerMemo", + 'public_notes' => "CustomerMemo", 'number' => "DocNumber", 'created_at' => "CreateTime", - 'updated_at' => "LastUpdatedTime" + 'updated_at' => "LastUpdatedTime", + 'payments' => 'LinkedTxn', + 'status_id' => 'InvoiceStatus', ]; + public function __construct($company) + { + parent::__construct($company); + + $this->model = new Model; + } + + public function getInvoiceStatus($data) + { + return Invoice::STATUS_SENT; + } + public function transform($data) { - $transformed = []; - - foreach ($this->fillable as $key => $field) { - $transformed[$key] = is_null((($v = $this->getString($data, $field))))? null : (method_exists($this, ($method = "get{$field}")) ? call_user_func([$this, $method], $data, $field ) : $this->getString($data,$field)); - } - - return (new Model)->fillable(array_keys($this->fillable))->fill($transformed)->toArray() + $this->getInvoiceClient($data); + return $this->preTransform($data) + $this->getInvoiceClient($data); } public function getTotalAmt($data) @@ -61,8 +73,11 @@ class InvoiceTransformer extends BaseTransformer 'description' => $this->getString($item,'Description'), 'product_key' => $this->getString($item,'Description'), 'quantity' => (int) $this->getString($item,'SalesItemLineDetail.Qty'), - 'unit_price' =>(float) $this->getString($item,'SalesItemLineDetail.UnitPrice'), - 'amount' => (float) $this->getString($item,'Amount') + 'unit_price' =>(double) $this->getString($item,'SalesItemLineDetail.UnitPrice'), + 'line_total' => (double) $this->getString($item,'Amount'), + 'cost' =>(double) $this->getString($item,'SalesItemLineDetail.UnitPrice'), + 'product_cost' => (double) $this->getString($item,'SalesItemLineDetail.UnitPrice'), + 'tax_amount' => (double) $this->getString($item,'TxnTaxDetail.TotalTax'), ]; }, array_filter($this->getString($data,'Line'), function ($item) { return $this->getString($item,'DetailType') !== 'SubTotalLineDetail'; @@ -139,10 +154,6 @@ class InvoiceTransformer extends BaseTransformer return ['client'=> (new ClientTransformer($this->company))->transform($client), 'client_id'=> $client_id ]; } - public function getString($data,$field) { - return Arr::get($data,$field); - } - public function getDueDate($data) { return $this->parseDateOrNull($data, 'DueDate'); @@ -150,12 +161,12 @@ class InvoiceTransformer extends BaseTransformer public function getDeposit($data) { - return (float) $this->getString($data,'Deposit'); + return (double) $this->getString($data,'Deposit'); } public function getBalance($data) { - return (float) $this->getString($data,'Balance'); + return (double) $this->getString($data,'Balance'); } public function getCustomerMemo($data) @@ -163,13 +174,23 @@ class InvoiceTransformer extends BaseTransformer return $this->getString($data,'CustomerMemo.value'); } - public function getCreateTime($data) + public function getDocNumber($data, $field = null) { - return $this->parseDateOrNull($data['MetaData'], 'CreateTime'); + return sprintf("%s-%s", + $this->getString($data, 'DocNumber'), + $this->getString($data, 'Id.value') + ); } - public function getLastUpdatedTime($data) + public function getLinkedTxn($data) { - return $this->parseDateOrNull($data['MetaData'],'LastUpdatedTime'); + $payments = $this->getString($data,'LinkedTxn'); + if(empty($payments)) return []; + + return [[ + 'amount' => $this->getTotalAmt($data), + 'date' => $this->parseDateOrNull($data, 'TxnDate') + ]]; + } } diff --git a/app/Import/Transformer/Quickbooks/ProductTransformer.php b/app/Import/Transformer/Quickbooks/ProductTransformer.php index f86a49eca1ed..af7b9342ab91 100644 --- a/app/Import/Transformer/Quickbooks/ProductTransformer.php +++ b/app/Import/Transformer/Quickbooks/ProductTransformer.php @@ -12,11 +12,10 @@ namespace App\Import\Transformer\Quickbooks; +use App\Import\Transformer\Quickbooks\CommonTrait; use App\Import\Transformer\BaseTransformer; use App\Models\Product as Model; use App\Import\ImportException; -use Illuminate\Support\Str; -use Illuminate\Support\Arr; /** * Class ProductTransformer. @@ -24,6 +23,8 @@ use Illuminate\Support\Arr; class ProductTransformer extends BaseTransformer { + use CommonTrait; + protected $fillable = [ 'product_key' => 'Name', 'notes' => 'Description', @@ -34,33 +35,13 @@ class ProductTransformer extends BaseTransformer 'created_at' => 'CreateTime', 'updated_at' => 'LastUpdatedTime', ]; - /** - * Transforms the JSON data into a ProductModel object. - * - * @param array $data - * @return ProductModel - */ - /** - * Transforms a Customer array into a Product model. - * - * @param array $data - * @return array|bool - */ - public function transform($data) - { - $transformed_data = []; - foreach($this->fillable as $key => $field) { - $transformed_data[$key] = method_exists($this, $method = sprintf("get%s", str_replace(".","",$field)) )? call_user_func([$this, $method],$data,$field) : $this->getString($data, $field); - } - - $transformed_data = (new Model)->fillable(array_keys($this->fillable))->fill($transformed_data); - - return $transformed_data->toArray() + ['company_id' => $this->company->id ] ; - } - public function getString($data, $field) + + public function __construct($company) { - return Arr::get($data, $field); + parent::__construct($company); + + $this->model = new Model; } public function getQtyOnHand($data, $field = null) { @@ -68,21 +49,11 @@ class ProductTransformer extends BaseTransformer } public function getPurchaseCost($data, $field = null) { - return (float) $this->getString($data, $field); + return (double) $this->getString($data, $field); } public function getUnitPrice($data, $field = null) { return (float) $this->getString($data, $field); } - - public function getCreateTime($data, $field = null) - { - return $this->parseDateOrNull($data['MetaData'], 'CreateTime'); - } - - public function getLastUpdatedTime($data, $field = null) - { - return $this->parseDateOrNull($data['MetaData'],'LastUpdatedTime'); - } }