company = $company; $this->request = $request; $this->hash = $request['hash']; $this->import_type = $request['import_type']; $this->skip_header = $request['skip_header'] ?? null; $this->column_map = ! empty( $request['column_map'] ) ? array_combine( array_keys( $request['column_map'] ), array_column( $request['column_map'], 'mapping' ) ) : null; } /** * Execute the job. * * * @return void */ public function handle() { MultiDB::setDb( $this->company->db ); $engine = $this->bootEngine($this->import_type); foreach ( [ 'client', 'product', 'invoice', 'payment', 'vendor', 'expense' ] as $entity ) { $engine->import($entity); } } private function bootEngine(string $import_type) { switch ($import_type) { case 'csv': return new Csv( $this->request, $this->company); break; case 'waveaccounting': return new Wave( $this->request, $this->company); break; case 'invoicely': return new Invoicely( $this->request, $this->company); break; case 'invoice2go': return new Invoice2Go( $this->request, $this->company); break; case 'zoho': return new Zoho( $this->request, $this->company); break; case 'freshbooks': return new Freshbooks( $this->request, $this->company); break; default: // code... break; } } }