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,40 @@
<?php
namespace App\Repositories\Ecommerce\Order;
use Closure;
class NovaOrderRepository
{
/**
* Mask value
*
* @param string $attribute
*/
public static function mask($resource, $attribute): Closure
{
return fn () => $resource->{$attribute} ? mask_phone($resource->{$attribute}) : '';
}
/**
* Fill form with masking value mask
*/
public static function fillUnmasked(): Closure
{
return function ($request, $model, $attribute, $requestAttribute) {
$model->{$attribute} = unmask_phone($request->input($attribute));
};
}
/**
* Depends on
*/
public static function dependsOnWhere(string $attribute, string $model): Closure
{
return function ($field, $request, $formData) use ($attribute, $model) {
if ($formData->{$attribute}) {
$field->options($model::where('region', $formData->{$attribute})->pluck('name', 'id'));
}
};
}
}

View File

@@ -0,0 +1,99 @@
<?php
namespace App\Repositories\Ecommerce\Order;
use App\Events\Ecommerce\Product\Order\OrderCreated;
use App\Models\Ecommerce\Product\Order\Order;
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
use Illuminate\Support\Facades\DB;
class OrderRepository
{
/**
* Order repo
*/
public function __construct(
protected array $data = [],
) {}
/**
* Create new order
*/
public function create()
{
$order = Order::create($this->data);
auth()->user()->carts()->with(['product' => [
'media',
'channels',
]])->get()->each(function ($cart) use ($order) {
DB::table('order_items')->insert([
'product_name' => $cart->product->name,
'product_id' => $cart->product_id,
'order_id' => $order->id,
'channel_id' => $cart->product->channels->first()?->id ?? tmpostChannel()->id,
'quantity' => $cart->product_quantity,
'unit_price_amount' => $cart->product->price_amount,
'unit_cost_amount' => $cart->product->cost_amount,
'created_at' => now(),
'updated_at' => now(),
]);
$cart->product->update([
'stock' => $cart->product->stock - $cart->product_quantity,
]);
});
auth()->user()->carts()->delete();
OrderCreated::dispatch($order);
return $order;
}
/**
* Available times
*/
public static function availableTimes(): array
{
$today = now()->format('d.m.Y');
$tomorrow = now()->addHour(24)->format('d.m.Y');
$times = [
'today' => [],
'tomorrow' => [],
];
if (strtotime('now') <= strtotime('09:00')) {
$times['today'][] = [
'date' => $today,
'hour' => OrderShipping::MORNING,
];
}
if (strtotime('now') <= strtotime('13:00')) {
$times['today'][] = [
'date' => $today,
'hour' => OrderShipping::EVENING,
];
}
$times['tomorrow'] = [
[
'date' => $tomorrow,
'hour' => OrderShipping::MORNING,
],
[
'date' => $tomorrow,
'hour' => OrderShipping::EVENING,
],
];
return [
'dates' => [
'today' => $today,
'tomorrow' => $tomorrow,
],
'hours' => $times,
];
}
}