From 2d5688b66e57302e810b67ddd18927ddb56c5e46 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Fri, 11 Apr 2025 16:17:51 -0400 Subject: [PATCH 1/8] #132: Inches / cm toggle for order page Also shows size unit on PDFs --- README.md | 3 +++ .../Admin/Resources/OrderResource.php | 21 +++++++++++++----- .../OrderResource/Pages/CreateOrder.php | 1 + .../OrderResource/Pages/EditOrder.php | 2 ++ app/Models/ProductService.php | 1 + app/Models/ServiceFile.php | 1 + config/app.php | 2 +- database/factories/ServiceFileFactory.php | 1 - ...5_add_size_unit_to_service_files_table.php | 22 +++++++++++++++++++ resources/views/pdf/order.blade.php | 12 ++++++---- 10 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 database/migrations/2025_04_11_191235_add_size_unit_to_service_files_table.php diff --git a/README.md b/README.md index 9242bf9..04b923d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # Changelog +**2025-04-11** +- Fixed #132 - Inches / cm toggle for order page (and show unit on pdf) + **2025-04-10** - Fixed #145 - Default order sort is incorrect (newest will always show on top now) - Fixed #142 - Packing Slip content field should be required diff --git a/app/Filament/Admin/Resources/OrderResource.php b/app/Filament/Admin/Resources/OrderResource.php index d461d37..af585c1 100644 --- a/app/Filament/Admin/Resources/OrderResource.php +++ b/app/Filament/Admin/Resources/OrderResource.php @@ -230,7 +230,7 @@ public static function form(Form $form): Form ->prefix('h') ->rules('numeric'), ]) - ->label('Dimensions (inches)') + ->label('Dimensions') ->columnSpan(4), TextInput::make('amount') @@ -247,17 +247,28 @@ public static function form(Form $form): Form ->rules('numeric'), ]), - Grid::make(9) + Grid::make(19) ->schema([ TextInput::make('serviceFileCode') ->label('Code') ->datalist(ServiceFile::all()->unique('code')->pluck('code')->toArray()) - ->columnSpan(1) + ->columnSpan(2) ->placeholder('A1234'), + Select::make('serviceFileSizeUnit') + ->columnSpan(2) + ->selectablePlaceholder(false) + ->label('Unit') + ->options([ + 'in' => 'Inches', + 'cm' => 'cm', + ]), + Textarea::make('notes') - ->placeholder('Thread colors...') - ->columnSpan(8), + ->placeholder('Thread colors... (press enter for new line)') + ->autosize() + ->rows(1) + ->columnSpan(15), ]), ]) ->reorderable() diff --git a/app/Filament/Admin/Resources/OrderResource/Pages/CreateOrder.php b/app/Filament/Admin/Resources/OrderResource/Pages/CreateOrder.php index 747fc13..913d3cc 100644 --- a/app/Filament/Admin/Resources/OrderResource/Pages/CreateOrder.php +++ b/app/Filament/Admin/Resources/OrderResource/Pages/CreateOrder.php @@ -63,6 +63,7 @@ protected function handleRecordCreation(array $data): Order 'width' => $service['serviceFileWidth'] ?? null, 'height' => $service['serviceFileHeight'] ?? null, 'setup_number' => $service['serviceFileSetupNumber'] ?? null, + 'size_unit' => $service['serviceFileSizeUnit'] ?? 'inch', ]); ProductService::create([ diff --git a/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php b/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php index 70775fa..d82daf1 100644 --- a/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php +++ b/app/Filament/Admin/Resources/OrderResource/Pages/EditOrder.php @@ -68,6 +68,7 @@ protected function mutateFormDataBeforeFill(array $data): array 'serviceFileHeight' => $service->serviceFile->height ?? '', 'serviceFileCode' => $service->serviceFile->code ?? '', 'serviceFileSetupNumber' => $service->serviceFile->setup_number ?? '', + 'serviceFileSizeUnit' => $service->serviceFile->size_unit ?? 'inch', ]; } @@ -139,6 +140,7 @@ public function handleRecordUpdate(Model $record, array $data): Model 'width' => $service['serviceFileWidth'] ?? null, 'height' => $service['serviceFileHeight'] ?? null, 'setup_number' => $service['serviceFileSetupNumber'] ?? null, + 'size_unit' => $service['serviceFileSizeUnit'] ?? 'inch', ]); ProductService::create([ diff --git a/app/Models/ProductService.php b/app/Models/ProductService.php index 811263a..35157d3 100644 --- a/app/Models/ProductService.php +++ b/app/Models/ProductService.php @@ -26,6 +26,7 @@ class ProductService extends Model 'amount', 'amount_price', 'notes', + 'size_unit', ]; protected $appends = [ diff --git a/app/Models/ServiceFile.php b/app/Models/ServiceFile.php index 2bde33b..1ac05db 100644 --- a/app/Models/ServiceFile.php +++ b/app/Models/ServiceFile.php @@ -19,6 +19,7 @@ class ServiceFile extends Model 'width', 'height', 'setup_number', + 'size_unit', ]; /** diff --git a/config/app.php b/config/app.php index 457c34c..7d29135 100644 --- a/config/app.php +++ b/config/app.php @@ -25,7 +25,7 @@ | or any other location as required by the application or its packages. */ - 'version' => '20250410', + 'version' => '20250411', /* |-------------------------------------------------------------------------- diff --git a/database/factories/ServiceFileFactory.php b/database/factories/ServiceFileFactory.php index 6a2dc22..7661154 100644 --- a/database/factories/ServiceFileFactory.php +++ b/database/factories/ServiceFileFactory.php @@ -19,7 +19,6 @@ public function definition(): array 'name' => $this->faker->word(), 'width' => round($this->faker->randomFloat(2, 0, 10), 1), 'height' => round($this->faker->randomFloat(2, 0, 10), 1), - 'unit' => 'inch', ]; } } diff --git a/database/migrations/2025_04_11_191235_add_size_unit_to_service_files_table.php b/database/migrations/2025_04_11_191235_add_size_unit_to_service_files_table.php new file mode 100644 index 0000000..8609194 --- /dev/null +++ b/database/migrations/2025_04_11_191235_add_size_unit_to_service_files_table.php @@ -0,0 +1,22 @@ +string('size_unit')->default('in'); + }); + } + + public function down(): void + { + Schema::table('service_files', function (Blueprint $table) { + $table->dropColumn('size_unit'); + }); + } +}; diff --git a/resources/views/pdf/order.blade.php b/resources/views/pdf/order.blade.php index 2b4085d..ef159e1 100644 --- a/resources/views/pdf/order.blade.php +++ b/resources/views/pdf/order.blade.php @@ -155,7 +155,7 @@ @foreach($order->orderProducts as $product) - {{$product->sku}} + {{$product->sku}} {{$product->product_name}} {{$product->color}} {{$product->productSizes()->get()->where('size', 'xs')->first()->amount ?? ''}} @@ -190,6 +190,7 @@ Logo Name & Instructions Width Height + Unit QTY @@ -203,17 +204,17 @@
- {{$service->serviceFile->code}} + {{$service->serviceFile->code ?? ''}}
- {{$service->serviceFile->name}} + {{$service->serviceFile->name ?? ''}}

