first upload all files

This commit is contained in:
NW
2023-06-11 13:14:03 +01:00
parent f14dbc52b5
commit c08b36d1b6
1705 changed files with 106852 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
<?php
namespace Modules\Order\Http\Controllers\Admin;
use Modules\Order\Entities\Order;
use Modules\Admin\Traits\HasCrudActions;
class OrderController
{
use HasCrudActions;
/**
* Model for the resource.
*
* @var string
*/
protected $model = Order::class;
/**
* The relations to eager load on every query.
*
* @var array
*/
protected $with = ['products', 'coupon', 'taxes'];
/**
* Label of the resource.
*
* @var string
*/
protected $label = 'order::orders.order';
/**
* View path of the resource.
*
* @var string
*/
protected $viewPath = 'order::admin.orders';
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Modules\Order\Http\Controllers\Admin;
use Modules\Order\Entities\Order;
use Modules\Checkout\Mail\Invoice;
use Illuminate\Support\Facades\Mail;
class OrderEmailController
{
/**
* Store a newly created resource in storage.
*
* @param \Modules\Order\Entities\Order $order
* @return \Illuminate\Http\Response
*/
public function store(Order $order)
{
Mail::to($order->customer_email)
->send(new Invoice($order));
return back()->with('success', trans('order::messages.invoice_sent'));
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace Modules\Order\Http\Controllers\Admin;
use Modules\Order\Entities\Order;
class OrderPrintController
{
/**
* Show the specified resource.
*
* @param \Modules\Order\Entities\Order $order
* @return \Illuminate\Http\Response
*/
public function show(Order $order)
{
$order->load('products', 'coupon', 'taxes');
return view('order::admin.orders.print.show', compact('order'));
}
}

View File

@@ -0,0 +1,74 @@
<?php
namespace Modules\Order\Http\Controllers\Admin;
use Modules\Order\Entities\Order;
use Modules\Order\Entities\OrderProduct;
use Modules\Order\Events\OrderStatusChanged;
class OrderStatusController
{
/**
* Update the specified resource in storage.
*
* @param \Modules\Order\Entities\Order $request
* @return \Illuminate\Http\Response
*/
public function update(Order $order)
{
$this->adjustStock($order);
$order->update(['status' => request('status')]);
$message = trans('order::messages.status_updated');
event(new OrderStatusChanged($order));
return $message;
}
private function adjustStock(Order $order)
{
if ($this->canceledOrRefunded(request('status'))) {
$this->restoreStock($order);
}
if ($this->canceledOrRefunded($order->status)) {
$this->reduceStock($order);
}
}
private function canceledOrRefunded($status)
{
return in_array($status, [Order::CANCELED, Order::REFUNDED]);
}
private function restoreStock(Order $order)
{
$order->products->each(function (OrderProduct $orderProduct) {
if ($orderProduct->product->manage_stock) {
$orderProduct->product->increment('qty', $orderProduct->qty);
}
if ($orderProduct->product->qty > 0) {
$orderProduct->product->markAsInStock();
}
});
}
private function reduceStock(Order $order)
{
$order->products->each(function (OrderProduct $orderProduct) {
if (
$orderProduct->product->manage_stock
&& $orderProduct->product->qty !== 0
) {
$orderProduct->product->decrement('qty', $orderProduct->qty);
}
if ($orderProduct->product->qty === 0) {
$orderProduct->product->markAsOutOfStock();
}
});
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace Modules\Order\Http\Controllers;
class OrderController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('order::index');
}
/**
* Show the specified resource.
*
* @return \Illuminate\Http\Response
*/
public function show()
{
return view('order::show');
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace Modules\Order\Http\Requests;
use Modules\Support\Country;
use Illuminate\Validation\Rule;
use Modules\Payment\Facades\Gateway;
use Modules\Core\Http\Requests\Request;
class StoreOrderRequest extends Request
{
/**
* Available attributes.
*
* @var string
*/
protected $availableAttributes = 'checkout::attributes';
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'customer_email' => ['required', 'email', $this->emailUniqueRule()],
'customer_phone' => ['required'],
'billing.first_name' => 'required',
'billing.last_name' => 'required',
'billing.address_1' => 'required',
'billing.city' => 'required',
'billing.zip' => 'required',
'billing.country' => ['required', Rule::in(Country::supportedCodes())],
'billing.state' => 'required',
'create_an_account' => 'boolean',
'password' => 'required_if:create_an_account,1',
'ship_to_a_different_address' => 'boolean',
'shipping.first_name' => 'required_if:ship_to_a_different_address,1',
'shipping.last_name' => 'required_if:ship_to_a_different_address,1',
'shipping.address_1' => 'required_if:ship_to_a_different_address,1',
'shipping.city' => 'required_if:ship_to_a_different_address,1',
'shipping.zip' => 'required_if:ship_to_a_different_address,1',
'shipping.country' => ['required_if:ship_to_a_different_address,1', Rule::in(Country::supportedCodes())],
'shipping.state' => 'required_if:ship_to_a_different_address,1',
'payment_method' => ['required', Rule::in(Gateway::names())],
'terms_and_conditions' => 'accepted',
];
}
private function emailUniqueRule()
{
return $this->create_an_account ? Rule::unique('users', 'email') : null;
}
}