1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-22 09:21:34 +02:00
invoiceninja/app/Import/Transformers/BaseTransformer.php

431 lines
9.0 KiB
PHP
Raw Normal View History

2020-12-16 11:06:20 +01:00
<?php
/**
2021-02-18 00:51:56 +01:00
* Invoice Ninja (https://invoiceninja.com).
*
2021-02-18 00:51:56 +01:00
* @link https://github.com/invoiceninja/invoiceninja source repository
*
2022-04-27 05:20:41 +02:00
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
*
2021-06-16 08:58:16 +02:00
* @license https://www.elastic.co/licensing/elastic-license
*/
2020-12-16 11:06:20 +01:00
namespace App\Import\Transformers;
2020-12-19 05:11:15 +01:00
use App\Models\ClientContact;
2020-12-20 10:02:10 +01:00
use App\Utils\Number;
2020-12-16 11:06:20 +01:00
use Carbon;
use Exception;
/**
* Class BaseTransformer.
*/
2020-12-16 12:52:40 +01:00
class BaseTransformer
2020-12-16 11:06:20 +01:00
{
/**
* @var
*/
protected $maps;
/**
* BaseTransformer constructor.
*
* @param $maps
*/
public function __construct($maps)
{
$this->maps = $maps;
}
/**
* @param $data
* @param $field
*
* @return string
*/
public function getString($data, $field)
{
return (isset($data[$field]) && $data[$field]) ? $data[$field] : '';
}
2020-12-19 08:28:58 +01:00
public function getInvoiceTypeId($data, $field)
{
2020-12-21 11:46:46 +01:00
return (isset($data[$field]) && $data[$field]) ? $data[$field] : '1';
2020-12-19 08:28:58 +01:00
}
public function getCurrencyByCode($data, $key = 'client.currency_id')
{
$code = array_key_exists($key, $data) ? $data[$key] : false;
2020-12-16 11:06:20 +01:00
return $this->maps['currencies'][$code] ?? $this->maps['company']->settings->currency_id;
}
2020-12-19 04:49:15 +01:00
public function getClient($client_name, $client_email)
{
$clients = $this->maps['company']->clients;
2020-12-16 11:06:20 +01:00
$client_id_search = $clients->where('id_number', $client_name);
2020-12-16 11:06:20 +01:00
if ($client_id_search->count() >= 1) {
return $client_id_search->first()->id;
}
2020-12-19 04:49:15 +01:00
$client_name_search = $clients->where('name', $client_name);
2021-12-04 01:16:44 +01:00
if ($client_name_search->count() >= 1) {
2021-12-04 01:16:44 +01:00
return $client_name_search->first()->id;
}
if (! empty($client_email)) {
$contacts = ClientContact::where('company_id', $this->maps['company']->id)
->where('email', $client_email);
2020-12-19 04:49:15 +01:00
if ($contacts->count() >= 1) {
return $contacts->first()->client_id;
}
}
2020-12-19 04:49:15 +01:00
return null;
}
2020-12-19 04:49:15 +01:00
2020-12-21 11:46:46 +01:00
///////////////////////////////////////////////////////////////////////////////////
2020-12-16 11:06:20 +01:00
/**
* @param $name
*
* @return bool
*/
public function hasClient($name)
{
$name = trim(strtolower($name));
return isset($this->maps['client'][$name]);
2020-12-16 11:06:20 +01:00
}
/**
* @param $name
*
* @return bool
*/
public function hasVendor($name)
{
$name = trim(strtolower($name));
return isset($this->maps['vendor'][$name]);
2020-12-16 11:06:20 +01:00
}
/**
* @param $key
*
* @return bool
*/
public function hasProduct($key)
{
$key = trim(strtolower($key));
return isset($this->maps['product'][$key]);
2020-12-16 11:06:20 +01:00
}
/**
* @param $data
* @param $field
*
* @return int
*/
public function getNumber($data, $field)
{
return (isset($data->$field) && $data->$field) ? $data->$field : 0;
}
/**
* @param $data
* @param $field
*
* @return float
*/
public function getFloat($data, $field)
2020-12-21 11:46:46 +01:00
{
if (array_key_exists($field, $data)) {
2020-12-20 10:02:10 +01:00
$number = preg_replace('/[^0-9-.]+/', '', $data[$field]);
2020-12-21 11:46:46 +01:00
} else {
2020-12-20 10:02:10 +01:00
$number = 0;
2020-12-21 11:46:46 +01:00
}
2020-12-20 10:02:10 +01:00
2021-08-29 23:53:51 +02:00
return Number::parseFloat($number);
2020-12-16 11:06:20 +01:00
}
public function getFloatWithSamePrecision($data, $field)
{
$precision = (int) strpos(strrev($data[$field]), ".");
return round($data[$field], $precision);
}
2020-12-16 11:06:20 +01:00
/**
* @param $name
*
* @return null
*/
public function getClientId($name)
{
$name = strtolower(trim($name));
return isset($this->maps['client'][$name]) ? $this->maps['client'][$name] : null;
2020-12-16 11:06:20 +01:00
}
/**
* @param $name
*
* @return null
*/
public function getProduct($data, $key, $field, $default = false)
{
$productKey = trim(strtolower($data->$key));
if (! isset($this->maps['product'][$productKey])) {
return $default;
}
$product = $this->maps['product'][$productKey];
return $product->$field ?: $default;
}
/**
* @param $name
*
* @return null
*/
public function getContact($email)
{
$email = trim(strtolower($email));
if (! isset($this->maps['contact'][$email])) {
return false;
}
return $this->maps['contact'][$email];
}
/**
* @param $name
*
* @return null
*/
public function getCustomer($key)
{
$key = trim($key);
if (! isset($this->maps['customer'][$key])) {
return false;
}
return $this->maps['customer'][$key];
}
/**
* @param $name
*
* @return null
*/
public function getCountryId($name)
{
$name = strtolower(trim($name));
if (strlen($name) == 2) {
2021-11-12 09:16:32 +01:00
return $this->getCountryIdBy2($name);
}
2020-12-16 11:06:20 +01:00
return isset($this->maps['countries'][$name]) ? $this->maps['countries'][$name] : null;
}
/**
* @param $name
*
* @return null
*/
public function getCountryIdBy2($name)
{
$name = strtolower(trim($name));
return isset($this->maps['countries2'][$name]) ? $this->maps['countries2'][$name] : null;
}
/**
* @param $name
*
* @return null
*/
public function getTaxRate($name)
{
$name = strtolower(trim($name));
return isset($this->maps['tax_rates'][$name]) ? $this->maps['tax_rates'][$name] : 0;
}
/**
* @param $name
*
* @return null
*/
public function getTaxName($name)
{
$name = strtolower(trim($name));
return isset($this->maps['tax_names'][$name]) ? $this->maps['tax_names'][$name] : '';
}
/**
* @param $name
*
* @return mixed
*/
public function getFirstName($name)
{
$name = Utils::splitName($name);
return $name[0];
}
/**
* @param $date
* @param string $format
* @param mixed $data
* @param mixed $field
*
* @return null
*/
public function getDate($data, $field)
{
if ($date = data_get($data, $field)) {
try {
$date = new Carbon($date);
} catch (Exception $e) {
// if we fail to parse return blank
$date = false;
}
}
return $date ? $date->format('Y-m-d') : null;
}
/**
* @param $name
*
* @return mixed
*/
public function getLastName($name)
{
$name = Utils::splitName($name);
return $name[1];
}
/**
* @param $number
*
* @return string
*/
public function getInvoiceNumber($number)
{
return $number ? ltrim(trim($number), '0') : null;
2020-12-16 11:06:20 +01:00
}
/**
* @param $invoiceNumber
*
* @return null
*/
public function getInvoiceId($invoiceNumber)
{
$invoiceNumber = $this->getInvoiceNumber($invoiceNumber);
$invoiceNumber = strtolower($invoiceNumber);
return isset($this->maps['invoice'][$invoiceNumber]) ? $this->maps['invoice'][$invoiceNumber] : null;
2020-12-16 11:06:20 +01:00
}
/**
* @param $invoiceNumber
*
* @return null
*/
public function getInvoicePublicId($invoiceNumber)
{
$invoiceNumber = $this->getInvoiceNumber($invoiceNumber);
$invoiceNumber = strtolower($invoiceNumber);
return isset($this->maps['invoice'][$invoiceNumber]) ? $this->maps['invoices'][$invoiceNumber]->public_id : null;
2020-12-16 11:06:20 +01:00
}
/**
* @param $invoiceNumber
*
* @return bool
*/
public function hasInvoice($invoiceNumber)
{
$invoiceNumber = $this->getInvoiceNumber($invoiceNumber);
$invoiceNumber = strtolower($invoiceNumber);
return $this->maps['invoice'][$invoiceNumber] ?? null;
2020-12-16 11:06:20 +01:00
}
/**
* @param $invoiceNumber
*
* @return null
*/
public function getInvoiceClientId($invoiceNumber)
{
$invoiceNumber = $this->getInvoiceNumber($invoiceNumber);
$invoiceNumber = strtolower($invoiceNumber);
return $this->maps['invoice_client'][$invoiceNumber] ?? null;
2020-12-16 11:06:20 +01:00
}
/**
* @param $name
*
* @return null
*/
public function getVendorId($name)
{
$name = strtolower(trim($name));
return $this->maps['vendor'][$name] ?? null;
}
/**
* @param $name
*
* @return null
*/
public function getExpenseCategoryId($name)
{
$name = strtolower(trim($name));
return $this->maps['expense_category'][$name] ?? null;
}
/**
* @param $name
*
* @return null
*/
public function getProjectId($name)
{
$name = strtolower(trim($name));
return $this->maps['project'][$name] ?? null;
2020-12-16 11:06:20 +01:00
}
/**
* @param $name
*
* @return null
*/
public function getPaymentTypeId($name)
{
$name = strtolower(trim($name));
return $this->maps['payment_type'][$name] ?? null;
}
2020-12-16 11:06:20 +01:00
}