From 597abfa5844670273fe97e933e58e0fdc18bf750 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 12 Sep 2023 11:01:14 +1000 Subject: [PATCH] Update exports for previews --- app/Export/CSV/BaseExport.php | 8 ++- app/Export/CSV/CreditExport.php | 6 +-- app/Export/CSV/DocumentExport.php | 23 +-------- app/Export/CSV/InvoiceItemExport.php | 27 ++++++---- app/Export/CSV/PurchaseOrderExport.php | 5 +- app/Export/CSV/PurchaseOrderItemExport.php | 57 ++++++++++++++++++---- 6 files changed, 80 insertions(+), 46 deletions(-) diff --git a/app/Export/CSV/BaseExport.php b/app/Export/CSV/BaseExport.php index 483c1c0b4a48..63b1ec5c3c11 100644 --- a/app/Export/CSV/BaseExport.php +++ b/app/Export/CSV/BaseExport.php @@ -13,13 +13,15 @@ namespace App\Export\CSV; use App\Utils\Number; use App\Models\Client; -use App\Models\ClientContact; use App\Utils\Helpers; use App\Models\Company; use App\Models\Expense; use App\Models\Invoice; use App\Models\Payment; +use App\Models\Document; use League\Fractal\Manager; +use App\Models\ClientContact; +use App\Models\PurchaseOrder; use Illuminate\Support\Carbon; use App\Utils\Traits\MakesHash; use App\Transformers\TaskTransformer; @@ -1034,10 +1036,14 @@ class BaseExport { $class = get_class($resource); + $entity = ''; + match ($class) { Invoice::class => $entity = 'invoice', Expense::class => $entity = 'expense', + Document::class => $entity = 'document', ClientContact::class => $entity = 'contact', + PurchaseOrder::class => $entity = 'purchase_order', default => $entity = 'invoice', }; diff --git a/app/Export/CSV/CreditExport.php b/app/Export/CSV/CreditExport.php index ca0fde8bfed6..2d4cc8447fca 100644 --- a/app/Export/CSV/CreditExport.php +++ b/app/Export/CSV/CreditExport.php @@ -19,7 +19,7 @@ use App\Models\Company; use App\Libraries\MultiDB; use Illuminate\Support\Facades\App; use App\Transformers\CreditTransformer; -use Illuminate\Contracts\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Builder; class CreditExport extends BaseExport { @@ -66,12 +66,12 @@ class CreditExport extends BaseExport $column_key = $value; $clean_row[$key]['entity'] = $report_keys[0]; $clean_row[$key]['id'] = $report_keys[1] ?? $report_keys[0]; - $clean_row[$key]['hashed_id'] = $report_keys[0] == 'credit' ? null : $credit->{$report_keys[0]}->hashed_id ?? null; + $clean_row[$key]['hashed_id'] = $report_keys[0] == 'credit' ? null : $resource->{$report_keys[0]}->hashed_id ?? null; $clean_row[$key]['value'] = $row[$column_key]; $clean_row[$key]['identifier'] = $value; if(in_array($clean_row[$key]['id'], ['paid_to_date','total_taxes','amount', 'balance', 'partial', 'refunded', 'applied','unit_cost','cost','price'])) - $clean_row[$key]['display_value'] = Number::formatMoney($row[$column_key], $credit->client); + $clean_row[$key]['display_value'] = Number::formatMoney($row[$column_key], $resource->client); else $clean_row[$key]['display_value'] = $row[$column_key]; diff --git a/app/Export/CSV/DocumentExport.php b/app/Export/CSV/DocumentExport.php index 391fe14050a3..701b1bc3ffe0 100644 --- a/app/Export/CSV/DocumentExport.php +++ b/app/Export/CSV/DocumentExport.php @@ -16,7 +16,7 @@ use App\Models\Company; use App\Models\Document; use App\Transformers\DocumentTransformer; use App\Utils\Ninja; -use Illuminate\Contracts\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\App; use League\Csv\Writer; @@ -62,27 +62,6 @@ class DocumentExport extends BaseExport return array_merge(['columns' => $header], $report); } - private function processMetaData(array $row, Document $document): array - { - $clean_row = []; - foreach (array_values($this->input['report_keys']) as $key => $value) { - - $report_keys = explode(".", $value); - - $column_key = $value; - $clean_row[$key]['entity'] = $report_keys[0]; - $clean_row[$key]['id'] = $report_keys[1] ?? $report_keys[0]; - $clean_row[$key]['hashed_id'] = $report_keys[0] == 'document' ? null : $document->{$report_keys[0]}->hashed_id ?? null; - $clean_row[$key]['value'] = $row[$column_key]; - $clean_row[$key]['identifier'] = $value; - - $clean_row[$key]['display_value'] = $row[$column_key]; - - } - - return $clean_row; - } - private function init(): Builder { diff --git a/app/Export/CSV/InvoiceItemExport.php b/app/Export/CSV/InvoiceItemExport.php index 92e85fcd348a..1c420edbfbd6 100644 --- a/app/Export/CSV/InvoiceItemExport.php +++ b/app/Export/CSV/InvoiceItemExport.php @@ -16,7 +16,7 @@ use App\Models\Company; use App\Models\Invoice; use App\Transformers\InvoiceTransformer; use App\Utils\Ninja; -use Illuminate\Contracts\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\App; use League\Csv\Writer; @@ -33,6 +33,8 @@ class InvoiceItemExport extends BaseExport private array $storage_array = []; + private array $storage_item_array = []; + private array $decorate_keys = [ 'client', 'currency_id', @@ -62,7 +64,8 @@ class InvoiceItemExport extends BaseExport $query = Invoice::query() ->withTrashed() - ->with('client')->where('company_id', $this->company->id) + ->with('client') + ->where('company_id', $this->company->id) ->where('is_deleted', 0); $query = $this->addDateRange($query); @@ -81,16 +84,22 @@ class InvoiceItemExport extends BaseExport return ['identifier' => $value, 'display_value' => $headerdisplay[$value]]; })->toArray(); - $items = $query->cursor() - ->map(function ($resource) { + nlog($query->count()); + + $query->cursor() + ->each(function ($resource) { $this->iterateItems($resource); - $row = $this->processMetaData($this->storage_array[0], $resource); + + foreach($this->storage_array as $row) { + $this->storage_item_array[] = $this->processMetaData($row, $resource); + } + $this->storage_array = []; - return $row; - })->toArray(); - + + }); + + return array_merge(['columns' => $header], $this->storage_item_array); - return array_merge(['columns' => $header], $items); } diff --git a/app/Export/CSV/PurchaseOrderExport.php b/app/Export/CSV/PurchaseOrderExport.php index ffee39eee336..ed506f61050e 100644 --- a/app/Export/CSV/PurchaseOrderExport.php +++ b/app/Export/CSV/PurchaseOrderExport.php @@ -19,7 +19,7 @@ use App\Libraries\MultiDB; use App\Models\PurchaseOrder; use Illuminate\Support\Facades\App; use App\Transformers\PurchaseOrderTransformer; -use Illuminate\Contracts\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Builder; class PurchaseOrderExport extends BaseExport { @@ -119,7 +119,8 @@ class PurchaseOrderExport extends BaseExport $report = $query->cursor() ->map(function ($resource) { - return $this->buildRow($resource); + $row = $this->buildRow($resource); + return $this->processMetaData($row, $resource); })->toArray(); return array_merge(['columns' => $header], $report); diff --git a/app/Export/CSV/PurchaseOrderItemExport.php b/app/Export/CSV/PurchaseOrderItemExport.php index ec63f8388f14..a117279c2588 100644 --- a/app/Export/CSV/PurchaseOrderItemExport.php +++ b/app/Export/CSV/PurchaseOrderItemExport.php @@ -11,14 +11,14 @@ namespace App\Export\CSV; -use App\Libraries\MultiDB; -use App\Models\Company; -use App\Models\PurchaseOrder; -use App\Transformers\PurchaseOrderTransformer; use App\Utils\Ninja; -use Illuminate\Contracts\Database\Eloquent\Builder; -use Illuminate\Support\Facades\App; use League\Csv\Writer; +use App\Models\Company; +use App\Libraries\MultiDB; +use App\Models\PurchaseOrder; +use Illuminate\Support\Facades\App; +use Illuminate\Database\Eloquent\Builder; +use App\Transformers\PurchaseOrderTransformer; class PurchaseOrderItemExport extends BaseExport { @@ -33,6 +33,8 @@ class PurchaseOrderItemExport extends BaseExport private array $storage_array = []; + private array $storage_item_array = []; + public function __construct(Company $company, array $input) { $this->company = $company; @@ -50,7 +52,6 @@ class PurchaseOrderItemExport extends BaseExport $t->replace(Ninja::transformTranslations($this->company->settings)); if (count($this->input['report_keys']) == 0) { - // $this->force_keys = true; $this->input['report_keys'] = array_values($this->mergeItemsKeys('purchase_order_report_keys')); } @@ -78,9 +79,18 @@ class PurchaseOrderItemExport extends BaseExport $query->cursor() ->each(function ($resource) { $this->iterateItems($resource); + + $this->storage_item_array = []; + + foreach($this->storage_array as $row) { + $this->storage_item_array[] = $this->processMetaData($row, $resource); + } + + $this->storage_array = []; + }); - return array_merge(['columns' => $header], $this->storage_array); + return array_merge(['columns' => $header], $this->storage_item_array); } public function run() @@ -113,7 +123,7 @@ class PurchaseOrderItemExport extends BaseExport foreach ($purchase_order->line_items as $item) { $item_array = []; - foreach (array_values($this->input['report_keys']) as $key) { //items iterator produces item array + foreach (array_values(array_intersect($this->input['report_keys'], $this->item_report_keys)) as $key) { //items iterator produces item array if (str_contains($key, "item.")) { @@ -190,4 +200,33 @@ class PurchaseOrderItemExport extends BaseExport return $entity; } + + public function processMetaData(array $row, $resource): array + { + $entity = 'purchase_order'; + $clean_row = []; + + foreach (array_values($this->input['report_keys']) as $key => $value) { + + $report_keys = explode(".", $value); + + $column_key = $value; + + if($value == 'type_id' || $value == 'item.type_id') + $column_key = 'type'; + + if($value == 'tax_id' || $value == 'item.tax_id') + $column_key = 'tax_category'; + + $clean_row[$key]['entity'] = $report_keys[0]; + $clean_row[$key]['id'] = $report_keys[1] ?? $report_keys[0]; + $clean_row[$key]['hashed_id'] = $report_keys[0] == $entity ? null : $resource->{$report_keys[0]}->hashed_id ?? null; + $clean_row[$key]['value'] = isset($row[$column_key]) ? $row[$column_key] : $row[$report_keys[1]]; + $clean_row[$key]['identifier'] = $value; + $clean_row[$key]['display_value'] = isset($row[$column_key]) ? $row[$column_key] : $row[$report_keys[1]]; + + } + + return $clean_row; + } }