wip
This commit is contained in:
40
app/Repositories/Ecommerce/Order/NovaOrderRepository.php
Normal file
40
app/Repositories/Ecommerce/Order/NovaOrderRepository.php
Normal 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'));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
99
app/Repositories/Ecommerce/Order/OrderRepository.php
Normal file
99
app/Repositories/Ecommerce/Order/OrderRepository.php
Normal 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,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user