diff --git a/.gitignore b/.gitignore
index 1eea901cd..fa1eccb1e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,6 @@
/public/js
/public/vendor
/public/themes
-/storage/*.key
/vendor
/.idea
/.vscode
@@ -20,3 +19,6 @@ composer.lock
yarn.lock
package-lock.json
yarn.lock
+.php_cs.cache
+storage/
+storage/*.key
diff --git a/composer.json b/composer.json
index 381676d04..06554c6dc 100755
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,6 @@
"ext-pdo_mysql": "*",
"ext-tokenizer": "*",
"astrotomic/laravel-translatable": "^11.0.0",
- "alkhachatryan/laravel-web-console": "1.5.1",
"barryvdh/laravel-dompdf": "0.8.3",
"doctrine/dbal": "2.9.2",
"fideloper/proxy": "^4.0",
diff --git a/config/laravelwebconsole.php b/config/laravelwebconsole.php
deleted file mode 100644
index 1e3be3bce..000000000
--- a/config/laravelwebconsole.php
+++ /dev/null
@@ -1,51 +0,0 @@
- false,
-
- // Single-user credentials (REQUIRED)
- 'user' => [
- 'name' => env('CONSOLE_USER_NAME', 'root'),
- 'password' => env('CONSOLE_USER_PASSWORD', 'root'),
- ],
-
- // Multi-user credentials (OPTIONAL)
- // Example: 'user' => 'password', 'user1' => 'password1'
- 'accounts' => [
- // 'user' => 'password',
- ],
-
- // Hash incoming password
- // By default it's sha256
- 'password_hash_algorithm' => '',
-
- // Home directory (multi-user mode supported)
- // Example: 'home_dir' => '/tmp';
- // 'home_dir' => array('user1' => '/home/user1', 'user2' => '/home/user2');
- 'home_dir' => '',
-];
diff --git a/packages/Webkul/Admin/src/Http/Controllers/Development/WebConsoleController.php b/packages/Webkul/Admin/src/Http/Controllers/Development/WebConsoleController.php
deleted file mode 100755
index 649f3c730..000000000
--- a/packages/Webkul/Admin/src/Http/Controllers/Development/WebConsoleController.php
+++ /dev/null
@@ -1,24 +0,0 @@
-
- * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
- */
-class WebConsoleController extends Controller
-{
- /**
- * Show the Web Console.
- *
- * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
- */
- public function index(){
- return LaravelWebConsole::show();
- }
-}
\ No newline at end of file
diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php
index 22bd07448..50c6557bd 100755
--- a/packages/Webkul/Admin/src/Http/routes.php
+++ b/packages/Webkul/Admin/src/Http/routes.php
@@ -765,10 +765,7 @@ Route::group(['middleware' => ['web']], function () {
Route::prefix('development')->group(function () {
Route::get('/', 'Webkul\Admin\Http\Controllers\Development\DashboardController@index')
->name('admin.development.index');
-
- Route::get('webconsole', 'Webkul\Admin\Http\Controllers\Development\WebConsoleController@index')
- ->name('admin.development.webconsole');
});
});
});
-});
\ No newline at end of file
+});
diff --git a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php
index 534bc1bef..c635af49e 100755
--- a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php
+++ b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php
@@ -48,6 +48,8 @@
+ {!! view_render_event('sales.order.tabs.before', ['order' => $order]) !!}
+
@@ -506,8 +508,10 @@
+
+ {!! view_render_event('sales.order.tabs.after', ['order' => $order]) !!}
-@stop
\ No newline at end of file
+@stop
diff --git a/packages/Webkul/Core/src/Core.php b/packages/Webkul/Core/src/Core.php
index 9bfc791a3..963af1b00 100755
--- a/packages/Webkul/Core/src/Core.php
+++ b/packages/Webkul/Core/src/Core.php
@@ -211,7 +211,13 @@ class Core
if ($locale)
return $locale;
- return $locale = $this->localeRepository->findOneByField('code', app()->getLocale());
+ $locale = $this->localeRepository->findOneByField('code', app()->getLocale());
+
+ if(!$locale) {
+ $locale = $this->localeRepository->findOneByField('code', config('app.fallback_locale'));
+ }
+
+ return $locale;
}
/**
diff --git a/packages/Webkul/Core/src/Templates/on-boarding.php b/packages/Webkul/Core/src/Templates/on-boarding.php
index e5311fbd6..21ff4eaea 100644
--- a/packages/Webkul/Core/src/Templates/on-boarding.php
+++ b/packages/Webkul/Core/src/Templates/on-boarding.php
@@ -9,6 +9,6 @@
>
Welcome to the Bagisto project! Bagisto Community is an open-source e-commerce ecosystem
-which is built on top of top of Laravel and Vue.js.
+which is built on top of Laravel and Vue.js.
Made with 💖 by the Bagisto Team. Happy helping :)
diff --git a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php
index 39c8bf890..72da2f48d 100755
--- a/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php
+++ b/packages/Webkul/Sales/src/Repositories/OrderItemRepository.php
@@ -3,6 +3,7 @@
namespace Webkul\Sales\Repositories;
use Illuminate\Container\Container as App;
+use Illuminate\Support\Facades\Event;
use Webkul\Core\Eloquent\Repository;
use Webkul\Sales\Contracts\OrderItem;
@@ -51,7 +52,7 @@ class OrderItemRepository extends Repository
$totalInvoiced = $baseTotalInvoiced = 0;
$taxInvoiced = $baseTaxInvoiced = 0;
-
+
$totalRefunded = $baseTotalRefunded = 0;
$taxRefunded = $baseTaxRefunded = 0;
diff --git a/packages/Webkul/Sales/src/Repositories/OrderRepository.php b/packages/Webkul/Sales/src/Repositories/OrderRepository.php
index 7065ef8bd..c5fca17c1 100755
--- a/packages/Webkul/Sales/src/Repositories/OrderRepository.php
+++ b/packages/Webkul/Sales/src/Repositories/OrderRepository.php
@@ -3,15 +3,15 @@
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;
+use Webkul\Sales\Models\Order as OrderModel;
/**
- * Order Reposotory
+ * Order Repository
*
* @author Jitendra Singh
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
@@ -35,16 +35,16 @@ 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(
OrderItemRepository $orderItemRepository,
DownloadableLinkPurchasedRepository $downloadableLinkPurchasedRepository,
App $app
- )
- {
+ ) {
$this->orderItemRepository = $orderItemRepository;
$this->downloadableLinkPurchasedRepository = $downloadableLinkPurchasedRepository;
@@ -58,13 +58,14 @@ class OrderRepository extends Repository
* @return Mixed
*/
- function model()
+ public function model()
{
return Order::class;
}
/**
* @param array $data
+ *
* @return mixed
*/
public function create(array $data)
@@ -95,12 +96,15 @@ class OrderRepository extends Repository
$order->payment()->create($data['payment']);
- if (isset($data['shipping_address']))
+ if (isset($data['shipping_address'])) {
$order->addresses()->create($data['shipping_address']);
+ }
$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 +116,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,20 +134,23 @@ class OrderRepository extends Repository
/**
* @param int $orderId
+ *
* @return mixed
*/
public function cancel($orderId)
{
$order = $this->findOrFail($orderId);
- if (! $order->canCancel())
+ if (! $order->canCancel()) {
return false;
+ }
Event::fire('sales.order.cancel.before', $order);
foreach ($order->items as $item) {
- if (! $item->qty_to_cancel)
+ if (! $item->qty_to_cancel) {
continue;
+ }
$orderItems = [];
@@ -152,11 +161,12 @@ class OrderRepository extends Repository
} else {
$orderItems[] = $item;
}
-
+
foreach ($orderItems as $orderItem) {
- if ($orderItem->product)
+ if ($orderItem->product) {
$this->orderItemRepository->returnQtyToProductInventory($orderItem);
-
+ }
+
if ($orderItem->qty_ordered) {
$orderItem->qty_canceled += $orderItem->qty_to_cancel;
$orderItem->save();
@@ -188,19 +198,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.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 +223,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;
@@ -233,14 +246,16 @@ class OrderRepository extends Repository
if ($totalQtyOrdered != ($totalQtyRefunded + $totalQtyCanceled)
&& $totalQtyOrdered == $totalQtyInvoiced + $totalQtyCanceled
- && $totalQtyOrdered == $totalQtyShipped + $totalQtyRefunded + $totalQtyCanceled)
+ && $totalQtyOrdered == $totalQtyShipped + $totalQtyRefunded + $totalQtyCanceled) {
return true;
+ }
return false;
}
/**
* @param mixed $order
+ *
* @return void
*/
public function isInCanceledState($order)
@@ -257,13 +272,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,19 +290,22 @@ class OrderRepository extends Repository
/**
* @param mixed $order
+ *
* @return void
*/
public function updateOrderStatus($order)
{
$status = 'processing';
- if ($this->isInCompletedState($order))
+ if ($this->isInCompletedState($order)) {
$status = 'completed';
+ }
- if ($this->isInCanceledState($order))
+ if ($this->isInCanceledState($order)) {
$status = 'canceled';
- else if ($this->isInClosedState($order))
+ } elseif ($this->isInClosedState($order)) {
$status = 'closed';
+ }
$order->status = $status;
$order->save();
@@ -294,6 +313,7 @@ class OrderRepository extends Repository
/**
* @param mixed $order
+ *
* @return mixed
*/
public function collectTotals($order)
@@ -352,4 +372,4 @@ class OrderRepository extends Repository
return $order;
}
-}
\ No newline at end of file
+}
diff --git a/packages/Webkul/Sales/src/tests/sales/order/OrderRepositoryCest.php b/packages/Webkul/Sales/src/tests/sales/order/OrderRepositoryCest.php
new file mode 100644
index 000000000..ea2dddbb7
--- /dev/null
+++ b/packages/Webkul/Sales/src/tests/sales/order/OrderRepositoryCest.php
@@ -0,0 +1,38 @@
+getProperty('model');
+ $property->setAccessible(true);
+
+ $this->repository = $reflection->newInstanceWithoutConstructor();
+ $property->setValue($this->repository, new Order());
+ }
+
+ public function testGenerateIncrementIdOnEmptyDatabase(UnitTester $I)
+ {
+ $result = $this->repository->generateIncrementId();
+
+ $I->assertEquals(1, $result);
+ }
+
+ public function testGenerateIncrementIdOnFilledDatabase(UnitTester $I)
+ {
+ $order = new Order(['id' => rand(666, 1337)]);
+ $order->save();
+
+ $result = $this->repository->generateIncrementId();
+
+ $I->assertEquals($order->id + 1, $result);
+ }
+}
diff --git a/packages/Webkul/Ui/src/Resources/assets/js/directives/slugify.vue b/packages/Webkul/Ui/src/Resources/assets/js/directives/slugify.vue
index 30cb16415..6399fadb6 100755
--- a/packages/Webkul/Ui/src/Resources/assets/js/directives/slugify.vue
+++ b/packages/Webkul/Ui/src/Resources/assets/js/directives/slugify.vue
@@ -1,14 +1,21 @@