From b1d2f85af3ee0fec705ad6974ce0b8cde4e25789 Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 17 Jul 2024 12:33:51 -0400 Subject: [PATCH] add import invoices feature --- app/Import/Providers/Quickbooks.php | 97 ++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/app/Import/Providers/Quickbooks.php b/app/Import/Providers/Quickbooks.php index 60af270f7547..dd1fd4477680 100644 --- a/app/Import/Providers/Quickbooks.php +++ b/app/Import/Providers/Quickbooks.php @@ -117,9 +117,104 @@ class Quickbooks extends BaseImport $this->repository = app()->make($this->repository_name); $this->repository->import_mode = true; $this->transformer = new InvoiceTransformer($this->company); - $invoice_count = $this->ingestInvoices($data, 'Invoice #'); + $invoice_count = $this->ingestInvoices($data,''); $this->entity_count['invoices'] = $invoice_count; $this->company->update_products = $initial_update_products_value; $this->company->save(); } + + public function ingestInvoices($invoices, $invoice_number_key) + { + $count = 0; + $invoice_transformer = $this->transformer; + /** @var ClientRepository $client_repository */ + $client_repository = app()->make(ClientRepository::class); + $client_repository->import_mode = true; + $invoice_repository = new InvoiceRepository(); + $invoice_repository->import_mode = true; + + foreach ($invoices as $raw_invoice) { + if(!is_array($raw_invoice)) { + continue; + } + + try { + $invoice_data = $invoice_transformer->transform($raw_invoice); + $invoice_data['user_id'] = $this->company->owner()->id; + $invoice_data['line_items'] = (array) $invoice_data['line_items']; + + if ( + empty($invoice_data['client_id']) && + ! empty($invoice_data['client']) + ) { + $client_data = $invoice_data['client']; + $client_data['user_id'] = $this->getUserIDForRecord( + $invoice_data + ); + $client_repository->save( + $client_data, + $client = ClientFactory::create( + $this->company->id, + $client_data['user_id'] + ) + ); + $invoice_data['client_id'] = $client->id; + unset($invoice_data['client']); + } + + $validator = $this->request_name::runFormRequest($invoice_data); + if ($validator->fails()) { + $this->error_array['invoice'][] = [ + 'invoice' => $invoice_data, + 'error' => $validator->errors()->all(), + ]; + } else { + $invoice = InvoiceFactory::create( + $this->company->id, + $this->company->owner()->id + ); + $invoice->mergeFillable(['partial','amount','balance','line_items']); + if (! empty($invoice_data['status_id'])) { + $invoice->status_id = $invoice_data['status_id']; + } + + $saveable_invoice_data = $invoice_data; + if(array_key_exists('payments', $saveable_invoice_data)) { + unset($saveable_invoice_data['payments']); + } + + $invoice->fill($saveable_invoice_data); + $invoice->save(); + $count++; + + // $this->actionInvoiceStatus( + // $invoice, + // $invoice_data, + // $invoice_repository + // ); + } + } catch (\Exception $ex) { + if (\DB::connection(config('database.default'))->transactionLevel() > 0) { + \DB::connection(config('database.default'))->rollBack(); + } + + if ($ex instanceof ImportException) { + $message = $ex->getMessage(); + } else { + report($ex); + $message = 'Unknown error '; + nlog($ex->getMessage()); + nlog($raw_invoice); + } + + $this->error_array['invoice'][] = [ + 'invoice' => $raw_invoice, + 'error' => $message, + ]; + } + } + + return $count; + } + }