This commit is contained in:
2025-09-25 03:03:31 +05:00
commit ae480cf2f6
2768 changed files with 1485826 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
<?php
namespace App\Nova\Resources\Ecommerce\Product\Order\OrderItem;
use App\Models\Ecommerce\Product\Product\Product as ProductModel;
use App\Nova\Resources\Ecommerce\Product\Order\Order;
use App\Nova\Resources\Ecommerce\Product\Product\Product;
use Illuminate\Support\Facades\DB;
use Laravel\Nova\Fields\Hidden;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Text;
use Outl1ne\MultiselectField\Multiselect;
class OrderItemFieldsForCreate
{
/**
* Order item fields for create
*/
public static function make($resource, $request): array
{
return [
ID::make(),
Hidden::make('order_id')
->default($request->viaResource()),
Multiselect::make(__('Product'), 'product_id')
->asyncResource(Product::class)
->placeholder(__('Search by id, name, sku, barcode...'))
->singleSelect()
->rules('required'),
Number::make(__('Quantity'), 'quantity')
->rules('required', 'min:1')
->default(1),
Text::make(__('Price'), 'unit_price_amount')
->rules('required')
->dependsOn('product_id', function ($field, $request, $formData) {
if (! $formData->product_id || ! is_int($formData->product_id)) {
return;
}
$product = DB::table('products')->where('id', $formData->product_id)->first();
$field->setValue($product->price_amount);
})->fillUsing(function ($request, $model, $attribute, $requestAttribute) {
$product = ProductModel::find($request->product_id);
$model->unit_price_amount = $request->unit_price_amount;
$model->unit_cost_amount = $product->cost_amount;
$model->product_name = $product->name;
$model->channel_id = $product->channels()->first()?->id ?? tmpostChannel()->id;
}),
Number::make(__('Total'), 'total')
->dependsOn(['quantity', 'unit_price_amount'], function ($field, $request, $formData) {
if (! $formData->unit_price_amount || ! $formData->quantity) {
return;
}
$field->setValue($formData->unit_price_amount * $formData->quantity);
})->readonly(),
];
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Nova\Resources\Ecommerce\Product\Order\OrderItem;
use App\Repositories\Nova\NovaRepo;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\URL;
class OrderItemFieldsForIndex
{
/**
* Order item's index fields
*/
public static function make($resource): array
{
return [
ID::make()->sortable()->hidden(),
Text::make(
name: __('Image'),
attribute: fn () => NovaRepo::rawImage(url: $resource->product?->thumbnail())
)->asHtml(),
Text::make(
name: __('Product name'),
attribute: fn () => $resource->product?->novaDetailPage(),
)->displayUsing(function () use ($resource) {
$product = $resource->product;
if (! $product) {
return;
}
return sprintf('
<a href="%s" target="_blank" class="link-default"> %s <span class="link-default">%s</span> <span class="link-default">%s</span></a>',
$product->novaDetailPage(),
$product->name,
$product->color,
$product->size,
);
})->asHtml(),
URL::make(
name: __('Channel'),
attribute: fn () => $resource->channel?->novaDetailPage(),
)
->displayUsing(fn () => $resource->channel?->name)
->canSeeWhen('isAdmin', $resource),
Text::make(__('Cost amount'), fn () => $resource->product?->cost_amount),
Text::make(__('Price'), 'unit_price_amount'),
Text::make(__('Quantity'), 'quantity'),
Text::make(__('Total'), fn () => intval($resource->quantity) * floatval($resource->unit_price_amount)),
];
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Nova\Resources\Ecommerce\Product\Order\OrderItem;
use Laravel\Nova\Fields\Hidden;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Text;
class OrderItemFieldsForUpdate
{
/**
* Order item fields for update
*/
public static function make($resource, $request): array
{
return [
ID::make(),
Hidden::make('order_id'),
Text::make(__('Product name'), 'product_name')
->readonly(),
Number::make(__('Quantity'), 'quantity')
->rules('required', 'min:1'),
Text::make(__('Price'), 'unit_price_amount')
->rules('required'),
Number::make(__('Total'), 'total')
->dependsOn(['quantity', 'unit_price_amount'], function ($field, $request, $formData) {
if (! $formData->unit_price_amount || ! $formData->quantity) {
return;
}
$field->setValue($formData->unit_price_amount * $formData->quantity);
})->readonly(),
];
}
}