hasInvoice($invoice_data['Invoice Number'])) { throw new ImportException('Invoice number already exists'); } $invoiceStatusMap = [ 'sent' => Invoice::STATUS_SENT, 'draft' => Invoice::STATUS_DRAFT, ]; $transformed = [ 'company_id' => $this->company->id, 'client_id' => $this->getClient($this->getString($invoice_data, 'Customer ID'), null), 'number' => $this->getString($invoice_data, 'Invoice Number'), 'date' => isset($invoice_data['Invoice Date']) ? date('Y-m-d', strtotime($invoice_data['Invoice Date'])) : null, 'due_date' => isset($invoice_data['Due Date']) ? date('Y-m-d', strtotime($invoice_data['Due Date'])) : null, 'po_number' => $this->getString($invoice_data, 'PurchaseOrder'), 'public_notes' => $this->getString($invoice_data, 'Notes'), 'currency_id' => $this->getCurrencyByCode($invoice_data, 'Currency'), 'amount' => $this->getFloat($invoice_data, 'Total'), 'balance' => $this->getFloat($invoice_data, 'Balance'), 'status_id' => $invoiceStatusMap[$status = strtolower($this->getString($invoice_data, 'Invoice Status'))] ?? Invoice::STATUS_SENT, // 'viewed' => $status === 'viewed', ]; $line_items = []; foreach ($line_items_data as $record) { $line_items[] = [ 'product_key' => $this->getString($record, 'Item Name'), 'notes' => $this->getString($record, 'Item Description'), 'cost' => round($this->getFloat($record, 'Item Price'), 2), 'quantity' => $this->getFloat($record, 'Quantity'), 'discount' => $this->getString($record, 'Discount Amount'), 'is_amount_discount' => true, ]; } $transformed['line_items'] = $line_items; if ($transformed['balance'] < $transformed['amount']) { $transformed['payments'] = [[ 'date' => isset($invoice_data['Last Payment Date']) ? date('Y-m-d', strtotime($invoice_data['Invoice Date'])) : date('Y-m-d'), 'amount' => $transformed['amount'] - $transformed['balance'], ]]; } return $transformed; } }