WIP
This commit is contained in:
@@ -40,7 +40,11 @@ class CheckoutOrderRequest extends FormRequest
|
|||||||
'customer_address' => ['required', 'string', 'max:255'],
|
'customer_address' => ['required', 'string', 'max:255'],
|
||||||
|
|
||||||
'shipping_method' => ['required', 'string', 'max:255', Rule::in(array_keys(OrderShipping::values()))],
|
'shipping_method' => ['required', 'string', 'max:255', Rule::in(array_keys(OrderShipping::values()))],
|
||||||
|
|
||||||
'shipping_price' => ['nullable', 'numeric'],
|
'shipping_price' => ['nullable', 'numeric'],
|
||||||
|
'product_ids' => ['required', 'array'],
|
||||||
|
'product_ids.*' => ['required', 'integer', 'exists:products,id'],
|
||||||
|
|
||||||
'payment_type_id' => ['required', Rule::in(array_keys(OrderPayment::values()))],
|
'payment_type_id' => ['required', Rule::in(array_keys(OrderPayment::values()))],
|
||||||
|
|
||||||
'notes' => ['nullable', 'string', 'max:255'],
|
'notes' => ['nullable', 'string', 'max:255'],
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use App\Events\Ecommerce\Product\Order\OrderCreated;
|
|||||||
use App\Models\Ecommerce\Product\Order\Order;
|
use App\Models\Ecommerce\Product\Order\Order;
|
||||||
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
|
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
class OrderRepository
|
class OrderRepository
|
||||||
{
|
{
|
||||||
@@ -21,30 +22,50 @@ class OrderRepository
|
|||||||
*/
|
*/
|
||||||
public function create()
|
public function create()
|
||||||
{
|
{
|
||||||
$order = Order::create($this->data);
|
$order = Order::create(Arr::except($this->data, ['product_ids']));
|
||||||
|
|
||||||
auth()->user()->carts()->with(['product' => [
|
if (isset($this->data['product_ids'])) {
|
||||||
'media',
|
foreach ($this->data['product_ids'] as $product_id) {
|
||||||
'channels',
|
$cartItems = auth()->user()->carts()->where('product_id', $product_id)->get();
|
||||||
]])->get()->each(function ($cart) use ($order) {
|
foreach ($cartItems as $cartItem) {
|
||||||
DB::table('order_items')->insert([
|
DB::table('order_items')->insert([
|
||||||
'product_name' => $cart->product->name,
|
'product_name' => $cartItem->product->name,
|
||||||
'product_id' => $cart->product_id,
|
'product_id' => $cartItem->product_id,
|
||||||
'order_id' => $order->id,
|
'order_id' => $order->id,
|
||||||
'channel_id' => $cart->product->channels->first()?->id ?? tmpostChannel()->id,
|
'channel_id' => $cartItem->product->channels->first()?->id ?? tmpostChannel()->id,
|
||||||
'quantity' => $cart->product_quantity,
|
'quantity' => $cartItem->product_quantity,
|
||||||
'unit_price_amount' => $cart->product->price_amount,
|
'unit_price_amount' => $cartItem->product->price_amount,
|
||||||
'unit_cost_amount' => $cart->product->cost_amount,
|
'unit_cost_amount' => $cartItem->product->cost_amount,
|
||||||
'created_at' => now(),
|
]);
|
||||||
'updated_at' => now(),
|
}
|
||||||
]);
|
$cartItems->each(function ($cartItem) {
|
||||||
|
$cartItem->delete();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
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([
|
$cart->product->update([
|
||||||
'stock' => $cart->product->stock - $cart->product_quantity,
|
'stock' => $cart->product->stock - $cart->product_quantity,
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
auth()->user()->carts()->delete();
|
auth()->user()->carts()->delete();
|
||||||
|
}
|
||||||
|
|
||||||
OrderCreated::dispatch($order);
|
OrderCreated::dispatch($order);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user