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); set_time_limit(0); $engine = $this->bootEngine($this->import_type); foreach (['client', 'product', 'invoice', 'payment', 'vendor', 'expense'] as $entity) { $engine->import($entity); } $engine->finalizeImport(); $this->checkContacts(); } private function checkContacts() { $vendors = Vendor::withTrashed()->where('company_id', $this->company->id)->doesntHave('contacts')->get(); foreach ($vendors as $vendor) { $new_contact = VendorContactFactory::create($vendor->company_id, $vendor->user_id); $new_contact->vendor_id = $vendor->id; $new_contact->contact_key = Str::random(40); $new_contact->is_primary = true; $new_contact->save(); } $clients = Client::withTrashed()->where('company_id', $this->company->id)->doesntHave('contacts')->get(); foreach ($clients as $client) { $new_contact = ClientContactFactory::create($client->company_id, $client->user_id); $new_contact->client_id = $client->id; $new_contact->contact_key = Str::random(40); $new_contact->is_primary = true; $new_contact->save(); } } 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; } } }