mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 19:07:32 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * client Ninja (https://clientninja.com).
 | |
|  *
 | |
|  * @link https://github.com/clientninja/clientninja source repository
 | |
|  *
 | |
|  * @copyright Copyright (c) 2021. client Ninja LLC (https://clientninja.com)
 | |
|  *
 | |
|  * @license https://opensource.org/licenses/AAL
 | |
|  */
 | |
| 
 | |
| namespace App\Import\Transformers\Invoice2Go;
 | |
| 
 | |
| use App\Import\ImportException;
 | |
| use App\Import\Transformers\BaseTransformer;
 | |
| use App\Models\Invoice;
 | |
| use Illuminate\Support\Str;
 | |
| 
 | |
| /**
 | |
|  * Class InvoiceTransformer.
 | |
|  */
 | |
| class InvoiceTransformer extends BaseTransformer {
 | |
| 	/**
 | |
| 	 * @param $line_items_data
 | |
| 	 *
 | |
| 	 * @return bool|array
 | |
| 	 */
 | |
| 	public function transform( $invoice_data ) {
 | |
| 		if ( $this->hasInvoice( $invoice_data['DocumentNumber'] ) ) {
 | |
| 			throw new ImportException( 'Invoice number already exists' );
 | |
| 		}
 | |
| 
 | |
| 		$invoiceStatusMap = [
 | |
| 			'unsent' => Invoice::STATUS_DRAFT,
 | |
| 			'sent'   => Invoice::STATUS_SENT,
 | |
| 		];
 | |
| 
 | |
| 		$transformed = [
 | |
| 			'company_id'  => $this->maps['company']->id,
 | |
| 			'number'      => $this->getString( $invoice_data, 'DocumentNumber' ),
 | |
| 			'notes'       => $this->getString( $invoice_data, 'Comment' ),
 | |
| 			'date'        => isset( $invoice_data['DocumentDate'] ) ? date( 'Y-m-d', strtotime( $invoice_data['DocumentDate'] ) ) : null,
 | |
| 			'currency_id' => $this->getCurrencyByCode( $invoice_data, 'Currency' ),
 | |
| 			'amount'      => 0,
 | |
| 			'status_id'   => $invoiceStatusMap[ $status =
 | |
| 					strtolower( $this->getString( $invoice_data, 'DocumentStatus' ) ) ] ?? Invoice::STATUS_SENT,
 | |
| 			'viewed'      => $status === 'viewed',
 | |
| 			'line_items'  => [
 | |
| 				[
 | |
| 					'amount'             => $amount = $this->getFloat( $invoice_data, 'TotalAmount' ),
 | |
| 					'quantity'           => 1,
 | |
| 					'discount'           => $this->getFloat( $invoice_data, 'DiscountValue' ),
 | |
| 					'is_amount_discount' => false,
 | |
| 				],
 | |
| 			],
 | |
| 		];
 | |
| 
 | |
| 		$client_id =
 | |
| 			$this->getClient( $this->getString( $invoice_data, 'Name' ), $this->getString( $invoice_data, 'EmailRecipient' ) );
 | |
| 
 | |
| 		if ( $client_id ) {
 | |
| 			$transformed['client_id'] = $client_id;
 | |
| 		} else {
 | |
| 			$transformed['client'] = [
 | |
| 				'name'              => $this->getString( $invoice_data, 'Name' ),
 | |
| 				'address1'          => $this->getString( $invoice_data, 'DocumentRecipientAddress' ),
 | |
| 				'shipping_address1' => $this->getString( $invoice_data, 'ShipAddress' ),
 | |
| 				'credit_balance'    => 0,
 | |
| 				'settings'          => new \stdClass,
 | |
| 				'client_hash'       => Str::random( 40 ),
 | |
| 				'contacts'          => [
 | |
| 					[
 | |
| 						'email' => $this->getString( $invoice_data, 'Email' ),
 | |
| 					],
 | |
| 				],
 | |
| 			];
 | |
| 		}
 | |
| 		if ( ! empty( $invoice_data['Date Paid'] ) ) {
 | |
| 			$transformed['payments'] = [
 | |
| 				[
 | |
| 					'date'   => date( 'Y-m-d', strtotime( $invoice_data['DatePaid'] ) ),
 | |
| 					'amount' => $this->getFloat( $invoice_data, 'Payments' ),
 | |
| 				],
 | |
| 			];
 | |
| 		}
 | |
| 
 | |
| 		return $transformed;
 | |
| 	}
 | |
| }
 |