introduce 'checkout.order.orderitem.save.[before/after]' events

This commit is contained in:
Herbert 2019-11-18 16:04:45 +01:00
parent 298c24d0f9
commit c54d803bbf
1 changed files with 31 additions and 18 deletions

View File

@ -3,12 +3,11 @@
namespace Webkul\Sales\Repositories;
use Illuminate\Container\Container as App;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Event;
use Webkul\Core\Eloquent\Repository;
use Webkul\Sales\Contracts\Order;
use Webkul\Sales\Repositories\OrderItemRepository;
use Webkul\Core\Models\CoreConfig;
use Webkul\Sales\Contracts\Order;
/**
* Order Reposotory
@ -35,8 +34,9 @@ class OrderRepository extends Repository
/**
* Create a new repository instance.
*
* @param Webkul\Sales\Repositories\OrderItemRepository $orderItemRepository
* @param Webkul\Sales\Repositories\DownloadableLinkPurchasedRepository $downloadableLinkPurchasedRepository
* @param Webkul\Sales\Repositories\OrderItemRepository $orderItemRepository
* @param Webkul\Sales\Repositories\DownloadableLinkPurchasedRepository $downloadableLinkPurchasedRepository
*
* @return void
*/
public function __construct(
@ -65,6 +65,7 @@ class OrderRepository extends Repository
/**
* @param array $data
*
* @return mixed
*/
public function create(array $data)
@ -101,6 +102,8 @@ class OrderRepository extends Repository
$order->addresses()->create($data['billing_address']);
foreach ($data['items'] as $item) {
Event::fire('checkout.order.orderitem.save.before', $data);
$orderItem = $this->orderItemRepository->create(array_merge($item, ['order_id' => $order->id]));
if (isset($item['children']) && $item['children']) {
@ -112,6 +115,8 @@ class OrderRepository extends Repository
$this->orderItemRepository->manageInventory($orderItem);
$this->downloadableLinkPurchasedRepository->saveLinks($orderItem, 'available');
Event::fire('checkout.order.orderitem.save.after', $data);
}
Event::fire('checkout.order.save.after', $order);
@ -128,6 +133,7 @@ class OrderRepository extends Repository
/**
* @param int $orderId
*
* @return mixed
*/
public function cancel($orderId)
@ -152,11 +158,11 @@ class OrderRepository extends Repository
} else {
$orderItems[] = $item;
}
foreach ($orderItems as $orderItem) {
if ($orderItem->product)
$this->orderItemRepository->returnQtyToProductInventory($orderItem);
if ($orderItem->qty_ordered) {
$orderItem->qty_canceled += $orderItem->qty_to_cancel;
$orderItem->save();
@ -188,19 +194,21 @@ class OrderRepository extends Repository
{
$config = new CoreConfig();
$invoiceNumberPrefix = $config->where('code','=',"sales.orderSettings.order_number.order_number_prefix")->first()
? $config->where('code','=',"sales.orderSettings.order_number.order_number_prefix")->first()->value : false;
$invoiceNumberLength = $config->where('code','=',"sales.orderSettings.order_number.order_number_length")->first()
? $config->where('code','=',"sales.orderSettings.order_number.order_number_length")->first()->value : false;
$invoiceNumberSuffix = $config->where('code','=',"sales.orderSettings.order_number.order_number_suffix")->first()
? $config->where('code','=',"sales.orderSettings.order_number.order_number_suffix")->first()->value: false;
foreach ([
'Prefix' => 'prefix',
'Length' => 'length',
'Suffix' => 'suffix',
] as $varSuffix => $confKey) {
$var = "invoiceNumber{$varSuffix}";
$$var = $config
->where('code', '=', "sales.orderSettings.order_number.{$confKey}")
->first() ?: false;
}
$lastOrder = $this->model->orderBy('id', 'desc')->limit(1)->first();
$lastId = $lastOrder ? $lastOrder->id : 0;
if ($invoiceNumberLength && ( $invoiceNumberPrefix || $invoiceNumberSuffix) ) {
if ($invoiceNumberLength && ($invoiceNumberPrefix || $invoiceNumberSuffix)) {
$invoiceNumber = $invoiceNumberPrefix . sprintf("%0{$invoiceNumberLength}d", 0) . ($lastId + 1) . $invoiceNumberSuffix;
} else {
$invoiceNumber = $lastId + 1;
@ -211,13 +219,14 @@ class OrderRepository extends Repository
/**
* @param mixed $order
*
* @return void
*/
public function isInCompletedState($order)
{
$totalQtyOrdered = $totalQtyInvoiced = $totalQtyShipped = $totalQtyRefunded = $totalQtyCanceled = 0;
foreach ($order->items()->get() as $item) {
foreach ($order->items()->get() as $item) {
$totalQtyOrdered += $item->qty_ordered;
$totalQtyInvoiced += $item->qty_invoiced;
@ -241,6 +250,7 @@ class OrderRepository extends Repository
/**
* @param mixed $order
*
* @return void
*/
public function isInCanceledState($order)
@ -257,13 +267,14 @@ class OrderRepository extends Repository
/**
* @param mixed $order
*
* @return void
*/
public function isInClosedState($order)
{
$totalQtyOrdered = $totalQtyRefunded = $totalQtyCanceled = 0;
foreach ($order->items()->get() as $item) {
foreach ($order->items()->get() as $item) {
$totalQtyOrdered += $item->qty_ordered;
$totalQtyRefunded += $item->qty_refunded;
$totalQtyCanceled += $item->qty_canceled;
@ -274,6 +285,7 @@ class OrderRepository extends Repository
/**
* @param mixed $order
*
* @return void
*/
public function updateOrderStatus($order)
@ -294,6 +306,7 @@ class OrderRepository extends Repository
/**
* @param mixed $order
*
* @return mixed
*/
public function collectTotals($order)