diff --git a/app/Import/Transformer/Quickbooks/ClientTransformer.php b/app/Import/Transformer/Quickbooks/ClientTransformer.php new file mode 100644 index 000000000000..c70ced06e922 --- /dev/null +++ b/app/Import/Transformer/Quickbooks/ClientTransformer.php @@ -0,0 +1,91 @@ + 'CompanyName', + 'phone' => 'PrimaryPhone.FreeFormNumber', + 'country_id' => 'BillAddr.Country', + 'state' => 'BillAddr.CountrySubDivisionCode', + 'address1' => 'BillAddr.Line1', + 'city' => 'BillAddr.City', + 'postal_code' => 'BillAddr.PostalCode', + 'shipping_country_id' => 'ShipAddr.Country', + 'shipping_state' => 'ShipAddr.CountrySubDivisionCode', + 'shipping_address1' => 'ShipAddr.Line1', + 'shipping_city' => 'ShipAddr.City', + 'shipping_postal_code' => 'ShipAddr.PostalCode', + 'public_notes' => 'Notes' + ]; + + /** + * Transforms a Customer array into a ClientContact model. + * + * @param array $data + * @return array|bool + */ + public function transform($data) + { + $transformed_data = []; + // Assuming 'customer_name' is equivalent to 'CompanyName' + if (isset($data['CompanyName']) && $this->hasClient($data['CompanyName'])) { + 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 = (new Model)->fillable(array_keys($this->fillable))->fill($transformed_data)->toArray() + $this->getContacts($data, $field); + + return $transformed_data; + } + + public function getString($data, $field) + { + return Arr::get($data, $field); + } + + protected function getContacts($data, $field = null) { + return [ 'contacts' => [ + (new ClientContact())->fill([ + 'first_name' => $this->getString($data, 'GivenName'), + 'last_name' => $this->getString($data, 'FamilyName'), + 'phone' => $this->getString($data, 'PrimaryPhone.FreeFormNumber'), + 'email' => $this->getString($data, 'PrimaryEmailAddr.Address'), + ]) ] + ]; + } + + + public function getShipAddrCountry($data,$field) { + return is_null(($c = $this->getString($data,$field))) ? null : $this->getCountryId($c); + } + + public function getBillAddrCountry($data,$field) { + return is_null(($c = $this->getString($data,$field))) ? null : $this->getCountryId($c); + } + +} diff --git a/app/Import/Transformer/Quickbooks/InvoiceTransformer.php b/app/Import/Transformer/Quickbooks/InvoiceTransformer.php new file mode 100644 index 000000000000..30bcf80bed1b --- /dev/null +++ b/app/Import/Transformer/Quickbooks/InvoiceTransformer.php @@ -0,0 +1,103 @@ + "TotalAmt", + 'line_items' => "Line", + 'due_date' => "DueDate", + 'partial' => "Deposit", + 'balance' => "Balance", + 'comments' => "CustomerMemo", + 'number' => "DocNumber", + 'created_at' => "CreateTime", + 'updated_at' => "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 (new Model)->fillable(array_keys($this->fillable))->fill($transformed)->toArray(); + } + + public function getTotalAmt($data) + { + return (float) $this->getString($data,'TotalAmt'); + } + + public function getLine($data) + { + return array_map(function ($item) { + return [ + 'description' => $this->getString($item,'Description'), + 'quantity' => $this->getString($item,'SalesItemLineDetail.Qty'), + 'unit_price' =>$this->getString($item,'SalesItemLineDetail.UnitPrice'), + 'amount' => $this->getString($item,'Amount') + ]; + }, array_filter($this->getString($data,'Line'), function ($item) { + return $this->getString($item,'DetailType') === 'SalesItemLineDetail'; + })); + } + + public function getString($data,$field) { + return Arr::get($data,$field); + } + + public function getDueDate($data) + { + return $this->parseDateOrNull($data, 'DueDate'); + } + + public function getDeposit($data) + { + return (float) $this->getString($data,'Deposit'); + } + + public function getBalance($data) + { + return (float) $this->getString($data,'Balance'); + } + + public function getCustomerMemo($data) + { + return $this->getString($data,'CustomerMemo.value'); + } + + public function getCreateTime($data) + { + return $this->parseDateOrNull($this->getString($data,'MetaData.CreateTime')); + } + + public function getLastUpdatedTime($data) + { + return $this->parseDateOrNull($this->getString($data,'MetaData.LastUpdatedTime')); + } +}