mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 10:27:33 -04:00 
			
		
		
		
	Shift automatically applies the Laravel coding style - which uses the PSR-2 coding style as a base with some minor additions. You may customize the code style applied by adding a [PHP CS Fixer][1] or [PHP CodeSniffer][2] ruleset to your project root. Feel free to use [Shift's Laravel ruleset][3] to help you get started. For more information on customizing the code style applied by Shift, [watch this short video][4]. [1]: https://github.com/FriendsOfPHP/PHP-CS-Fixer [2]: https://github.com/squizlabs/PHP_CodeSniffer [3]: https://gist.github.com/laravel-shift/cab527923ed2a109dda047b97d53c200 [4]: https://laravelshift.com/videos/shift-code-style
		
			
				
	
	
		
			119 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Invoice Ninja (https://invoiceninja.com).
 | |
|  *
 | |
|  * @link https://github.com/clientninja/clientninja source repository
 | |
|  *
 | |
|  * @copyright Copyright (c) 2022. Invoice Ninja LLC (https://clientninja.com)
 | |
|  *
 | |
|  * @license https://www.elastic.co/licensing/elastic-license
 | |
|  */
 | |
| 
 | |
| namespace App\Import\Transformer\Wave;
 | |
| 
 | |
| use App\Import\ImportException;
 | |
| use App\Import\Transformer\BaseTransformer;
 | |
| use App\Models\Invoice;
 | |
| 
 | |
| /**
 | |
|  * Class InvoiceTransformer.
 | |
|  */
 | |
| class InvoiceTransformer extends BaseTransformer
 | |
| {
 | |
|     /**
 | |
|      * @param $line_items_data
 | |
|      *
 | |
|      * @return bool|array
 | |
|      */
 | |
|     public function transform($line_items_data)
 | |
|     {
 | |
|         $invoice_data = reset($line_items_data);
 | |
| 
 | |
|         if ($this->hasInvoice($invoice_data['Invoice Number'])) {
 | |
|             throw new ImportException('Invoice number already exists');
 | |
|         }
 | |
| 
 | |
|         if (array_key_exists('Invoice Date', $invoice_data)) {
 | |
|             $date_key = 'Invoice Date';
 | |
|         } else {
 | |
|             $date_key = 'Transaction Date';
 | |
|         }
 | |
| 
 | |
|         if (array_key_exists('Customer Name', $invoice_data)) {
 | |
|             $customer_key = 'Customer Name';
 | |
|         } else {
 | |
|             $customer_key = 'Customer';
 | |
|         }
 | |
| 
 | |
|         $transformed = [
 | |
|             'company_id'  => $this->company->id,
 | |
|             'client_id'   => $this->getClient($customer_name = $this->getString($invoice_data, $customer_key), null),
 | |
|             'number'      => $invoice_number = $this->getString($invoice_data, 'Invoice Number'),
 | |
|             'date'        => date('Y-m-d', strtotime($invoice_data[$date_key])) ?: now()->format('Y-m-d'), //27-01-2022
 | |
|             'currency_id' => $this->getCurrencyByCode($invoice_data, 'Currency'),
 | |
|             'status_id'   => Invoice::STATUS_SENT,
 | |
|             'due_date'	  => array_key_exists('Due Date', $invoice_data) ? date('Y-m-d', strtotime($invoice_data['Due Date'])) : null,
 | |
|         ];
 | |
| 
 | |
|         $line_items = [];
 | |
|         $payments = [];
 | |
|         foreach ($line_items_data as $record) {
 | |
|             if (array_key_exists('Account Type', $record) && $record['Account Type'] === 'Income') {
 | |
|                 $description = $this->getString($record, 'Transaction Line Description');
 | |
| 
 | |
|                 // Remove duplicate data from description
 | |
|                 if (substr($description, 0, strlen($customer_name) + 3) === $customer_name.' - ') {
 | |
|                     $description = substr($description, strlen($customer_name) + 3);
 | |
|                 }
 | |
| 
 | |
|                 if (substr($description, 0, strlen($invoice_number) + 3) === $invoice_number.' - ') {
 | |
|                     $description = substr($description, strlen($invoice_number) + 3);
 | |
|                 }
 | |
| 
 | |
|                 $line_items[] = [
 | |
|                     'notes'     => $description,
 | |
|                     'cost'      => $this->getFloat($record, 'Amount Before Sales Tax'),
 | |
|                     'tax_name1' => $this->getString($record, 'Sales Tax Name'),
 | |
|                     'tax_rate1' => $this->getFloat($record, 'Sales Tax Amount'),
 | |
| 
 | |
|                     'quantity' => 1,
 | |
|                 ];
 | |
|             } elseif (array_key_exists('Account Type', $record) && $record['Account Type'] === 'System Receivable Invoice') {
 | |
|                 // This is a payment
 | |
|                 $payments[] = [
 | |
|                     'date'   => date('Y-m-d', strtotime($invoice_data[$date_key])),
 | |
|                     'amount' => $this->getFloat($record, 'Amount (One column)'),
 | |
|                 ];
 | |
|             } else {
 | |
|                 //could be a generate invoices.csv file
 | |
| 
 | |
|                 $calculated_tax_rate = 0;
 | |
| 
 | |
|                 if ($this->getFloat($record, 'Invoice Tax Total') != 0 && $this->getFloat($record, 'Invoice Total') != 0) {
 | |
|                     $calculated_tax_rate = round($this->getFloat($record, 'Invoice Tax Total') / $this->getFloat($record, 'Invoice Total') * 100, 2);
 | |
|                 }
 | |
| 
 | |
|                 $line_items[] = [
 | |
|                     'notes'     => 'Imported Invoice',
 | |
|                     'cost'      => $this->getFloat($record, 'Invoice Total'),
 | |
|                     'tax_name1' => 'Tax',
 | |
|                     'tax_rate1' => $calculated_tax_rate,
 | |
|                     'quantity' => 1,
 | |
|                 ];
 | |
| 
 | |
|                 if (array_key_exists('Invoice Paid', $record) && $record['Invoice Paid'] > 0) {
 | |
|                     $payments[] = [
 | |
|                         'date'   => date('Y-m-d', strtotime($record['Last Payment Date'])),
 | |
|                         'amount' => $this->getFloat($record, 'Invoice Paid'),
 | |
|                     ];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $transformed['line_items'] = $line_items;
 | |
|         $transformed['payments'] = $payments;
 | |
| 
 | |
|         return $transformed;
 | |
|     }
 | |
| }
 |