- {{$service->notes}} + {{$service->notes ?? ''}}
@@ -222,6 +223,9 @@ {{$service->serviceFile->height}} + + {{$service->serviceFile->size_unit}} + {{$service->amount}} -- 2.43.0 From bc63a4074b5ea2351b5fde424af53852466be193 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Fri, 11 Apr 2025 16:24:08 -0400 Subject: [PATCH 2/8] #147: Resource Lock sidebar settings --- config/resource-lock.php | 130 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 config/resource-lock.php diff --git a/config/resource-lock.php b/config/resource-lock.php new file mode 100644 index 0000000..6f9bc5c --- /dev/null +++ b/config/resource-lock.php @@ -0,0 +1,130 @@ + [ + 'User' => \App\Models\User::class, + // 'ResourceLock' => null, + ], + + /* + |-------------------------------------------------------------------------- + | Filament Resource + |-------------------------------------------------------------------------- + | + | The resource lock filament resource displays all the current locks in place. + | You are able to replace the resource Lock with your own resource class. + | + */ + 'resource' => [ + 'class' => \Kenepa\ResourceLock\Resources\LockResource::class, + ], + + /* + |-------------------------------------------------------------------------- + | Resource Unlocker Button + |-------------------------------------------------------------------------- + | + | The unlocker configuration specifies whether limited access is enabled for + | the resource unlock button. If limited access is enabled, only specific + | users or roles will be able to unlock locked resources directly from + | the modal. + | + */ + + 'unlocker' => [ + 'limited_access' => false, + // 'gate' => '' + ], + + /* + |-------------------------------------------------------------------------- + | Lock Notice + |-------------------------------------------------------------------------- + | + | The lock notice contains several configuration options for the modal + | that is display when a resource is locked. + | + */ + + 'lock_notice' => [ + 'display_resource_lock_owner' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Resource Lock Manager + |-------------------------------------------------------------------------- + | + | The resource lock manager provides a simple way to view all resource locks + | of your application. It provides several ways to quickly unlock all or + | specific resources within your app. + | + */ + + 'manager' => [ + 'navigation_badge' => false, + 'navigation_icon' => 'heroicon-o-lock-closed', + 'navigation_label' => 'Resource Locks', + 'plural_label' => 'Resource Locks', + 'navigation_group' => 'Settings', + 'navigation_sort' => 200, + 'limited_access' => false, + 'should_register_navigation' => true, + // 'gate' => '' + ], + + /* + |-------------------------------------------------------------------------- + | Lock timeout (in minutes) + |-------------------------------------------------------------------------- + | + | The lock_timeout configuration specifies the time interval, in minutes, + | after which a lock on a resource will expire if it has not been manually + | unlocked or released by the user. + | + */ + + 'lock_timeout' => 10, + + /* + |-------------------------------------------------------------------------- + | Check Locks before saving + |-------------------------------------------------------------------------- + | + | The check_locks_before_saving configuration specifies whether a lock of a resource will be checked + | before saving a resource if a tech-savvy user is able to bypass the locked + | resource modal and attempt to save the resource. In some cases you may want to turns this off. + | It's recommended to keep this on. + | + */ + + 'check_locks_before_saving' => true, + + /* + |-------------------------------------------------------------------------- + | Actions + |-------------------------------------------------------------------------- + | + | Action classes are simple classes that execute some logic within the package. + | If you want to add your own custom logic you are able to extend your own + | class with class your overwriting. + | Learn more about action classes: https://freek.dev/2442-strategies-for-making-laravel-packages-customizable + | + */ + + 'actions' => [ + 'get_resource_lock_owner_action' => \Kenepa\ResourceLock\Actions\GetResourceLockOwnerAction::class, + ], +]; -- 2.43.0 From b6592d794560779493a1410a0e2161d037ed6921 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Fri, 11 Apr 2025 16:27:16 -0400 Subject: [PATCH 3/8] #134: Fix Dashboard 'in the past 30 days' --- app/Filament/Admin/Widgets/OrderStats.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Filament/Admin/Widgets/OrderStats.php b/app/Filament/Admin/Widgets/OrderStats.php index f97f429..cd51c48 100644 --- a/app/Filament/Admin/Widgets/OrderStats.php +++ b/app/Filament/Admin/Widgets/OrderStats.php @@ -49,7 +49,7 @@ private function getOrdersPast30Days(): string ->where('order_status', '!=', OrderStatus::READY_FOR_INVOICE) ->where('order_status', '!=', OrderStatus::SHIPPED) ->where('order_status', '!=', OrderStatus::INVOICED) - ->whereBetween('created_at', [now()->startOfMonth(), now()->endOfMonth()]) + ->whereBetween('created_at', [now()->subDays(30), now()]) ->count(); } -- 2.43.0 From 3dc4b9895957ebcec0592b8863f902465e99bae0 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Fri, 11 Apr 2025 16:29:25 -0400 Subject: [PATCH 4/8] #148: Change amount label to unit price on order form --- app/Filament/Admin/Resources/OrderResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Filament/Admin/Resources/OrderResource.php b/app/Filament/Admin/Resources/OrderResource.php index af585c1..e812b7b 100644 --- a/app/Filament/Admin/Resources/OrderResource.php +++ b/app/Filament/Admin/Resources/OrderResource.php @@ -241,7 +241,7 @@ public static function form(Form $form): Form ->rules('numeric'), TextInput::make('amount_price') - ->label('Amount') + ->label('Unit price') ->prefix('$') ->columnSpan(2) ->rules('numeric'), -- 2.43.0 From a4f2c3e87f7573911f5436bfe6d9fa27fd87c836 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Fri, 11 Apr 2025 17:31:13 -0400 Subject: [PATCH 5/8] #129: Product count sum This is some goddamned unholy code bUT IT WORKS --- .../Admin/Resources/OrderResource.php | 41 +++++++++++++++--- .../OrderResource/Pages/ListOrders.php | 1 - .../filament/forms/compact-repeater.blade.php | 2 +- .../forms/components/row-total.blade.php | 43 +++++++++++++++++++ 4 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 resources/views/forms/components/row-total.blade.php diff --git a/app/Filament/Admin/Resources/OrderResource.php b/app/Filament/Admin/Resources/OrderResource.php index e812b7b..ac0062c 100644 --- a/app/Filament/Admin/Resources/OrderResource.php +++ b/app/Filament/Admin/Resources/OrderResource.php @@ -14,6 +14,7 @@ use App\Models\ServiceFile; use App\Models\ServiceType; use Filament\Forms\Components\DatePicker; +use Filament\Forms\Components\Field; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Group; use Filament\Forms\Components\Placeholder; @@ -40,6 +41,22 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +function recalculateRowTotal(callable $set, callable $get): void +{ + $amounts = collect([ + $get('xs'), + $get('s'), + $get('m'), + $get('l'), + $get('xl'), + $get('2xl'), + $get('3xl'), + $get('osfa'), + ])->map(fn ($val) => floatval($val ?? 0)); + + $set('total', $amounts->sum()); +} + class OrderResource extends Resource { protected static ?string $model = Order::class; @@ -52,6 +69,8 @@ public static function form(Form $form): Form { return $form->schema([ Group::make() + ->columns(6) + ->columnSpan(2) ->schema([ Section::make([ Grid::make(1) @@ -140,9 +159,7 @@ public static function form(Form $form): Form ->columnSpan(1) ->hidden(fn (?Order $record) => $record === null) ->extraAttributes(['class' => 'h-full']), - ]) - ->columns(6) - ->columnSpan(2), + ]), TableRepeater::make('order_products') ->label('Garments') @@ -161,29 +178,42 @@ public static function form(Form $form): Form TextInput::make('xs') ->placeholder('xs') ->rules('numeric'), + TextInput::make('s') ->placeholder('s') + ->reactive() ->rules('numeric'), + TextInput::make('m') ->placeholder('m') + ->reactive() ->rules('numeric'), + TextInput::make('l') ->placeholder('l') ->rules('numeric'), + TextInput::make('xl') ->placeholder('xl') ->rules('numeric'), + TextInput::make('2xl') ->placeholder('2xl') ->rules('numeric'), + TextInput::make('3xl') ->placeholder('3xl') ->rules('numeric'), + TextInput::make('osfa') ->placeholder('osfa') ->rules('numeric'), - ]) - ->label('Sizes'), + ])->label('Sizes'), + + Field::make('total_display') + ->dehydrated(false) + ->label('Total') + ->view('forms.components.row-total'), ]), Repeater::make('services') @@ -235,7 +265,6 @@ public static function form(Form $form): Form TextInput::make('amount') ->label('Quantity') - ->live() ->prefix('#') ->columnSpan(2) ->rules('numeric'), diff --git a/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php b/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php index 9bafe8b..01dce6c 100644 --- a/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php +++ b/app/Filament/Admin/Resources/OrderResource/Pages/ListOrders.php @@ -10,7 +10,6 @@ use Filament\Actions; use Filament\Resources\Components\Tab; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\MaxWidth; class ListOrders extends ListRecords { diff --git a/resources/views/filament/forms/compact-repeater.blade.php b/resources/views/filament/forms/compact-repeater.blade.php index 744d8df..861058a 100644 --- a/resources/views/filament/forms/compact-repeater.blade.php +++ b/resources/views/filament/forms/compact-repeater.blade.php @@ -217,7 +217,7 @@ class="absolute inset-0 rotate-180 transition"
{{ $item }}
diff --git a/resources/views/forms/components/row-total.blade.php b/resources/views/forms/components/row-total.blade.php new file mode 100644 index 0000000..6f38f38 --- /dev/null +++ b/resources/views/forms/components/row-total.blade.php @@ -0,0 +1,43 @@ +@php + $statePath = $getStatePath(); // e.g., data.order_products.UUID.total_display + $rowPath = \Illuminate\Support\Str::beforeLast($statePath, '.total_display'); + + $xsPath = "{$rowPath}.xs"; + $sPath = "{$rowPath}.s"; + $mPath = "{$rowPath}.m"; + $lPath = "{$rowPath}.l"; + $xlPath = "{$rowPath}.xl"; + $xxlPath = "{$rowPath}.2xl"; + $xxxlPath = "{$rowPath}.3xl"; + $osfaPath = "{$rowPath}.osfa"; +@endphp + +
+ + +
-- 2.43.0 From 1e3250275976209df1a63c98542e26140b30817b Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Sun, 13 Apr 2025 10:44:48 -0400 Subject: [PATCH 6/8] Fix order form service type create form width --- app/Filament/Admin/Resources/OrderResource.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Filament/Admin/Resources/OrderResource.php b/app/Filament/Admin/Resources/OrderResource.php index ac0062c..6819420 100644 --- a/app/Filament/Admin/Resources/OrderResource.php +++ b/app/Filament/Admin/Resources/OrderResource.php @@ -237,6 +237,7 @@ public static function form(Form $form): Form ->placeholder('Full name here (example: \'Embroidery\'') ->required(), ]) + ->createOptionAction(fn ($action) => $action->modalWidth('sm')) ->createOptionUsing(function (array $data): int { return ServiceType::create($data)->getKey(); }), -- 2.43.0 From d9ca6ec6ba284e5792439d09864221a953494397 Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Sun, 13 Apr 2025 10:51:38 -0400 Subject: [PATCH 7/8] #150: Invoice PDF name --- README.md | 8 +++++--- app/Filament/Admin/Resources/OrderResource.php | 2 -- app/Http/Controllers/InvoiceController.php | 2 +- config/app.php | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 04b923d..c2d01c7 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ # Changelog -**2025-04-11** +**2025-04-13** - Fixed #132 - Inches / cm toggle for order page (and show unit on pdf) - -**2025-04-10** +- Fixed #148 - Change amount label to unit price on order form (also textarea) +- Fixed #147 - Resource lock sidebar settings +- Fixed #134 - Fix Dashboard 'last 30 days' +- Added #129 - Order product count sum - Fixed #145 - Default order sort is incorrect (newest will always show on top now) - Fixed #142 - Packing Slip content field should be required diff --git a/app/Filament/Admin/Resources/OrderResource.php b/app/Filament/Admin/Resources/OrderResource.php index 6819420..6f31579 100644 --- a/app/Filament/Admin/Resources/OrderResource.php +++ b/app/Filament/Admin/Resources/OrderResource.php @@ -181,12 +181,10 @@ public static function form(Form $form): Form TextInput::make('s') ->placeholder('s') - ->reactive() ->rules('numeric'), TextInput::make('m') ->placeholder('m') - ->reactive() ->rules('numeric'), TextInput::make('l') diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index fc91942..1cb585e 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -11,7 +11,7 @@ class InvoiceController extends Controller public function pdf(int $id) { $invoice = Invoice::find($id); - $url = strtolower('invoice-'.$invoice->internal_id.'.pdf'); + $url = strtolower($invoice->internal_id.'_'.$invoice->customer->company_name.'.pdf'); Pdf::view('pdf.invoice', ['invoice' => $invoice]) ->withBrowsershot(function (Browsershot $browsershot) { diff --git a/config/app.php b/config/app.php index 7d29135..aef9ea2 100644 --- a/config/app.php +++ b/config/app.php @@ -25,7 +25,7 @@ | or any other location as required by the application or its packages. */ - 'version' => '20250411', + 'version' => '20250413', /* |-------------------------------------------------------------------------- -- 2.43.0 From 95abaa78a39e812dbc80094464b446e9c2d1285d Mon Sep 17 00:00:00 2001 From: Nisse Lommerde Date: Sun, 13 Apr 2025 10:59:12 -0400 Subject: [PATCH 8/8] Small cleanups --- app/Models/ProductService.php | 1 - .../012_create_product_services_table.php | 1 - .../migrations/013_create_service_files_table.php | 1 - resources/views/pdf/order.blade.php | 14 +++++++------- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/app/Models/ProductService.php b/app/Models/ProductService.php index 35157d3..811263a 100644 --- a/app/Models/ProductService.php +++ b/app/Models/ProductService.php @@ -26,7 +26,6 @@ class ProductService extends Model 'amount', 'amount_price', 'notes', - 'size_unit', ]; protected $appends = [ diff --git a/database/migrations/012_create_product_services_table.php b/database/migrations/012_create_product_services_table.php index 1077d04..efc9fc3 100644 --- a/database/migrations/012_create_product_services_table.php +++ b/database/migrations/012_create_product_services_table.php @@ -15,7 +15,6 @@ public function up(): void $table->foreignId('service_file_id')->nullable(); $table->foreignId('service_type_id')->nullable(); - // $table->string('service_type')->nullable(); $table->string('placement')->nullable(); $table->string('amount')->nullable(); $table->string('amount_price')->nullable(); diff --git a/database/migrations/013_create_service_files_table.php b/database/migrations/013_create_service_files_table.php index f156ad4..8117038 100644 --- a/database/migrations/013_create_service_files_table.php +++ b/database/migrations/013_create_service_files_table.php @@ -16,7 +16,6 @@ public function up(): void $table->decimal('height')->nullable(); $table->string('unit')->default('inch'); $table->integer('setup_number')->nullable(); - // $table->string('notes')->nullable(); $table->softDeletes(); $table->timestamps(); }); diff --git a/resources/views/pdf/order.blade.php b/resources/views/pdf/order.blade.php index ef159e1..b8b0f33 100644 --- a/resources/views/pdf/order.blade.php +++ b/resources/views/pdf/order.blade.php @@ -156,8 +156,8 @@ @foreach($order->orderProducts as $product) {{$product->sku}} - {{$product->product_name}} - {{$product->color}} + {{$product->product_name ?? ''}} + {{$product->color ?? ''}} {{$product->productSizes()->get()->where('size', 'xs')->first()->amount ?? ''}} {{$product->productSizes()->get()->where('size', 's')->first()->amount ?? ''}} {{$product->productSizes()->get()->where('size', 'm')->first()->amount ?? ''}} @@ -176,7 +176,7 @@
- TOTAL QUANTITY: {{$order->totalProductQuantity}} + TOTAL QUANTITY: {{$order->totalProductQuantity ?? ''}}
@@ -199,7 +199,7 @@
- {{$service->placement}} + {{$service->placement ?? ''}}

@@ -221,13 +221,13 @@ {{$service->serviceFile->width}} - {{$service->serviceFile->height}} + {{$service->serviceFile->height ?? ''}} - {{$service->serviceFile->size_unit}} + {{$service->serviceFile->size_unit ?? ''}} - {{$service->amount}} + {{$service->amount ?? ''}} -- 2.43.0