hasInvoice($invoice_data['DocumentNumber'])) { throw new ImportException('Invoice number already exists'); } $invoiceStatusMap = [ 'unsent' => Invoice::STATUS_DRAFT, 'sent' => Invoice::STATUS_SENT, ]; $transformed = [ 'company_id' => $this->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' => $this->getFloat($invoice_data, 'TotalAmount'), 'status_id' => $invoiceStatusMap[$status = strtolower($this->getString($invoice_data, 'DocumentStatus'))] ?? Invoice::STATUS_SENT, // 'viewed' => $status === 'viewed', 'line_items' => [ [ 'cost' => $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 { $settings = new \stdClass; $settings->currency_id = $this->getCurrencyByCode($invoice_data, 'Currency'); $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' => $settings, 'client_hash' => Str::random(40), 'contacts' => [ [ 'email' => $this->getString($invoice_data, 'EmailRecipient'), ], ], ]; } 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; } }