{$entity}(); } //collate any errors $this->finalizeImport(); } public function client() { $entity_type = 'client'; $data = $this->getCsvData($entity_type); $data = $this->preTransform($data, $entity_type); if (empty($data)) { $this->entity_count['clients'] = 0; return; } $this->request_name = StoreClientRequest::class; $this->repository_name = ClientRepository::class; $this->factory_name = ClientFactory::class; $this->repository = app()->make($this->repository_name); $this->repository->import_mode = true; $this->transformer = new ClientTransformer($this->company); $client_count = $this->ingest($data, $entity_type); $this->entity_count['clients'] = $client_count; } public function product() { $entity_type = 'product'; $data = $this->getCsvData($entity_type); $data = $this->preTransform($data, $entity_type); if (empty($data)) { $this->entity_count['products'] = 0; return; } $this->request_name = StoreProductRequest::class; $this->repository_name = ProductRepository::class; $this->factory_name = ProductFactory::class; $this->repository = app()->make($this->repository_name); $this->repository->import_mode = true; $this->transformer = new ProductTransformer($this->company); $product_count = $this->ingest($data, $entity_type); $this->entity_count['products'] = $product_count; } public function invoice() { $entity_type = 'invoice'; $data = $this->getCsvData($entity_type); $data = $this->preTransform($data, $entity_type); if (empty($data)) { $this->entity_count['invoices'] = 0; return; } $this->request_name = StoreInvoiceRequest::class; $this->repository_name = InvoiceRepository::class; $this->factory_name = InvoiceFactory::class; $this->repository = app()->make($this->repository_name); $this->repository->import_mode = true; $this->transformer = new InvoiceTransformer($this->company); $invoice_count = $this->ingestInvoices($data, 'invoice.number'); $this->entity_count['invoices'] = $invoice_count; } public function payment() { $entity_type = 'payment'; $data = $this->getCsvData($entity_type); $data = $this->preTransform($data, $entity_type); if (empty($data)) { $this->entity_count['payments'] = 0; return; } $this->request_name = StorePaymentRequest::class; $this->repository_name = PaymentRepository::class; $this->factory_name = PaymentFactory::class; $this->repository = app()->make($this->repository_name); $this->repository->import_mode = true; $this->transformer = new PaymentTransformer($this->company); $payment_count = $this->ingest($data, $entity_type); $this->entity_count['payments'] = $payment_count; } public function vendor() { $entity_type = 'vendor'; $data = $this->getCsvData($entity_type); $data = $this->preTransform($data, $entity_type); if (empty($data)) { $this->entity_count['vendors'] = 0; return; } $this->request_name = StoreVendorRequest::class; $this->repository_name = VendorRepository::class; $this->factory_name = VendorFactory::class; $this->repository = app()->make($this->repository_name); $this->repository->import_mode = true; $this->transformer = new VendorTransformer($this->company); $vendor_count = $this->ingest($data, $entity_type); $this->entity_count['vendors'] = $vendor_count; } public function expense() { $entity_type = 'expense'; $data = $this->getCsvData($entity_type); $data = $this->preTransform($data, $entity_type); if (empty($data)) { $this->entity_count['expenses'] = 0; return; } $this->request_name = StoreExpenseRequest::class; $this->repository_name = ExpenseRepository::class; $this->factory_name = ExpenseFactory::class; $this->repository = app()->make($this->repository_name); $this->repository->import_mode = true; $this->transformer = new ExpenseTransformer($this->company); $expense_count = $this->ingest($data, $entity_type); $this->entity_count['expenses'] = $expense_count; } public function quote() { } public function task() { } public function preTransform(array $data, $entity_type) { if (empty($this->column_map[$entity_type])) { return false; } if ($this->skip_header) { array_shift($data); } //sort the array by key $keys = $this->column_map[$entity_type]; ksort($keys); $data = array_map(function ($row) use ($keys) { return array_combine($keys, array_intersect_key($row, $keys)); }, $data); return $data; } public function transform(array $data) { } }