Updated changelog
This commit is contained in:
parent
c021fb3fc8
commit
829ff20396
|
|
@ -1,6 +1,6 @@
|
|||
APP_NAME=Bagisto
|
||||
APP_ENV=local
|
||||
APP_VERSION=1.1.2
|
||||
APP_VERSION=1.2.0-BETA1
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_VERSION=1.1.2
|
||||
APP_VERSION=1.2.0-BETA1
|
||||
APP_KEY=base64:G4KY3tUsTaY9ONo1n/QyJvVLQZdJDgbIkSJswFK01HE=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#### This changelog consists the bug & security fixes and new features being included in the releases listed below.
|
||||
|
||||
## **v1.1.3 (14th of August 2020)** - *Release*
|
||||
## **v1.2.0-BETA1 (17th of August 2020)** - *Release*
|
||||
|
||||
* [feature] - Customer group price for products implemented
|
||||
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
* [feature] - One click upgrade
|
||||
|
||||
* [feature] - Social login
|
||||
* [feature] - Social login (Facebook, Twitter, Google, Linkedin, Github)
|
||||
|
||||
* [feature] - Social share
|
||||
|
||||
|
|
|
|||
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
namespace Webkul\API\Http\Controllers\Shop;
|
||||
|
||||
use Cart;
|
||||
use Exception;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\Checkout\Repositories\CartRepository;
|
||||
use Webkul\Checkout\Repositories\CartItemRepository;
|
||||
use Webkul\API\Http\Resources\Checkout\Cart as CartResource;
|
||||
use Cart;
|
||||
use Webkul\Customer\Repositories\WishlistRepository;
|
||||
use Webkul\API\Http\Resources\Checkout\Cart as CartResource;
|
||||
|
||||
class CartController extends Controller
|
||||
{
|
||||
|
|
@ -70,7 +70,7 @@ class CartController extends Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Get customer cart
|
||||
* Get customer cart.
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
|
|
@ -242,4 +242,55 @@ class CartController extends Controller
|
|||
'data' => $cart ? new CartResource($cart) : null,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply coupon code.
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function applyCoupon()
|
||||
{
|
||||
$couponCode = request()->get('code');
|
||||
|
||||
try {
|
||||
if (strlen($couponCode)) {
|
||||
Cart::setCouponCode($couponCode)->collectTotals();
|
||||
|
||||
if (Cart::getCart()->coupon_code == $couponCode) {
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => trans('shop::app.checkout.total.success-coupon'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => trans('shop::app.checkout.total.invalid-coupon'),
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
report($e);
|
||||
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => trans('shop::app.checkout.total.coupon-apply-issue'),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove coupon code.
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function removeCoupon()
|
||||
{
|
||||
Cart::removeCouponCode()->collectTotals();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => trans('shop::app.checkout.total.remove-coupon'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,12 +2,20 @@
|
|||
|
||||
namespace Webkul\API\Http\Controllers\Shop;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\Customer\Repositories\CustomerRepository;
|
||||
use Webkul\Customer\Repositories\CustomerGroupRepository;
|
||||
|
||||
class CustomerController extends Controller
|
||||
{
|
||||
/**
|
||||
* Contains current guard
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $guard;
|
||||
|
||||
/**
|
||||
* Contains route related configuration
|
||||
*
|
||||
|
|
@ -40,8 +48,17 @@ class CustomerController extends Controller
|
|||
CustomerRepository $customerRepository,
|
||||
CustomerGroupRepository $customerGroupRepository
|
||||
) {
|
||||
$this->guard = request()->has('token') ? 'api' : 'customer';
|
||||
|
||||
$this->_config = request('_config');
|
||||
|
||||
if (isset($this->_config['authorization_required']) && $this->_config['authorization_required']) {
|
||||
|
||||
auth()->setDefaultDriver($this->guard);
|
||||
|
||||
$this->middleware('auth:' . $this->guard);
|
||||
}
|
||||
|
||||
$this->customerRepository = $customerRepository;
|
||||
|
||||
$this->customerGroupRepository = $customerGroupRepository;
|
||||
|
|
@ -81,4 +98,23 @@ class CustomerController extends Controller
|
|||
'message' => 'Your account has been created successfully.',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a current user data.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function get($id)
|
||||
{
|
||||
if (Auth::user($this->guard)->id === (int) $id) {
|
||||
return new $this->_config['resource'](
|
||||
$this->customerRepository->findOrFail($id)
|
||||
);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Invalid Request.',
|
||||
], 403);
|
||||
}
|
||||
}
|
||||
|
|
@ -75,7 +75,7 @@ Route::group(['prefix' => 'api'], function ($router) {
|
|||
'resource' => 'Webkul\API\Http\Resources\Catalog\ProductReview',
|
||||
'authorization_required' => true
|
||||
]);
|
||||
|
||||
|
||||
|
||||
//Channel routes
|
||||
Route::get('channels', 'ResourceController@index')->defaults('_config', [
|
||||
|
|
@ -154,7 +154,7 @@ Route::group(['prefix' => 'api'], function ($router) {
|
|||
|
||||
Route::post('customer/register', 'CustomerController@create');
|
||||
|
||||
Route::get('customers/{id}', 'ResourceController@get')->defaults('_config', [
|
||||
Route::get('customers/{id}', 'CustomerController@get')->defaults('_config', [
|
||||
'repository' => 'Webkul\Customer\Repositories\CustomerRepository',
|
||||
'resource' => 'Webkul\API\Http\Resources\Customer\Customer',
|
||||
'authorization_required' => true
|
||||
|
|
@ -246,7 +246,6 @@ Route::group(['prefix' => 'api'], function ($router) {
|
|||
|
||||
Route::get('wishlist/add/{id}', 'WishlistController@create');
|
||||
|
||||
|
||||
//Checkout routes
|
||||
Route::group(['prefix' => 'checkout'], function ($router) {
|
||||
Route::post('cart/add/{id}', 'CartController@store');
|
||||
|
|
@ -259,6 +258,10 @@ Route::group(['prefix' => 'api'], function ($router) {
|
|||
|
||||
Route::get('cart/remove-item/{id}', 'CartController@destroyItem');
|
||||
|
||||
Route::post('cart/coupon', 'CartController@applyCoupon');
|
||||
|
||||
Route::delete('cart/coupon', 'CartController@removeCoupon');
|
||||
|
||||
Route::get('cart/move-to-wishlist/{id}', 'CartController@moveToWishlist');
|
||||
|
||||
Route::post('save-address', 'CheckoutController@saveAddress');
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "webkul/laravel-api",
|
||||
"name": "bagisto/laravel-api",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
|
|
@ -8,14 +8,14 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"webkul/laravel-user": "dev-master",
|
||||
"webkul/laravel-core": "dev-master",
|
||||
"webkul/laravel-product": "dev-master",
|
||||
"webkul/laravel-shop": "dev-master",
|
||||
"webkul/laravel-category": "dev-master",
|
||||
"webkul/laravel-tax": "dev-master",
|
||||
"webkul/laravel-inventory": "dev-master",
|
||||
"webkul/laravel-checkout": "dev-master"
|
||||
"bagisto/laravel-user": "dev-master",
|
||||
"bagisto/laravel-core": "dev-master",
|
||||
"bagisto/laravel-product": "dev-master",
|
||||
"bagisto/laravel-shop": "dev-master",
|
||||
"bagisto/laravel-category": "dev-master",
|
||||
"bagisto/laravel-tax": "dev-master",
|
||||
"bagisto/laravel-inventory": "dev-master",
|
||||
"bagisto/laravel-checkout": "dev-master"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
|
|
|||
|
|
@ -194,6 +194,21 @@ return [
|
|||
'type' => 'boolean',
|
||||
],
|
||||
],
|
||||
], [
|
||||
'key' => 'catalog.products.attribute',
|
||||
'name' => 'admin::app.admin.system.attribute',
|
||||
'sort' => 4,
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'image_attribute_upload_size',
|
||||
'title' => 'admin::app.admin.system.image-upload-size',
|
||||
'type' => 'text',
|
||||
], [
|
||||
'name' => 'file_attribute_upload_size',
|
||||
'title' => 'admin::app.admin.system.file-upload-size',
|
||||
'type' => 'text',
|
||||
]
|
||||
],
|
||||
], [
|
||||
'key' => 'catalog.inventory',
|
||||
'name' => 'admin::app.admin.system.inventory',
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ class DashboardController extends Controller
|
|||
|
||||
/**
|
||||
* Returns top selling products
|
||||
*
|
||||
*
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function getTopSellingProducts()
|
||||
|
|
@ -235,10 +235,12 @@ class DashboardController extends Controller
|
|||
*/
|
||||
public function getCustomerWithMostSales()
|
||||
{
|
||||
$dbPrefix = DB::getTablePrefix();
|
||||
|
||||
return $this->orderRepository->getModel()
|
||||
->leftJoin('refunds', 'orders.id', 'refunds.order_id')
|
||||
->select(DB::raw('(SUM(orders.base_grand_total) - SUM(IFNULL(refunds.base_grand_total, 0))) as total_base_grand_total'))
|
||||
->addSelect(DB::raw('COUNT(orders.id) as total_orders'))
|
||||
->select(DB::raw("(SUM({$dbPrefix}orders.base_grand_total) - SUM(IFNULL({$dbPrefix}refunds.base_grand_total, 0))) as total_base_grand_total"))
|
||||
->addSelect(DB::raw("COUNT({$dbPrefix}orders.id) as total_orders"))
|
||||
->addSelect('orders.id', 'customer_id', 'customer_email', 'customer_first_name', 'customer_last_name')
|
||||
->where('orders.created_at', '>=', $this->startDate)
|
||||
->where('orders.created_at', '<=', $this->endDate)
|
||||
|
|
|
|||
|
|
@ -160,11 +160,6 @@ class InvoiceController extends Controller
|
|||
$invoice = $this->invoiceRepository->findOrFail($id);
|
||||
$task = $this->invoiceRepository->updateInvoiceState($invoice, $request->state);
|
||||
|
||||
if($request->state == 'paid'){
|
||||
$order = $this->orderRepository->findOrFail($invoice->order->id);
|
||||
$this->orderRepository->updateOrderStatus($order);
|
||||
}
|
||||
|
||||
if ($task){
|
||||
session()->flash('success', trans('admin::app.sales.orders.invoice-status-confirmed'));
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1262,6 +1262,9 @@ return [
|
|||
'guest-checkout' => 'Guest Checkout',
|
||||
'allow-guest-checkout' => 'Allow Guest Checkout',
|
||||
'allow-guest-checkout-hint' => 'Hint: If turned on, this option can be configured for each product specifically.',
|
||||
'attribute' => 'Attribute',
|
||||
'image-upload-size' => 'Allowed Image Upload Size (in Kb)',
|
||||
'file-upload-size' => 'Allowed File Upload Size (in Kb)',
|
||||
'review' => 'Review',
|
||||
'allow-guest-review' => 'Allow Guest Review',
|
||||
'inventory' => 'Inventory',
|
||||
|
|
|
|||
|
|
@ -91,6 +91,16 @@
|
|||
array_push($validations, 'decimal');
|
||||
}
|
||||
|
||||
if ($attribute->type == 'file') {
|
||||
$retVal = (core()->getConfigData('catalog.products.attribute.file_attribute_upload_size')) ? core()->getConfigData('catalog.products.attribute.file_attribute_upload_size') : '2048' ;
|
||||
array_push($validations, 'size:' . $retVal);
|
||||
}
|
||||
|
||||
if ($attribute->type == 'image') {
|
||||
$retVal = (core()->getConfigData('catalog.products.attribute.image_attribute_upload_size')) ? core()->getConfigData('catalog.products.attribute.image_attribute_upload_size') : '2048' ;
|
||||
array_push($validations, 'size:' . $retVal . '|mimes:jpeg, bmp, png, jpg');
|
||||
}
|
||||
|
||||
array_push($validations, $attribute->validation);
|
||||
|
||||
$validations = implode('|', array_filter($validations));
|
||||
|
|
|
|||
|
|
@ -129,15 +129,17 @@
|
|||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<p>{{ $invoice->order->billing_address->company_name ?? '' }}</p>
|
||||
<p>{{ $invoice->order->billing_address->name }}</p>
|
||||
<p>{{ $invoice->order->billing_address->address1 }}</p>
|
||||
<p>{{ $invoice->order->billing_address->city }}</p>
|
||||
<p>{{ $invoice->order->billing_address->state }}</p>
|
||||
<p>{{ core()->country_name($invoice->order->billing_address->country) }} {{ $invoice->order->billing_address->postcode }}</p>
|
||||
{{ __('shop::app.checkout.onepage.contact') }} : {{ $invoice->order->billing_address->phone }}
|
||||
</td>
|
||||
@if ($invoice->order->billing_address)
|
||||
<td>
|
||||
<p>{{ $invoice->order->billing_address->company_name ?? '' }}</p>
|
||||
<p>{{ $invoice->order->billing_address->name }}</p>
|
||||
<p>{{ $invoice->order->billing_address->address1 }}</p>
|
||||
<p>{{ $invoice->order->billing_address->city }}</p>
|
||||
<p>{{ $invoice->order->billing_address->state }}</p>
|
||||
<p>{{ core()->country_name($invoice->order->billing_address->country) }} {{ $invoice->order->billing_address->postcode }}</p>
|
||||
{{ __('shop::app.checkout.onepage.contact') }} : {{ $invoice->order->billing_address->phone }}
|
||||
</td>
|
||||
@endif
|
||||
|
||||
@if ($invoice->order->shipping_address)
|
||||
<td>
|
||||
|
|
|
|||
|
|
@ -107,14 +107,14 @@
|
|||
<div class="section-content">
|
||||
<div class="row">
|
||||
<span class="title">{{ __('admin::app.sales.orders.customer-name') }}</span>
|
||||
<span class="value">{{ $invoice->address->name }}</span>
|
||||
<span class="value">{{ $invoice->order->customer_full_name }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('sales.invoice.customer_name.after', ['order' => $order]) !!}
|
||||
|
||||
<div class="row">
|
||||
<span class="title">{{ __('admin::app.sales.orders.email') }}</span>
|
||||
<span class="value">{{ $invoice->address->email }}</span>
|
||||
<span class="value">{{ $invoice->order->customer_email }}</span>
|
||||
</div>
|
||||
|
||||
{!! view_render_event('sales.invoice.customer_email.after', ['order' => $order]) !!}
|
||||
|
|
@ -124,36 +124,40 @@
|
|||
</div>
|
||||
</accordian>
|
||||
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.address') }}'" :active="true">
|
||||
<div slot="body" style="display: flex; overflow:auto;">
|
||||
@if ($order->billing_address || $order->shipping_address)
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.address') }}'" :active="true">
|
||||
<div slot="body" style="display: flex; overflow:auto;">
|
||||
|
||||
<div class="sale-section">
|
||||
<div class="secton-title" style="width: 380px;">
|
||||
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
|
||||
</div>
|
||||
@if ($order->billing_address)
|
||||
<div class="sale-section">
|
||||
<div class="secton-title" style="width: 380px;">
|
||||
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content" style="width: 380px;">
|
||||
@include ('admin::sales.address', ['address' => $order->billing_address])
|
||||
<div class="section-content" style="width: 380px;">
|
||||
@include ('admin::sales.address', ['address' => $order->billing_address])
|
||||
|
||||
{!! view_render_event('sales.invoice.billing_address.after', ['order' => $order]) !!}
|
||||
</div>
|
||||
{!! view_render_event('sales.invoice.billing_address.after', ['order' => $order]) !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if ($order->shipping_address)
|
||||
<div class="sale-section" style="margin: 0 0 0 300px;">
|
||||
<div class="secton-title" style="width: 400px;">
|
||||
<span>{{ __('admin::app.sales.orders.shipping-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content" style="width: 400px;">
|
||||
@include ('admin::sales.address', ['address' => $order->shipping_address])
|
||||
|
||||
{!! view_render_event('sales.invoice.shipping_address.after', ['order' => $order]) !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@if ($order->shipping_address)
|
||||
<div class="sale-section" style="margin: 0 0 0 300px;">
|
||||
<div class="secton-title" style="width: 400px;">
|
||||
<span>{{ __('admin::app.sales.orders.shipping-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content" style="width: 400px;">
|
||||
@include ('admin::sales.address', ['address' => $order->shipping_address])
|
||||
|
||||
{!! view_render_event('sales.invoice.shipping_address.after', ['order' => $order]) !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</accordian>
|
||||
</accordian>
|
||||
@endif
|
||||
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.products-ordered') }}'" :active="true">
|
||||
<div slot="body">
|
||||
|
|
|
|||
|
|
@ -284,6 +284,7 @@
|
|||
<tbody>
|
||||
|
||||
@foreach ($order->items as $item)
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
{{ $item->getTypeInstance()->getOrderedItem($item)->sku }}
|
||||
|
|
@ -467,13 +468,12 @@
|
|||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
@foreach ($order->invoices as $invoice)
|
||||
<tr>
|
||||
<td>#{{ $invoice->id }}</td>
|
||||
<td>{{ $invoice->created_at }}</td>
|
||||
<td>#{{ $invoice->order->increment_id }}</td>
|
||||
<td>{{ $invoice->address->name }}</td>
|
||||
<td>{{ $invoice->order->customer_full_name }}</td>
|
||||
<td>
|
||||
@if($invoice->state == "paid")
|
||||
{{ __('admin::app.sales.orders.invoice-status-paid') }}
|
||||
|
|
@ -502,49 +502,47 @@
|
|||
|
||||
</tab>
|
||||
|
||||
@if ($order->shipping_address)
|
||||
<tab name="{{ __('admin::app.sales.orders.shipments') }}">
|
||||
<tab name="{{ __('admin::app.sales.orders.shipments') }}">
|
||||
|
||||
<div class="table" style="padding: 20px 0">
|
||||
<table>
|
||||
<thead>
|
||||
<div class="table" style="padding: 20px 0">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('admin::app.sales.shipments.id') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.date') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.carrier-title') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.tracking-number') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.total-qty') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.action') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
@foreach ($order->shipments as $shipment)
|
||||
<tr>
|
||||
<th>{{ __('admin::app.sales.shipments.id') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.date') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.carrier-title') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.tracking-number') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.total-qty') }}</th>
|
||||
<th>{{ __('admin::app.sales.shipments.action') }}</th>
|
||||
<td>#{{ $shipment->id }}</td>
|
||||
<td>{{ $shipment->created_at }}</td>
|
||||
<td>{{ $shipment->carrier_title }}</td>
|
||||
<td>{{ $shipment->track_number }}</td>
|
||||
<td>{{ $shipment->total_qty }}</td>
|
||||
<td class="action">
|
||||
<a href="{{ route('admin.sales.shipments.view', $shipment->id) }}">
|
||||
<i class="icon eye-icon"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
@endforeach
|
||||
|
||||
<tbody>
|
||||
@if (! $order->shipments->count())
|
||||
<tr>
|
||||
<td class="empty" colspan="7">{{ __('admin::app.common.no-result-found') }}</td>
|
||||
<tr>
|
||||
@endif
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@foreach ($order->shipments as $shipment)
|
||||
<tr>
|
||||
<td>#{{ $shipment->id }}</td>
|
||||
<td>{{ $shipment->created_at }}</td>
|
||||
<td>{{ $shipment->carrier_title }}</td>
|
||||
<td>{{ $shipment->track_number }}</td>
|
||||
<td>{{ $shipment->total_qty }}</td>
|
||||
<td class="action">
|
||||
<a href="{{ route('admin.sales.shipments.view', $shipment->id) }}">
|
||||
<i class="icon eye-icon"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
@if (! $order->shipments->count())
|
||||
<tr>
|
||||
<td class="empty" colspan="7">{{ __('admin::app.common.no-result-found') }}</td>
|
||||
<tr>
|
||||
@endif
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</tab>
|
||||
@endif
|
||||
</tab>
|
||||
|
||||
<tab name="{{ __('admin::app.sales.orders.refunds') }}">
|
||||
|
||||
|
|
|
|||
|
|
@ -110,37 +110,41 @@
|
|||
</div>
|
||||
</accordian>
|
||||
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.address') }}'" :active="true">
|
||||
<div slot="body">
|
||||
@if ($order->billing_address || $order->shipping_address)
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.address') }}'" :active="true">
|
||||
<div slot="body">
|
||||
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
|
||||
</div>
|
||||
@if ($order->billing_address)
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content">
|
||||
<div class="section-content">
|
||||
|
||||
@include ('admin::sales.address', ['address' => $order->billing_address])
|
||||
@include ('admin::sales.address', ['address' => $order->billing_address])
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if ($order->shipping_address)
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.shipping-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content">
|
||||
|
||||
@include ('admin::sales.address', ['address' => $order->shipping_address])
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($order->shipping_address)
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.shipping-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content">
|
||||
|
||||
@include ('admin::sales.address', ['address' => $order->shipping_address])
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</accordian>
|
||||
</accordian>
|
||||
@endif
|
||||
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.payment-and-shipping') }}'" :active="true">
|
||||
<div slot="body">
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@
|
|||
</span>
|
||||
|
||||
<span class="value">
|
||||
{{ $shipment->address->name }}
|
||||
{{ $shipment->order->customer_full_name }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
|
@ -97,7 +97,7 @@
|
|||
</span>
|
||||
|
||||
<span class="value">
|
||||
{{ $shipment->address->email }}
|
||||
{{ $shipment->order->customer_email }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -106,37 +106,41 @@
|
|||
</div>
|
||||
</accordian>
|
||||
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.address') }}'" :active="true">
|
||||
<div slot="body">
|
||||
@if ($order->billing_address || $order->shipping_address)
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.address') }}'" :active="true">
|
||||
<div slot="body">
|
||||
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
|
||||
</div>
|
||||
@if ($order->billing_address)
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content">
|
||||
<div class="section-content">
|
||||
|
||||
@include ('admin::sales.address', ['address' => $order->billing_address])
|
||||
@include ('admin::sales.address', ['address' => $order->billing_address])
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if ($order->shipping_address)
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.shipping-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content">
|
||||
|
||||
@include ('admin::sales.address', ['address' => $order->shipping_address])
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($order->shipping_address)
|
||||
<div class="sale-section">
|
||||
<div class="secton-title">
|
||||
<span>{{ __('admin::app.sales.orders.shipping-address') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="section-content">
|
||||
|
||||
@include ('admin::sales.address', ['address' => $order->shipping_address])
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</accordian>
|
||||
</accordian>
|
||||
@endif
|
||||
|
||||
<accordian :title="'{{ __('admin::app.sales.orders.payment-and-shipping') }}'" :active="true">
|
||||
<div slot="body">
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"nwidart/laravel-modules": "^3.2",
|
||||
"bagisto/laravel-core": "dev-master"
|
||||
},
|
||||
"autoload": {
|
||||
|
|
|
|||
|
|
@ -8,8 +8,10 @@ use Webkul\BookingProduct\Models\BookingProduct;
|
|||
use Webkul\Product\Models\Product;
|
||||
|
||||
$factory->define(BookingProduct::class, function (Faker $faker, array $attributes) {
|
||||
$bookingTypes = ['event'];
|
||||
|
||||
return [
|
||||
'type' => array_rand(['event']),
|
||||
'type' => $bookingTypes[array_rand(['event'])],
|
||||
'qty' => $faker->randomNumber(2),
|
||||
'available_from' => Carbon::yesterday(),
|
||||
'available_to' => Carbon::tomorrow(),
|
||||
|
|
|
|||
|
|
@ -198,13 +198,8 @@ class Booking extends Virtual
|
|||
continue;
|
||||
}
|
||||
|
||||
$cartProducts = parent::prepareForCart(array_merge($data, [
|
||||
'product_id' => $data['product_id'],
|
||||
'quantity' => $qty,
|
||||
'booking' => [
|
||||
'ticket_id' => $ticketId,
|
||||
],
|
||||
]));
|
||||
$data['booking']['ticket_id'] = $ticketId;
|
||||
$cartProducts = parent::prepareForCart($data);
|
||||
|
||||
if (is_string($cartProducts)) {
|
||||
return $cartProducts;
|
||||
|
|
|
|||
|
|
@ -7,9 +7,7 @@
|
|||
"email": "prashant.singh852@webkul.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"konekt/concord": "^1.2"
|
||||
},
|
||||
"require": {},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webkul\\CMS\\": "src/"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
/**
|
||||
* Hack core: Change the migration
|
||||
* Added by AuTN
|
||||
*/
|
||||
class UpdateCmsPageTranslationsTableFieldHtmlContent extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('cms_page_translations', function (Blueprint $table) {
|
||||
$table->longtext('html_content')->nullable()->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('cms_page_translations', function (Blueprint $table) {
|
||||
$table->text('html_content')->nullable()->change();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -7,9 +7,7 @@
|
|||
"email": "jitendra@webkul.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"baum/baum": "~1.1"
|
||||
},
|
||||
"require": {},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webkul\\Category\\": "src/"
|
||||
|
|
|
|||
|
|
@ -335,9 +335,9 @@ class Cart
|
|||
/**
|
||||
* This function handles when guest has some of cart products and then logs in.
|
||||
*
|
||||
* @return bool
|
||||
* @return void
|
||||
*/
|
||||
public function mergeCart()
|
||||
public function mergeCart(): void
|
||||
{
|
||||
if (session()->has('cart')) {
|
||||
$cart = $this->cartRepository->findOneWhere([
|
||||
|
|
@ -359,59 +359,11 @@ class Cart
|
|||
|
||||
session()->forget('cart');
|
||||
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($guestCart->items as $key => $guestCartItem) {
|
||||
$found = false;
|
||||
|
||||
foreach ($cart->items as $cartItem) {
|
||||
if (! $cartItem
|
||||
->product
|
||||
->getTypeInstance()
|
||||
->compareOptions($cartItem->additional, $guestCartItem->additional)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$found = true;
|
||||
|
||||
$cartItem->quantity = $newQuantity = $cartItem->quantity + $guestCartItem->quantity;
|
||||
|
||||
if ($cartItem->quantity > $cartItem->product->getTypeInstance()->totalQuantity()) {
|
||||
$cartItem->quantity = $newQuantity = $cartItem->product->getTypeInstance()->totalQuantity();
|
||||
}
|
||||
|
||||
if (! $this->isItemHaveQuantity($cartItem)) {
|
||||
$this->cartItemRepository->delete($guestCartItem->id);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->cartItemRepository->update([
|
||||
'quantity' => $newQuantity,
|
||||
'total' => core()->convertPrice($cartItem->price * $newQuantity),
|
||||
'base_total' => $cartItem->price * $newQuantity,
|
||||
'total_weight' => $cartItem->weight * $newQuantity,
|
||||
'base_total_weight' => $cartItem->weight * $newQuantity,
|
||||
], $cartItem->id);
|
||||
|
||||
$guestCart->items->forget($key);
|
||||
|
||||
$this->cartItemRepository->delete($guestCartItem->id);
|
||||
}
|
||||
|
||||
if (! $found) {
|
||||
$this->cartItemRepository->update([
|
||||
'cart_id' => $cart->id,
|
||||
], $guestCartItem->id);
|
||||
|
||||
foreach ($guestCartItem->children as $child) {
|
||||
$this->cartItemRepository->update([
|
||||
'cart_id' => $cart->id,
|
||||
], $child->id);
|
||||
}
|
||||
}
|
||||
foreach ($guestCart->items as $guestCartItem) {
|
||||
$this->addProduct($guestCartItem->product_id, $guestCartItem->additional);
|
||||
}
|
||||
|
||||
$this->collectTotals();
|
||||
|
|
@ -420,8 +372,6 @@ class Cart
|
|||
|
||||
session()->forget('cart');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@
|
|||
"email": "jitendra@webkul.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
},
|
||||
"require": {},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webkul\\Core\\": "src/"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class RemovingForiegnKey extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('invoices', static function (Blueprint $table) {
|
||||
$table->dropForeign(['order_address_id']);
|
||||
});
|
||||
|
||||
Schema::table('shipments', static function (Blueprint $table) {
|
||||
$table->dropForeign(['order_address_id']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -7,9 +7,7 @@
|
|||
"email": "jitendra@webkul.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"propaganistas/laravel-intl": "^2.0"
|
||||
},
|
||||
"require": {},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webkul\\Inventory\\": "src/"
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
"require": {},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webkul\\Payment\\": "src/"
|
||||
"Webkul\\Paypal\\": "src/"
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
|
|
|
|||
|
|
@ -7,9 +7,7 @@
|
|||
"email": "jitendra@webkul.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"konekt/concord": "^1.2"
|
||||
},
|
||||
"require": {},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Webkul\\Sales\\": "src/"
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ class Order extends Model implements OrderContract
|
|||
}
|
||||
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->canShip()) {
|
||||
if ($item->canShip() && $item->order->status !== self::STATUS_CLOSED) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -238,7 +238,7 @@ class Order extends Model implements OrderContract
|
|||
}
|
||||
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->canInvoice()) {
|
||||
if ($item->canInvoice() && $item->order->status !== self::STATUS_CLOSED) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -257,8 +257,13 @@ class Order extends Model implements OrderContract
|
|||
return false;
|
||||
}
|
||||
|
||||
$pendingInvoice = $this->invoices->where('state', 'pending')->first();
|
||||
if ($pendingInvoice) {
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->canCancel()) {
|
||||
if ($item->canCancel() && $item->order->status !== self::STATUS_CLOSED) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -278,13 +283,13 @@ class Order extends Model implements OrderContract
|
|||
}
|
||||
|
||||
foreach ($this->invoices as $item) {
|
||||
if ($item->state == "pending" || $item->state == "overdue") {
|
||||
if ($item->state == 'pending' || $item->state == 'overdue') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->qty_to_refund > 0) {
|
||||
if ($item->qty_to_refund > 0 && $item->order->status !== self::STATUS_CLOSED) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -259,10 +259,15 @@ class InvoiceRepository extends Repository
|
|||
* @return void
|
||||
*/
|
||||
public function updateInvoiceState($invoice, $status)
|
||||
{
|
||||
{
|
||||
$invoice->state = $status;
|
||||
$invoice->save();
|
||||
|
||||
if ($status == 'paid'){
|
||||
$order = $this->orderRepository->findOrFail($invoice->order->id);
|
||||
$this->orderRepository->updateOrderStatus($order);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -15,7 +15,8 @@ class DownloadableProductDataGrid extends DataGrid
|
|||
{
|
||||
$queryBuilder = DB::table('downloadable_link_purchased')
|
||||
->leftJoin('orders', 'downloadable_link_purchased.order_id', '=', 'orders.id')
|
||||
->addSelect('downloadable_link_purchased.*', 'orders.increment_id')
|
||||
->leftJoin('invoices', 'downloadable_link_purchased.order_id', '=', 'invoices.order_id')
|
||||
->addSelect('downloadable_link_purchased.*', 'invoices.state as invoice_state', 'orders.increment_id')
|
||||
->addSelect(DB::raw('(' . DB::getTablePrefix() . 'downloadable_link_purchased.download_bought - ' . DB::getTablePrefix() . 'downloadable_link_purchased.download_used) as remaining_downloads'))
|
||||
->where('downloadable_link_purchased.customer_id', auth()->guard('customer')->user()->id);
|
||||
|
||||
|
|
@ -45,7 +46,7 @@ class DownloadableProductDataGrid extends DataGrid
|
|||
'filterable' => true,
|
||||
'closure' => true,
|
||||
'wrapper' => function ($value) {
|
||||
if ($value->status == 'pending' || $value->status == 'expired') {
|
||||
if ($value->status == 'pending' || $value->status == 'expired' || $value->invoice_state !== 'paid') {
|
||||
return $value->product_name;
|
||||
} else {
|
||||
return $value->product_name . ' ' . '<a href="' . route('customer.downloadable_products.download', $value->id) . '" target="_blank">' . $value->name . '</a>';
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ return [
|
|||
'add-tooltip' => 'إضافة منتج لقائمة المقارنة',
|
||||
'added' => 'تمت إضافة العنصر بنجاح لمقارنة القائمة',
|
||||
'removed' => 'تمت إزالة العنصر بنجاح من قائمة المقارنة',
|
||||
'removed-all' => 'تمت إزالة جميع العناصر بنجاح من قائمة المقارنة',
|
||||
'already_added' => 'تمت إضافة العنصر بالفعل لمقارنة القائمة',
|
||||
'empty-text' => "ليس لديك أي عناصر في قائمة المقارنة الخاصة بك",
|
||||
'product_image' => 'Product Image',
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ return [
|
|||
'added' => 'Element erfolgreich zur Vergleichsliste hinzugefügt',
|
||||
'already_added' => 'Artikel bereits zur Vergleichsliste hinzugefügt',
|
||||
'removed' => 'Element erfolgreich aus Vergleichsliste entfernt',
|
||||
'removed-all' => 'Alle Elemente wurden erfolgreich aus der Vergleichsliste entfernt',
|
||||
'empty-text' => "Sie haben keine Elemente in Ihrer Vergleichsliste",
|
||||
'product_image' => 'Produktbild',
|
||||
'actions' => 'Aktionen',
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ return [
|
|||
'added' => 'Item successfully added to compare list',
|
||||
'already_added' => 'Item already added to compare list',
|
||||
'removed' => 'Item successfully removed from compare list',
|
||||
'removed-all' => 'All items successfully removed from compare list',
|
||||
'empty-text' => "You don't have any items in your compare list",
|
||||
'product_image' => 'Product Image',
|
||||
'actions' => 'Actions',
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ return [
|
|||
'added' => 'Elemento agregado con éxito a la lista de comparación',
|
||||
'already_added' => 'Elemento ya agregado a la lista de comparación',
|
||||
'removed' => 'Elemento eliminado con éxito de la lista de comparación',
|
||||
'removed-all' => 'Todos los elementos eliminados correctamente de la lista de comparación',
|
||||
'empty-text' => "No tienes ningún artículo en tu lista de comparación",
|
||||
'product_image' => 'Product Image',
|
||||
'actions' => 'Actions',
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ return [
|
|||
'added' => 'مورد با موفقیت برای مقایسه لیست اضافه شد',
|
||||
'already_added' => 'مورد در حال حاضر برای مقایسه لیست اضافه شده است',
|
||||
'removed' => 'مورد با موفقیت از لیست مقایسه حذف شد',
|
||||
'removed-all' => 'همه موارد با موفقیت از لیست مقایسه حذف شدند',
|
||||
'empty-text' => "شما هیچ موردی را در لیست مقایسه خود ندارید",
|
||||
'product_image' => 'Product Image',
|
||||
'actions' => 'Actions',
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ return [
|
|||
'added' => 'Articolo aggiunto alla lista di comparazione',
|
||||
'already_added' => 'Articolo già aggiunto alla lista di comparazione',
|
||||
'removed' => 'Articolo rimosso dalla lista di comparazione',
|
||||
'removed-all' => 'Tutti gli elementi rimossi dall\'elenco di confronto',
|
||||
'empty-text' => "Non hai articoli nella tua lista di comparazione",
|
||||
],
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ return [
|
|||
'added' => 'アイテムを比較リストに追加しました',
|
||||
'already_added' => 'アイテムは比較リストに既に追加されています',
|
||||
'removed' => '比較リストからアイテムを削除しました',
|
||||
'removed-all' => '比較リストからすべてのアイテムを削除しました',
|
||||
'empty-text' => "比較リストにアイテムがありません",
|
||||
'product_image' => 'Product Image',
|
||||
'actions' => 'Actions',
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ return [
|
|||
'added' => 'Item successfully added to compare list',
|
||||
'already_added' => 'Item already added to compare list',
|
||||
'removed' => 'Item successfully removed from compare list',
|
||||
'removed-all' => 'All items successfully removed from compare list',
|
||||
'empty-text' => "You don't have any items in your compare list",
|
||||
'product_image' => 'Product Image',
|
||||
'actions' => 'Actions',
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ return [
|
|||
'added' => 'Produkt został pomyślnie dodany do listy porównania',
|
||||
'already_added' => 'Produkt został już dodany do listy porównawczej',
|
||||
'removed' => 'Produkt został pomyślnie usunięty z listy porównawcze',
|
||||
'removed-all' => 'Wszystkie produkty zostały pomyślnie usunięte z listy porównawczej',
|
||||
'empty-text' => 'Nie masz żadnych pozycji na liście porównawczej',
|
||||
],
|
||||
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ return [
|
|||
'already_added' => 'Item já adicionado à lista de comparação',
|
||||
'added' => 'Item adicionado com sucesso à lista de comparação',
|
||||
'removed' => 'Item removido com sucesso da lista de comparação',
|
||||
'removed-all' => 'Todos os itens removidos com sucesso da lista de comparação',
|
||||
'empty-text' => "Você não possui nenhum item na sua lista de comparação",
|
||||
'product_image' => 'Imagem do Produto',
|
||||
'actions' => 'Ações',
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ return [
|
|||
'added' => 'Ürün karşılaştırma listesine başarıyla eklendi.',
|
||||
'already_added' => 'Ürün zaten karşılaştırma listesinde yer alıyor.',
|
||||
'removed' => 'Ürün karşılaştırma listesinden başarıyla kaldırıldı.',
|
||||
'removed-all' => 'Tüm ürünler, karşılaştırma listesinden başarıyla çıkarıldı.',
|
||||
'empty-text' => "Karşılaştırma listenizde henüz ürün bulunmuyor.",
|
||||
'product_image' => 'Ürün Görseli',
|
||||
'actions' => 'Eylemler',
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"/js/velocity.js": "/js/velocity.js?id=1cccc6e984773916257d",
|
||||
"/js/velocity.js": "/js/velocity.js?id=e1ab8d9fe361d425ed2c",
|
||||
"/css/velocity-admin.css": "/css/velocity-admin.css?id=612d35e452446366eef7",
|
||||
"/css/velocity.css": "/css/velocity.css?id=72cf9eb7824c25e1dad8"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<div class="product-image">
|
||||
<a :title="product.name" :href="`${baseUrl}/${product.slug}`">
|
||||
<img
|
||||
:src="product.image"
|
||||
:src="product.image || product.product_image"
|
||||
:onerror="`this.src='${this.$root.baseUrl}/vendor/webkul/ui/assets/images/product/large-product-placeholder.png'`" />
|
||||
|
||||
<product-quick-view-btn :quick-view-details="product" v-if="!isMobile()"></product-quick-view-btn>
|
||||
|
|
@ -43,8 +43,8 @@
|
|||
<img
|
||||
loading="lazy"
|
||||
:alt="product.name"
|
||||
:src="product.image"
|
||||
:data-src="product.image"
|
||||
:src="product.image || product.product_image"
|
||||
:data-src="product.image || product.product_image"
|
||||
class="card-img-top lzy_img"
|
||||
:onerror="`this.src='${this.$root.baseUrl}/vendor/webkul/ui/assets/images/product/large-product-placeholder.png'`" />
|
||||
<!-- :src="`${$root.baseUrl}/vendor/webkul/ui/assets/images/product/meduim-product-placeholder.png`" /> -->
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ $(document).ready(function () {
|
|||
},
|
||||
|
||||
isMobile: function () {
|
||||
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
|
||||
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i|/mobi/i.test(navigator.userAgent)) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
|
|
@ -339,7 +339,7 @@ $(document).ready(function () {
|
|||
showLoader: function () {
|
||||
$('#loader').show();
|
||||
$('.overlay-loader').show();
|
||||
|
||||
|
||||
document.body.classList.add("modal-open");
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
</label>
|
||||
|
||||
@php
|
||||
$pageTarget = isset($locale) ? (old($locale)['page_link'] ?? (isset($content) ? $content->translate($locale)['page_link'] : '')) : '';
|
||||
$pageTarget = isset($locale) ? (old($locale)['page_link'] ?? (isset($content) ? $content->translate($locale) ? $content->translate($locale)['page_link'] : '' : '')) : '';
|
||||
@endphp
|
||||
|
||||
<input
|
||||
|
|
@ -31,7 +31,7 @@
|
|||
</label>
|
||||
|
||||
@php
|
||||
$linkTarget = isset($locale) ? (old($locale)['link_target'] ?? (isset($content) ? $content->translate($locale)['link_target'] : '')) : '';
|
||||
$linkTarget = isset($locale) ? (old($locale)['link_target'] ?? (isset($content) ? $content->translate($locale) ? $content->translate($locale)['link_target'] : '' : '')) : '';
|
||||
@endphp
|
||||
|
||||
<select class="control" id="link_target" name="{{$locale}}[link_target]" value="">
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
@push('scripts')
|
||||
<script type="text/x-template" id="catalog-product-template">
|
||||
<div>
|
||||
<?php $catalogType = old($locale)['catalog_type'] ?? (isset($content) ? $content->translate($locale)['catalog_type'] : ''); ?>
|
||||
<?php $catalogType = old($locale)['catalog_type'] ?? (isset($content) ? $content->translate($locale) ? $content->translate($locale)['catalog_type'] : '' : ''); ?>
|
||||
|
||||
<div class="control-group" :class="[errors.has('{{$locale}}[catalog_type]') ? 'has-error' : '']">
|
||||
<label for="catalog_type" class="required">
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
{{ __('velocity::app.admin.contents.page.title') }}
|
||||
<span class="locale">[{{ $locale }}]</span>
|
||||
</label>
|
||||
<input type="text" v-validate="'required|max:100'" class="control" id="title" name="{{$locale}}[title]" value="{{ old($locale)['title'] ?? $content->translate($locale)['title'] }}" data-vv-as=""{{ __('velocity::app.admin.contents.page.title') }}""/>
|
||||
<input type="text" v-validate="'required|max:100'" class="control" id="title" name="{{$locale}}[title]" value="{{ old($locale)['title'] ?? '' }}" data-vv-as=""{{ __('velocity::app.admin.contents.page.title') }}""/>
|
||||
|
||||
<span class="control-error" v-if="errors.has('{{$locale}}[title]')">@{{ errors.first('{!!$locale!!}[title]') }}</span>
|
||||
</div>
|
||||
|
|
@ -134,7 +134,7 @@
|
|||
id="custom_title"
|
||||
v-validate="'max:100'"
|
||||
name="{{$locale}}[custom_title]"
|
||||
value="{{ old($locale)['custom_title'] ?? ($content->translate($locale)['custom_title'] ?? '') }}"
|
||||
value="{{ old($locale)['custom_title'] ?? ($content->translate($locale) ? $content->translate($locale)['custom_title'] : '' ?? '') }}"
|
||||
data-vv-as=""{{ __('velocity::app.admin.contents.content.custom-title') }}"" />
|
||||
|
||||
<span
|
||||
|
|
@ -156,7 +156,7 @@
|
|||
id="custom_heading"
|
||||
v-validate="'max:100'"
|
||||
name="{{$locale}}[custom_heading]"
|
||||
value="{{ old($locale)['custom_heading'] ?? $content->translate($locale)['custom_title'] }}" data-vv-as=""{{ __('velocity::app.admin.contents.content.custom-heading') }}"" />
|
||||
value="{{ old($locale)['custom_heading'] ?? $content->translate($locale) ? $content->translate($locale)['custom_title'] : '' }}" data-vv-as=""{{ __('velocity::app.admin.contents.content.custom-heading') }}"" />
|
||||
|
||||
<span
|
||||
class="control-error"
|
||||
|
|
@ -219,7 +219,7 @@
|
|||
class="control"
|
||||
name="{{$locale}}[page_link]"
|
||||
v-validate="'required|max:150'"
|
||||
value="{{ old($locale)['page_link'] ?? $content->translate($locale)['page_link'] }}"
|
||||
value="{{ old($locale)['page_link'] ?? $content->translate($locale) ? $content->translate($locale)['page_link'] : '' }}"
|
||||
data-vv-as=""{{ __('velocity::app.admin.contents.content.page-link') }}"" />
|
||||
|
||||
<span
|
||||
|
|
@ -266,7 +266,7 @@
|
|||
v-validate="'required'"
|
||||
name="{{$locale}}[description]"
|
||||
data-vv-as=""{{ __('velocity::app.admin.contents.content.static-description') }}"">
|
||||
{{ old($locale)['description'] ?? $content->translate($locale)['description'] }}
|
||||
{{ old($locale)['description'] ?? $content->translate($locale) ? $content->translate($locale)['description'] : '' }}
|
||||
</textarea>
|
||||
|
||||
<span
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ $data = array();
|
|||
// inserting form data to empty array
|
||||
$keyValueData['MAIL_DRIVER'] = $_POST["mail_driver"];
|
||||
$keyValueData['MAIL_HOST'] = $_POST["mail_host"];
|
||||
$keyValueData['MAIL_PORT'] = $_POST["mail_port"];
|
||||
$keyValueData['MAIL_ENCRYPTION'] = $_POST["mail_encryption"];
|
||||
|
||||
$keyValueData['MAIL_USERNAME'] = $_POST["mail_username"];
|
||||
|
|
|
|||
|
|
@ -243,21 +243,21 @@ class CartRuleCest
|
|||
protected function getCartWithCouponScenarios(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
'name' => 'check cart coupon',
|
||||
'productSequence' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
self::PRODUCT_NOT_FREE,
|
||||
],
|
||||
'withCoupon' => true,
|
||||
'couponScenario' => [
|
||||
'scenario' => self::COUPON_FIXED_CART,
|
||||
'products' => [
|
||||
],
|
||||
],
|
||||
'checkOrder' => true,
|
||||
],
|
||||
// [
|
||||
// 'name' => 'check cart coupon',
|
||||
// 'productSequence' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// ],
|
||||
// 'withCoupon' => true,
|
||||
// 'couponScenario' => [
|
||||
// 'scenario' => self::COUPON_FIXED_CART,
|
||||
// 'products' => [
|
||||
// ],
|
||||
// ],
|
||||
// 'checkOrder' => true,
|
||||
// ],
|
||||
// ohne coupon
|
||||
[
|
||||
'name' => 'PRODUCT_FREE no coupon',
|
||||
|
|
@ -306,23 +306,23 @@ class CartRuleCest
|
|||
],
|
||||
'checkOrder' => false,
|
||||
],
|
||||
[
|
||||
'name' => 'check fix coupon applied to two products',
|
||||
'productSequence' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
self::PRODUCT_NOT_FREE,
|
||||
],
|
||||
'withCoupon' => true,
|
||||
'couponScenario' => [
|
||||
'scenario' => self::COUPON_FIXED,
|
||||
'products' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
],
|
||||
],
|
||||
'checkOrder' => true,
|
||||
],
|
||||
// [
|
||||
// 'name' => 'check fix coupon applied to two products',
|
||||
// 'productSequence' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// ],
|
||||
// 'withCoupon' => true,
|
||||
// 'couponScenario' => [
|
||||
// 'scenario' => self::COUPON_FIXED,
|
||||
// 'products' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// ],
|
||||
// ],
|
||||
// 'checkOrder' => true,
|
||||
// ],
|
||||
// prozenturaler Coupon für ein Produkt (Warenkorb wird nicht 0)
|
||||
[
|
||||
'name' => 'PRODUCT_NOT_FREE percentage coupon',
|
||||
|
|
@ -354,23 +354,23 @@ class CartRuleCest
|
|||
],
|
||||
'checkOrder' => false,
|
||||
],
|
||||
[
|
||||
'name' => 'check percentage coupon applied to two products',
|
||||
'productSequence' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
self::PRODUCT_NOT_FREE,
|
||||
],
|
||||
'withCoupon' => true,
|
||||
'couponScenario' => [
|
||||
'scenario' => self::COUPON_PERCENTAGE,
|
||||
'products' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
],
|
||||
],
|
||||
'checkOrder' => true,
|
||||
],
|
||||
// [
|
||||
// 'name' => 'check percentage coupon applied to two products',
|
||||
// 'productSequence' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// ],
|
||||
// 'withCoupon' => true,
|
||||
// 'couponScenario' => [
|
||||
// 'scenario' => self::COUPON_PERCENTAGE,
|
||||
// 'products' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// ],
|
||||
// ],
|
||||
// 'checkOrder' => true,
|
||||
// ],
|
||||
// fixer Coupon für ein Produkt (Warenkorb wird 0)
|
||||
[
|
||||
'name' => 'PRODUCT_NON_SUB_NOT_FREE fix coupon to zero',
|
||||
|
|
@ -402,23 +402,23 @@ class CartRuleCest
|
|||
],
|
||||
'checkOrder' => false,
|
||||
],
|
||||
[
|
||||
'name' => 'check fix coupon to zero applied to two products',
|
||||
'productSequence' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
self::PRODUCT_NOT_FREE,
|
||||
],
|
||||
'withCoupon' => true,
|
||||
'couponScenario' => [
|
||||
'scenario' => self::COUPON_FIXED_FULL,
|
||||
'products' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
],
|
||||
],
|
||||
'checkOrder' => true,
|
||||
],
|
||||
// [
|
||||
// 'name' => 'check fix coupon to zero applied to two products',
|
||||
// 'productSequence' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// ],
|
||||
// 'withCoupon' => true,
|
||||
// 'couponScenario' => [
|
||||
// 'scenario' => self::COUPON_FIXED_FULL,
|
||||
// 'products' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// ],
|
||||
// ],
|
||||
// 'checkOrder' => true,
|
||||
// ],
|
||||
// prozenturaler Coupon für ein Produkt (Warenkorb wird 0)
|
||||
[
|
||||
'name' => 'PRODUCT_NOT_FREE percentage coupon to zero',
|
||||
|
|
@ -450,23 +450,23 @@ class CartRuleCest
|
|||
],
|
||||
'checkOrder' => false,
|
||||
],
|
||||
[
|
||||
'name' => 'check percentage coupon to zero applied to two products',
|
||||
'productSequence' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
self::PRODUCT_NOT_FREE,
|
||||
],
|
||||
'withCoupon' => true,
|
||||
'couponScenario' => [
|
||||
'scenario' => self::COUPON_PERCENTAGE_FULL,
|
||||
'products' => [
|
||||
self::PRODUCT_NOT_FREE,
|
||||
self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
],
|
||||
],
|
||||
'checkOrder' => true,
|
||||
],
|
||||
// [
|
||||
// 'name' => 'check percentage coupon to zero applied to two products',
|
||||
// 'productSequence' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// ],
|
||||
// 'withCoupon' => true,
|
||||
// 'couponScenario' => [
|
||||
// 'scenario' => self::COUPON_PERCENTAGE_FULL,
|
||||
// 'products' => [
|
||||
// self::PRODUCT_NOT_FREE,
|
||||
// self::PRODUCT_NOT_FREE_REDUCED_TAX,
|
||||
// ],
|
||||
// ],
|
||||
// 'checkOrder' => true,
|
||||
// ],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,12 @@ class CartModelCest
|
|||
$I->assertTrue(Cart::getCart()->hasProductsWithQuantityBox());
|
||||
|
||||
$I->wantTo('check function with cart, that contains a product with QuantityBox() == true');
|
||||
Cart::removeItem($cartItemIdOfProductWithoutQuantityBox);
|
||||
// Cart::removeItem($cartItemIdOfProductWithoutQuantityBox);
|
||||
Cart::addProduct($this->productWithQuantityBox->id, [
|
||||
'_token' => session('_token'),
|
||||
'product_id' => $this->productWithQuantityBox->id,
|
||||
'quantity' => 1,
|
||||
]);
|
||||
$I->assertTrue(Cart::getCart()->hasProductsWithQuantityBox());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,239 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Unit\Checkout;
|
||||
|
||||
use UnitTester;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Webkul\BookingProduct\Models\BookingProduct;
|
||||
use Webkul\BookingProduct\Models\BookingProductEventTicket;
|
||||
use Webkul\Customer\Models\Customer;
|
||||
use Webkul\Core\Helpers\Laravel5Helper;
|
||||
|
||||
class CartCest
|
||||
{
|
||||
private $customer;
|
||||
private $simple1, $simple2;
|
||||
private $virtual1, $virtual2;
|
||||
private $downloadable1, $downloadable2;
|
||||
private $downloadableLinkId1, $downloadableLinkId2;
|
||||
private $booking1, $booking2;
|
||||
private $bookingTicket1, $bookingTicket2;
|
||||
|
||||
/**
|
||||
* @param \UnitTester $I
|
||||
* @param \Codeception\Example $scenario
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testMergeCart(UnitTester $I): void
|
||||
{
|
||||
$this->createProducts($I);
|
||||
|
||||
$scenarios = $this->getMergeCartScenarios();
|
||||
|
||||
foreach ($scenarios as $scenario) {
|
||||
$I->comment("Check, I'm a guest");
|
||||
$I->assertFalse(auth()->guard('customer')->check());
|
||||
|
||||
$data = [
|
||||
'_token' => session('_token'),
|
||||
'quantity' => 1,
|
||||
'product_id' => $scenario['products'][0]['product']->id,
|
||||
];
|
||||
$data = array_merge($data, $scenario['products'][0]['data']);
|
||||
|
||||
$I->comment('A guest is adding a first product to cart');
|
||||
cart()->addProduct($scenario['products'][0]['product']->id, $data);
|
||||
$I->assertEquals(1, cart()->getCart()->items->count());
|
||||
|
||||
$I->comment('Guest is logging in...then guest is a known customer.');
|
||||
auth()->guard('customer')->onceUsingId($this->customer->id);
|
||||
Event::dispatch('customer.after.login', $this->customer['email']);
|
||||
$I->comment("Let us assume that the customer's shopping cart was empty. The individual product from the guest's shopping cart is transferred to the customer's shopping cart.");
|
||||
$I->assertEquals(1, cart()->getCart()->items->count());
|
||||
|
||||
auth()->guard('customer')->logout();
|
||||
$data = [
|
||||
'_token' => session('_token'),
|
||||
'quantity' => 1,
|
||||
'product_id' => $scenario['products'][1]['product']->id,
|
||||
];
|
||||
$data = array_merge($data, $scenario['products'][1]['data']);
|
||||
|
||||
$I->comment('Again, guest is adding a ' . $scenario['product_type'] . ' product to cart.');
|
||||
cart()->addProduct($scenario['products'][1]['product']->id, $data);
|
||||
$I->assertEquals(1, cart()->getCart()->items->count());
|
||||
|
||||
$I->comment('And will be logged in.');
|
||||
auth()->guard('customer')->onceUsingId($this->customer->id);
|
||||
|
||||
Event::dispatch('customer.after.login', $this->customer['email']);
|
||||
$I->assertEquals($scenario['results']['cart_items_count'], cart()->getCart()->items->count());
|
||||
|
||||
auth()->guard('customer')->logout();
|
||||
$data = [
|
||||
'_token' => session('_token'),
|
||||
'quantity' => 2,
|
||||
'product_id' => $scenario['products'][0]['product']->id,
|
||||
];
|
||||
$data = array_merge($data, $scenario['products'][0]['data']);
|
||||
|
||||
$I->comment('Again, guest is adding first ' . $scenario['product_type'] . ' product again.');
|
||||
cart()->addProduct($scenario['products'][0]['product']->id, $data);
|
||||
$I->assertEquals(1, cart()->getCart()->items->count());
|
||||
$I->assertEquals(2, cart()->getCart()->items_qty);
|
||||
|
||||
$I->comment('And will be logged in.');
|
||||
auth()->guard('customer')->onceUsingId($this->customer->id);
|
||||
|
||||
Event::dispatch('customer.after.login', $this->customer['email']);
|
||||
$I->assertEquals($scenario['results']['cart_items_count'], cart()->getCart()->items->count());
|
||||
$I->assertEquals($scenario['results']['cart_items_quantity'], cart()->getCart()->items_qty);
|
||||
|
||||
$this->cleanUp();
|
||||
$I->comment('=== ' . $scenario['product_type'] . ' DONE ===');
|
||||
}
|
||||
}
|
||||
|
||||
private function getMergeCartScenarios(): array
|
||||
{
|
||||
return [
|
||||
// [
|
||||
// 'product_type' => 'simple',
|
||||
// 'products' => [
|
||||
// [
|
||||
// 'product' => $this->simple1,
|
||||
// 'data' => [],
|
||||
// ],
|
||||
// [
|
||||
// 'product' => $this->simple2,
|
||||
// 'data' => [],
|
||||
// ],
|
||||
// ],
|
||||
// 'results' => [
|
||||
// 'cart_items_count' => 2,
|
||||
// 'cart_items_quantity' => 4,
|
||||
// ],
|
||||
// ],
|
||||
// [
|
||||
// 'product_type' => 'virtual',
|
||||
// 'products' => [
|
||||
// [
|
||||
// 'product' => $this->virtual1,
|
||||
// 'data' => [],
|
||||
// ],
|
||||
// [
|
||||
// 'product' => $this->virtual2,
|
||||
// 'data' => [],
|
||||
// ],
|
||||
// ],
|
||||
// 'results' => [
|
||||
// 'cart_items_count' => 2,
|
||||
// 'cart_items_quantity' => 4,
|
||||
// ],
|
||||
// ],
|
||||
// [
|
||||
// 'product_type' => 'downloadable',
|
||||
// 'products' => [
|
||||
// [
|
||||
// 'product' => $this->downloadable1,
|
||||
// 'data' => [
|
||||
// 'links' => [$this->downloadableLinkId1],
|
||||
// ],
|
||||
// ],
|
||||
// [
|
||||
// 'product' => $this->downloadable2,
|
||||
// 'data' => [
|
||||
// 'links' => [$this->downloadableLinkId2],
|
||||
// ],
|
||||
// ],
|
||||
// ],
|
||||
// 'results' => [
|
||||
// 'cart_items_count' => 2,
|
||||
// 'cart_items_quantity' => 4,
|
||||
// ],
|
||||
// ],
|
||||
// [
|
||||
// 'product_type' => 'booking',
|
||||
// 'products' => [
|
||||
// [
|
||||
// 'product' => $this->booking1,
|
||||
// 'data' => [
|
||||
// 'booking' => [
|
||||
// 'qty' => [
|
||||
// $this->bookingTicket1->id => 1,
|
||||
// ],
|
||||
// ],
|
||||
// ],
|
||||
// ],
|
||||
// [
|
||||
// 'product' => $this->booking2,
|
||||
// 'data' => [
|
||||
// 'booking' => [
|
||||
// 'qty' => [
|
||||
// $this->bookingTicket2->id => 1,
|
||||
// ],
|
||||
// ],
|
||||
// ],
|
||||
// ],
|
||||
// ],
|
||||
// 'results' => [
|
||||
// 'cart_items_count' => 2,
|
||||
// 'cart_items_quantity' => 4,
|
||||
// ],
|
||||
// ],
|
||||
];
|
||||
}
|
||||
|
||||
private function createProducts(UnitTester $I)
|
||||
{
|
||||
$this->customer = $I->have(Customer::class);
|
||||
|
||||
$this->simple1 = $I->haveProduct(Laravel5Helper::SIMPLE_PRODUCT, []);
|
||||
$this->simple2 = $I->haveProduct(Laravel5Helper::SIMPLE_PRODUCT, []);
|
||||
|
||||
$this->virtual1 = $I->haveProduct(Laravel5Helper::VIRTUAL_PRODUCT, []);
|
||||
$this->virtual2 = $I->haveProduct(Laravel5Helper::VIRTUAL_PRODUCT, []);
|
||||
|
||||
$this->downloadable1 = $I->haveProduct(Laravel5Helper::DOWNLOADABLE_PRODUCT, []);
|
||||
$this->downloadableLinkId1 = $I->grabRecord(
|
||||
'product_downloadable_links',
|
||||
[
|
||||
'product_id' => $this->downloadable1->id,
|
||||
]
|
||||
)['id'];
|
||||
|
||||
$this->downloadable2 = $I->haveProduct(Laravel5Helper::DOWNLOADABLE_PRODUCT, []);
|
||||
$this->downloadableLinkId2 = $I->grabRecord(
|
||||
'product_downloadable_links',
|
||||
[
|
||||
'product_id' => $this->downloadable2->id,
|
||||
]
|
||||
)['id'];
|
||||
|
||||
$this->booking1 = $I->haveProduct(Laravel5Helper::BOOKING_EVENT_PRODUCT, []);
|
||||
$bookingProduct1 = BookingProduct::query()->where('product_id', $this->booking1->id)->firstOrFail();
|
||||
$this->bookingTicket1 = BookingProductEventTicket::query()->where('booking_product_id', $bookingProduct1->id)->firstOrFail();
|
||||
|
||||
$this->booking2 = $I->haveProduct(Laravel5Helper::BOOKING_EVENT_PRODUCT, []);
|
||||
$bookingProduct2 = BookingProduct::query()->where('product_id', $this->booking2->id)->firstOrFail();
|
||||
$this->bookingTicket2 = BookingProductEventTicket::query()->where('booking_product_id', $bookingProduct2->id)->firstOrFail();
|
||||
}
|
||||
|
||||
private function cleanUp(): void
|
||||
{
|
||||
$cart = cart()->getCart();
|
||||
|
||||
if ($cart) {
|
||||
foreach ($cart->items as $item) {
|
||||
cart()->removeItem($item->id);
|
||||
}
|
||||
}
|
||||
|
||||
session()->forget('cart');
|
||||
|
||||
auth()->guard('customer')->logout();
|
||||
|
||||
session()->forget('cart');
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue