wip
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Resources\Ecommerce\Product\Order\Concerns;
|
||||
|
||||
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
|
||||
use App\Models\Ecommerce\Product\Order\Status\OrderStatus;
|
||||
use App\Models\System\Settings\Location\Region;
|
||||
use App\Nova\Fields\FieldHelpers;
|
||||
use Laravel\Nova\Fields\Badge;
|
||||
use Laravel\Nova\Fields\Date;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
trait HasFieldsForIndex
|
||||
{
|
||||
/**
|
||||
* Get the fields displayed by the resource.
|
||||
*/
|
||||
public function fieldsForIndex(NovaRequest $request): array
|
||||
{
|
||||
return [
|
||||
ID::make()->sortable(),
|
||||
|
||||
Text::make(__('Customer'), 'customer_name')
|
||||
->canSeeWhen('systemUser', $this)
|
||||
->sortable(),
|
||||
|
||||
Text::make(__('Phone'), 'customer_phone')
|
||||
->canSeeWhen('systemUser', $this)
|
||||
->sortable(),
|
||||
|
||||
Select::make(__('Welaýat'), 'region')
|
||||
->displayUsingLabels()
|
||||
->options(Region::values())
|
||||
->canSeeWhen('systemUser', $this)
|
||||
->sortable(),
|
||||
|
||||
Select::make(__('Delivery time'), 'delivery_time')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderShipping::times())
|
||||
->rules('required')
|
||||
->sortable(),
|
||||
|
||||
Date::make(__('Delivery date'), 'delivery_at')
|
||||
->displayUsing(FieldHelpers::tmDate())
|
||||
->sortable(),
|
||||
|
||||
Text::make(__('Total'), fn () => $this->resource->fullPriceWithShipping().' TMT')
|
||||
->canSeeWhen('systemUser', $this)
|
||||
->sortable(),
|
||||
|
||||
Badge::make('Status')->map(OrderStatus::classes())->addTypes([
|
||||
'primary' => 'dark:bg-gray-900 bg-gray-600 text-white',
|
||||
])->labels(OrderStatus::values())->sortable(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Resources\Ecommerce\Product\Order\Concerns;
|
||||
|
||||
use App\Models\Ecommerce\Product\Order\Payment\OrderPayment;
|
||||
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
|
||||
use App\Models\Ecommerce\Product\Order\Status\OrderStatus;
|
||||
use App\Models\System\Settings\Location\Province;
|
||||
use App\Models\System\Settings\Location\Region;
|
||||
use App\Models\System\Settings\OS;
|
||||
use App\Repositories\Ecommerce\Order\NovaOrderRepository;
|
||||
use Illuminate\Support\Str;
|
||||
use Laravel\Nova\Fields\Date;
|
||||
use Laravel\Nova\Fields\Hidden;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Nurmuhammet\NovaInputmask\NovaInputmask;
|
||||
|
||||
class OrderFieldsForCreate
|
||||
{
|
||||
/**
|
||||
* Order fields for create
|
||||
*/
|
||||
public static function make($resource, $request): array
|
||||
{
|
||||
return [
|
||||
Hidden::make('number')->default(Str::random(30)),
|
||||
Hidden::make('user_id')->default($request->user()->id),
|
||||
Hidden::make('source_app')->default(OS::ADMIN),
|
||||
|
||||
ID::make(),
|
||||
|
||||
Text::make(__('Customer name'), 'customer_name')
|
||||
->rules('nullable', 'string', 'max:255')
|
||||
->canSeeWhen('systemUser', $resource)
|
||||
->default('Walk in customer'),
|
||||
|
||||
NovaInputmask::make(__('Customer phone'), 'customer_phone')
|
||||
->mask(phoneMaskFormat())
|
||||
->storeRawValue()
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
Select::make(__('Region'), 'region')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(Region::values())
|
||||
->default(Region::default())
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
Select::make(__('Province'), 'province_id')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->dependsOn(['region'], NovaOrderRepository::dependsOnWhere('region', Province::class)),
|
||||
|
||||
Text::make(__('Customer address'), 'customer_address')
|
||||
->rules('nullable', 'string', 'max:255'),
|
||||
|
||||
Select::make(__('Payment type'), 'payment_type_id')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderPayment::values())
|
||||
->default(OrderPayment::default()),
|
||||
|
||||
Select::make(__('Shipping method'), 'shipping_method')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderShipping::values())
|
||||
->default(OrderShipping::default())
|
||||
->sortable(),
|
||||
|
||||
Text::make(__('Shipping price'), 'shipping_price')
|
||||
->rules('required', 'numeric')
|
||||
->dependsOn('shipping_method', function ($field, $request, $formData) {
|
||||
if ($formData->shipping_method) {
|
||||
$field->setValue(OrderShipping::priceFor($formData->shipping_method));
|
||||
}
|
||||
}),
|
||||
|
||||
Date::make(__('Delivery at'), 'delivery_at')
|
||||
->default(date('Y-m-d'))
|
||||
->rules('required'),
|
||||
|
||||
Select::make(__('Delivery time'), 'delivery_time')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderShipping::times())
|
||||
->default(OrderShipping::defaultTime()),
|
||||
|
||||
Text::make(__('Additional tax'), 'additional_tax')
|
||||
->rules('nullable', 'numeric'),
|
||||
|
||||
Select::make(__('Status'), 'status')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderStatus::values())
|
||||
->default(OrderStatus::default()),
|
||||
|
||||
Text::make(__('Notes'), 'notes')
|
||||
->rules('nullable', 'string', 'max:255'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Resources\Ecommerce\Product\Order\Concerns;
|
||||
|
||||
use App\Models\Ecommerce\Product\Order\Status\OrderStatus;
|
||||
use App\Models\System\Settings\OS;
|
||||
use App\Nova\Resources\Ecommerce\Product\Order\OrderItem;
|
||||
use App\Nova\Resources\System\Payments\PaymentType;
|
||||
use App\Nova\User;
|
||||
use Laravel\Nova\Fields\Badge;
|
||||
use Laravel\Nova\Fields\BelongsTo;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\HasMany;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Nurmuhammet\NovaInputmask\NovaInputmask;
|
||||
|
||||
class OrderFieldsForDetail
|
||||
{
|
||||
/**
|
||||
* Order fields for detail
|
||||
*/
|
||||
public static function make($resource, $request): array
|
||||
{
|
||||
// nova has a wierd bug, can load detail fields while on Index
|
||||
if (! $request->isResourceDetailRequest()) {
|
||||
if ($request->viaResource && $request->viaRelationship && $request->relationshipType) {
|
||||
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
ID::make()->sortable(),
|
||||
|
||||
Text::make(__('Customer name'), 'customer_name'),
|
||||
|
||||
NovaInputmask::make(__('Customer phone'), 'customer_phone')
|
||||
->mask(phoneMaskFormat())
|
||||
->storeRawValue(),
|
||||
|
||||
Text::make(
|
||||
name: __('Address'),
|
||||
attribute: fn ($model) => view('vendor.nova.resources.order.create-fields.address', [
|
||||
'model' => $model,
|
||||
])->render()
|
||||
)
|
||||
->asHtml(),
|
||||
|
||||
BelongsTo::make(__('Payment type'), 'paymentType', PaymentType::class),
|
||||
|
||||
Text::make(
|
||||
name: __('Shipping'),
|
||||
attribute: fn ($model) => view('vendor.nova.resources.order.create-fields.shipping', [
|
||||
'model' => $model,
|
||||
])->render()
|
||||
)
|
||||
->asHtml(),
|
||||
|
||||
Text::make(
|
||||
name: __('Shipping time'),
|
||||
attribute: fn ($model) => view('vendor.nova.resources.order.create-fields.shipping-time', [
|
||||
'model' => $model,
|
||||
])->render()
|
||||
)
|
||||
->asHtml(),
|
||||
|
||||
Select::make(__('App'), 'source_app')
|
||||
->displayUsingLabels()
|
||||
->options(OS::apps())
|
||||
->sortable(),
|
||||
|
||||
Badge::make('Status')->map(OrderStatus::classes())->addTypes([
|
||||
'primary' => 'dark:bg-gray-900 bg-gray-600 text-white',
|
||||
])->labels(OrderStatus::values())->sortable(),
|
||||
|
||||
Text::make(__('Notes'), 'notes'),
|
||||
|
||||
Text::make(__('Additional tax'), fn () => $resource->additional_tax.' TMT')
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
Text::make(__('Products total'), fn () => $resource->total().' TMT')
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
Text::make(__('Total'), fn () => $resource->fullPriceWithShipping().' TMT')
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
DateTime::make(__('Created at'), 'created_at')
|
||||
->turkmenDate(),
|
||||
|
||||
BelongsTo::make(__('Filled by:'), 'user', User::class),
|
||||
|
||||
HasMany::make(__('Products'), 'items', OrderItem::class),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Resources\Ecommerce\Product\Order\Concerns;
|
||||
|
||||
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
|
||||
use App\Models\Ecommerce\Product\Order\Status\OrderStatus;
|
||||
use App\Models\System\Settings\Location\Region;
|
||||
use App\Models\System\Settings\OS;
|
||||
use App\Nova\Fields\FieldHelpers;
|
||||
use Laravel\Nova\Fields\Badge;
|
||||
use Laravel\Nova\Fields\Date;
|
||||
use Laravel\Nova\Fields\DateTime;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Nurmuhammet\NovaInputmask\NovaInputmask;
|
||||
|
||||
class OrderFieldsForIndex
|
||||
{
|
||||
/**
|
||||
* Fields for index
|
||||
*/
|
||||
public static function make($resource, $request): array
|
||||
{
|
||||
return [
|
||||
ID::make()->sortable(),
|
||||
|
||||
Text::make(__('Customer'), 'customer_name')
|
||||
->sortable(),
|
||||
|
||||
NovaInputmask::make(__('Customer phone'), 'customer_phone')
|
||||
->mask(phoneMaskFormat())
|
||||
->storeRawValue()
|
||||
->sortable(),
|
||||
|
||||
Select::make(__('Welaýat'), 'region')
|
||||
->displayUsingLabels()
|
||||
->options(Region::values())
|
||||
->sortable(),
|
||||
|
||||
Select::make(__('Delivery time'), 'delivery_time')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderShipping::times())
|
||||
->rules('required')
|
||||
->sortable(),
|
||||
|
||||
Date::make(__('Delivery date'), 'delivery_at')
|
||||
->displayUsing(FieldHelpers::tmDate())
|
||||
->sortable(),
|
||||
|
||||
Select::make(__('Shipping method'), 'shipping_method')
|
||||
->displayUsingLabels()
|
||||
->options(OrderShipping::values())
|
||||
->default(OrderShipping::default())
|
||||
->sortable(),
|
||||
|
||||
Select::make(__('Source'), 'source_app')
|
||||
->displayUsingLabels()
|
||||
->options(OS::apps())
|
||||
->sortable(),
|
||||
|
||||
Text::make(__('Total'), fn () => $resource->fullPriceWithShipping().' TMT')
|
||||
->canSeeWhen('systemUser', $resource)
|
||||
->sortable(),
|
||||
|
||||
DateTime::make(__('Created at'), 'created_at')
|
||||
->turkmenDate(),
|
||||
|
||||
Badge::make('Status')
|
||||
->map(OrderStatus::classes())
|
||||
->labels(OrderStatus::values())
|
||||
->addTypes([
|
||||
'primary' => 'dark:bg-gray-900 bg-gray-600 text-white',
|
||||
])
|
||||
->sortable(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
namespace App\Nova\Resources\Ecommerce\Product\Order\Concerns;
|
||||
|
||||
use App\Models\Ecommerce\Product\Order\Payment\OrderPayment;
|
||||
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
|
||||
use App\Models\Ecommerce\Product\Order\Status\OrderStatus;
|
||||
use App\Models\System\Settings\Location\Province;
|
||||
use App\Models\System\Settings\Location\Region;
|
||||
use App\Repositories\Ecommerce\Order\NovaOrderRepository;
|
||||
use Laravel\Nova\Fields\Date;
|
||||
use Laravel\Nova\Fields\ID;
|
||||
use Laravel\Nova\Fields\Select;
|
||||
use Laravel\Nova\Fields\Text;
|
||||
use Nurmuhammet\NovaInputmask\NovaInputmask;
|
||||
|
||||
class OrderFieldsForUpdate
|
||||
{
|
||||
/**
|
||||
* Order
|
||||
*/
|
||||
public static function make($resource, $request): array
|
||||
{
|
||||
return [
|
||||
ID::make()->sortable(),
|
||||
|
||||
Text::make(__('Customer name'), 'customer_name')
|
||||
->rules('nullable', 'string', 'max:255')
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
NovaInputmask::make(__('Customer phone'), 'customer_phone')
|
||||
->mask(phoneMaskFormat())
|
||||
->storeRawValue()
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
Select::make(__('Region'), 'region')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(Region::values())
|
||||
->default(Region::default())
|
||||
->canSeeWhen('systemUser', $resource),
|
||||
|
||||
Select::make(__('Province'), 'province_id')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->dependsOn(['region'], NovaOrderRepository::dependsOnWhere('region', Province::class)),
|
||||
|
||||
Text::make(__('Customer address'), 'customer_address')
|
||||
->rules('nullable', 'string', 'max:255'),
|
||||
|
||||
Select::make(__('Payment type'), 'payment_type_id')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderPayment::values())
|
||||
->default(OrderPayment::default()),
|
||||
|
||||
Select::make(__('Shipping method'), 'shipping_method')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderShipping::values())
|
||||
->default(OrderShipping::default())
|
||||
->sortable(),
|
||||
|
||||
Text::make(__('Shipping price'), 'shipping_price')
|
||||
->rules('required', 'numeric')
|
||||
->dependsOn('shipping_method', function ($field, $request, $formData) use ($resource) {
|
||||
if ($formData->shipping_price) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($formData->shipping_method) {
|
||||
$field->setValue(OrderShipping::orderShippingPrice($resource));
|
||||
}
|
||||
}),
|
||||
|
||||
Text::make(__('Additional tax'), 'additional_tax')
|
||||
->rules('nullable', 'numeric'),
|
||||
|
||||
Date::make(__('Delivery at'), 'delivery_at')
|
||||
->default(date('Y-m-d'))
|
||||
->rules('required'),
|
||||
|
||||
Select::make(__('Delivery time'), 'delivery_time')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderShipping::times())
|
||||
->default(OrderShipping::defaultTime()),
|
||||
|
||||
Select::make(__('Status'), 'status')
|
||||
->displayUsingLabels()
|
||||
->searchable()
|
||||
->options(OrderStatus::values())
|
||||
->default(OrderStatus::default()),
|
||||
|
||||
Text::make(__('Notes'), 'notes')
|
||||
->rules('nullable', 'string', 'max:255'),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user