private function transformRow($source, $entityType, $row)
{
$transformer = $this->getTransformer($source, $entityType, $this->maps);
// Create expesnse category
if ($entityType == ENTITY_EXPENSE) {
if (!empty($row->expense_category)) {
$categoryId = $transformer->getExpenseCategoryId($row->expense_category);
if (!$categoryId) {
$category = $this->expenseCategoryRepo->save(['name' => $row->expense_category]);
$this->addExpenseCategoryToMaps($category);
}
}
if (!empty($row->vendor)) {
$vendorId = $transformer->getVendorId($row->vendor);
if (!$vendorId) {
$vendor = $this->vendorRepo->save(['name' => $row->vendor, 'vendor_contact' => []]);
$this->addVendorToMaps($vendor);
}
}
}
$resource = $transformer->transform($row);
if (!$resource) {
return false;
}
$data = $this->fractal->createData($resource)->toArray();
// if the invoice number is blank we'll assign it
if ($entityType == ENTITY_INVOICE && !$data['invoice_number']) {
$account = Auth::user()->account;
$invoice = Invoice::createNew();
$data['invoice_number'] = $account->getNextInvoiceNumber($invoice);
}
if (EntityModel::validate($data, $entityType) !== true) {
return false;
}
if ($entityType == ENTITY_INVOICE) {
if (empty($this->processedRows[$data['invoice_number']])) {
$this->processedRows[$data['invoice_number']] = $data;
} else {
// Merge invoice items
$this->processedRows[$data['invoice_number']]['invoice_items'] = array_merge($this->processedRows[$data['invoice_number']]['invoice_items'], $data['invoice_items']);
return true;
}
} else {
$this->processedRows[] = $data;
}
end($this->processedRows);
return key($this->processedRows);
}