From df87e1aad1ed15291cc923033b2a95d8d5d715ad Mon Sep 17 00:00:00 2001 From: Shane Rosenthal Date: Mon, 4 Nov 2024 20:16:39 -0500 Subject: [PATCH 1/2] adds KeyValue to OrderItemsTable for lunar_order_lines meta data --- .../Pages/Components/OrderItemsTable.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php b/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php index 4f99fc9ff2..2f9fe8ff82 100644 --- a/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php +++ b/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php @@ -96,6 +96,18 @@ public static function getOrderLinesTableColumns(): array return $states; }), + + KeyValue::make('meta_data') + ->getStateUsing(function ($record) { + + $states = []; + + foreach($record->meta as $key => $value) { + $states[$key] = $value; + } + + return $states;; + }) ]), ]) ->collapsed() From ebad298496f6b87e5de7943009211bb61f9ac2c5 Mon Sep 17 00:00:00 2001 From: Shane Rosenthal Date: Tue, 5 Nov 2024 08:45:27 -0500 Subject: [PATCH 2/2] adds and updates tests --- .../Pages/Components/OrderItemsTable.php | 10 ++- .../OrderResource/Pages/ManageOrderTest.php | 86 +++++++++++++++++++ 2 files changed, 92 insertions(+), 4 deletions(-) diff --git a/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php b/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php index 2f9fe8ff82..877e51d859 100644 --- a/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php +++ b/packages/admin/src/Filament/Resources/OrderResource/Pages/Components/OrderItemsTable.php @@ -102,12 +102,14 @@ public static function getOrderLinesTableColumns(): array $states = []; - foreach($record->meta as $key => $value) { - $states[$key] = $value; + if ($record->meta) { + foreach ($record->meta as $key => $value) { + $states[$key] = $value; + } } - return $states;; - }) + return $states; + }), ]), ]) ->collapsed() diff --git a/tests/admin/Feature/Filament/Resources/OrderResource/Pages/ManageOrderTest.php b/tests/admin/Feature/Filament/Resources/OrderResource/Pages/ManageOrderTest.php index d8a2c312e7..fd8785f5f1 100644 --- a/tests/admin/Feature/Filament/Resources/OrderResource/Pages/ManageOrderTest.php +++ b/tests/admin/Feature/Filament/Resources/OrderResource/Pages/ManageOrderTest.php @@ -134,6 +134,92 @@ ->assertSee($this->order->reference); }); +it('can render order manage page with order line meta', function () { + $currency = Currency::getDefault(); + + $variants = ProductVariant::factory(5) + ->has(ModelsPrice::factory()->state([ + 'currency_id' => $currency->id, + ]))->create(); + + $lines = collect(); + + foreach ($variants as $variant) { + $quantity = rand(1, 5); + + $pricing = Pricing::for($variant, $quantity)->get(); + $price = $pricing->matched->price->value; + $subTotal = $price * $quantity; + $tax = (int) ($subTotal * .2); + $options = $variant->values->map(fn ($value) => $value->translate('name')); + + $itemTax = (new TaxBreakdown); + $itemTax->addAmount(new TaxBreakdownAmount( + price: new Price( + value: $tax, + currency: $currency + ), + identifier: $currency->code, + description: 'VAT', + percentage: 20, + )); + + $lines->push([ + 'quantity' => $quantity, + 'purchasable_type' => $variant->getMorphClass(), + 'purchasable_id' => $variant->id, + 'type' => 'physical', + 'description' => $variant->product->translateAttribute('name'), + 'identifier' => $variant->sku, + 'option' => $options->join(', '), + 'unit_price' => $price, + 'unit_quantity' => $variant->unit_quantity, + 'sub_total' => $subTotal, + 'discount_total' => 0, + 'tax_total' => $tax, + 'total' => $subTotal + $tax, + 'tax_breakdown' => $itemTax, + 'meta' => [ + 'line_1' => 'hello', + ], + ]); + } + + $this->order->transactions()->save(Transaction::factory()->create([ + 'driver' => 'offline', + 'type' => 'capture', + 'amount' => $lines->sum('total'), + ])); + + $lines = $this->order->lines()->createMany($lines->toArray()); + + $firstItem = $lines->first(); + $secondItem = $lines->skip(1)->take(1)->first(); + + expect($firstItem) + ->not->toBe($secondItem); + + Livewire::test(ManageOrder::class, [ + 'record' => $this->order->getRouteKey(), + ]) + ->assertSuccessful() + ->assertSeeLivewire(ActivityLogFeedComponent::class) + ->assertSee($this->order->tags) + ->assertSee($this->order->shippingAddress->line_one) + ->assertSee($this->order->shippingAddress->line_one) + ->assertSee($this->order->total->formatted) + ->assertSee($this->order->customer->fullName) + ->assertSee(CustomerResource::getUrl('edit', ['record' => $this->order->customer->id])) + ->assertSee(__('lunarpanel::order.transactions.capture')) + ->assertSee($this->order->captures->first()->amount->formatted) + ->assertSee($this->order->meta['additional_info']) + ->assertSee($firstItem->total->formatted) + ->assertSee($firstItem->sub_total->formatted) + ->assertSee($secondItem->total->formatted) + ->assertSee($this->order->lines->first()->meta['line_1']) + ->assertSee($this->order->reference); +}); + it('can download order pdf', function () { Livewire::test(ManageOrder::class, [ 'record' => $this->order->getRouteKey(),