Merge pull request #2 from bagisto/master

This commit is contained in:
Glenn Hermans 2020-10-21 11:13:04 +02:00 committed by GitHub
commit 93fad7f901
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 813 additions and 914 deletions

View File

@ -66,6 +66,6 @@ return array(
|
*/
'lifetime' => 43200,
'lifetime' => 525600,
);

View File

@ -0,0 +1,104 @@
<?php
namespace Webkul\API\Http\Controllers\Shop;
class InvoiceController extends Controller
{
/**
* Contains current guard.
*
* @var array
*/
protected $guard;
/**
* Contains route related configuration.
*
* @var array
*/
protected $_config;
/**
* Repository object.
*
* @var \Webkul\Core\Eloquent\Repository
*/
protected $repository;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$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->repository = app($this->_config['repository']);
}
/**
* Returns a listing of the invoices.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$query = $this->repository->scopeQuery(function($query) {
$query = $query->leftJoin('orders', 'invoices.order_id', '=', 'orders.id')->select('invoices.*', 'orders.customer_id');
if (isset($this->_config['authorization_required']) && $this->_config['authorization_required']) {
$query = $query->where('customer_id', auth()->user()->id);
}
foreach (request()->except(['page', 'limit', 'pagination', 'sort', 'order', 'token']) as $input => $value) {
$query = $query->whereIn($input, array_map('trim', explode(',', $value)));
}
if ($sort = request()->input('sort')) {
$query = $query->orderBy($sort, request()->input('order') ?? 'desc');
} else {
$query = $query->orderBy('id', 'desc');
}
return $query;
});
if (is_null(request()->input('pagination')) || request()->input('pagination')) {
$results = $query->paginate(request()->input('limit') ?? 10);
} else {
$results = $query->get();
}
return $this->_config['resource']::collection($results);
}
/**
* Returns an individual invoice.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function get($id)
{
if (isset($this->_config['authorization_required']) && $this->_config['authorization_required']) {
$query = $this->repository->leftJoin('orders', 'invoices.order_id', '=', 'orders.id')
->select('invoices.*', 'orders.customer_id')
->where('customer_id', auth()->user()->id)
->findOrFail($id);
} else {
$query = $this->repository->findOrFail($id);
}
return new $this->_config['resource']($query);
}
}

View File

@ -202,13 +202,13 @@ Route::group(['prefix' => 'api'], function ($router) {
//Invoice routes
Route::get('invoices', 'ResourceController@index')->defaults('_config', [
Route::get('invoices', 'InvoiceController@index')->defaults('_config', [
'repository' => 'Webkul\Sales\Repositories\InvoiceRepository',
'resource' => 'Webkul\API\Http\Resources\Sales\Invoice',
'authorization_required' => true
]);
Route::get('invoices/{id}', 'ResourceController@get')->defaults('_config', [
Route::get('invoices/{id}', 'InvoiceController@get')->defaults('_config', [
'repository' => 'Webkul\Sales\Repositories\InvoiceRepository',
'resource' => 'Webkul\API\Http\Resources\Sales\Invoice',
'authorization_required' => true

View File

@ -121,13 +121,13 @@ return [
'title' => 'admin::app.admin.system.logo-image',
'type' => 'image',
'channel_based' => true,
'validation' => 'mimes:jpeg,bmp,png,jpg',
'validation' => 'mimes:bmp,jpeg,jpg,png,webp',
], [
'name' => 'favicon',
'title' => 'admin::app.admin.system.favicon',
'type' => 'image',
'channel_based' => true,
'validation' => 'mimes:jpeg,bmp,png,jpg',
'validation' => 'mimes:bmp,jpeg,jpg,png,webp',
],
],
], [

View File

@ -58,7 +58,7 @@ class ConfigurationForm extends FormRequest
&& ! request()->input('general.design.admin_logo.logo_image.delete')
) {
$this->rules = array_merge($this->rules, [
'general.design.admin_logo.logo_image' => 'required|mimes:jpeg,bmp,png,jpg|max:5000',
'general.design.admin_logo.logo_image' => 'required|mimes:bmp,jpeg,jpg,png,webp|max:5000',
]);
}
@ -66,7 +66,7 @@ class ConfigurationForm extends FormRequest
&& ! request()->input('general.design.admin_logo.favicon.delete')
) {
$this->rules = array_merge($this->rules, [
'general.design.admin_logo.favicon' => 'required|mimes:jpeg,bmp,png,jpg|max:5000',
'general.design.admin_logo.favicon' => 'required|mimes:bmp,jpeg,jpg,png,webp|max:5000',
]);
}
@ -74,7 +74,7 @@ class ConfigurationForm extends FormRequest
&& ! request()->input('sales.orderSettings.invoice_slip_design.logo.delete')
) {
$this->rules = array_merge($this->rules, [
'sales.orderSettings.invoice_slip_design.logo' => 'required|mimes:jpeg,bmp,png,jpg|max:5000',
'sales.orderSettings.invoice_slip_design.logo' => 'required|mimes:bmp,jpeg,jpg,png,webp|max:5000',
]);
}
@ -89,7 +89,7 @@ class ConfigurationForm extends FormRequest
public function messages()
{
return [
'general.design.admin_logo.logo_image.mimes' => 'Invalid file format. Use only jpeg, bmp, png, jpg.',
'general.design.admin_logo.logo_image.mimes' => 'Invalid file format. Use only bmp, jpeg, jpg, png and webp.',
'catalog.products.storefront.products_per_page.comma_seperated_integer' => 'The "Product Per Page" field must be numeric and may contain comma.'
];
}

View File

@ -96,9 +96,9 @@
array_push($validations, 'size:' . $retVal);
}
if ($attribute->type == 'image') {
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, 'size:' . $retVal . '|mimes:bmp,jpeg,jpg,png,webp');
}
array_push($validations, $attribute->validation);

View File

@ -12,7 +12,7 @@
@else
<link rel="icon" sizes="16x16" href="{{ asset('vendor/webkul/ui/assets/images/favicon.ico') }}" />
@endif
<link rel="stylesheet" href="{{ asset('vendor/webkul/admin/assets/css/admin.css') }}">
<link rel="stylesheet" href="{{ asset('vendor/webkul/ui/assets/css/ui.css') }}">
@ -81,8 +81,8 @@
<div class="adjacent-center">
<div class="brand-logo">
@if (core()->getConfigData('general.design.admin_logo.logo_image'))
<img src="{{ \Illuminate\Support\Facades\Storage::url(core()->getConfigData('general.design.admin_logo.logo_image')) }}" alt="{{ config('app.name') }}" style="height: 40px; width: 110px;"/>
@if (core()->getConfigData('general.design.admin_logo.logo_image', core()->getCurrentChannelCode()))
<img src="{{ \Illuminate\Support\Facades\Storage::url(core()->getConfigData('general.design.admin_logo.logo_image', core()->getCurrentChannelCode())) }}" alt="{{ config('app.name') }}" style="height: 40px; width: 110px;"/>
@else
<img src="{{ asset('vendor/webkul/ui/assets/images/logo.png') }}" alt="{{ config('app.name') }}"/>
@endif

View File

@ -2,8 +2,8 @@
<div class="navbar-top-left">
<div class="brand-logo">
<a href="{{ route('admin.dashboard.index') }}">
@if (core()->getConfigData('general.design.admin_logo.logo_image'))
<img src="{{ \Illuminate\Support\Facades\Storage::url(core()->getConfigData('general.design.admin_logo.logo_image')) }}" alt="{{ config('app.name') }}" style="height: 40px; width: 110px;"/>
@if (core()->getConfigData('general.design.admin_logo.logo_image', core()->getCurrentChannelCode()))
<img src="{{ \Illuminate\Support\Facades\Storage::url(core()->getConfigData('general.design.admin_logo.logo_image', core()->getCurrentChannelCode())) }}" alt="{{ config('app.name') }}" style="height: 40px; width: 110px;"/>
@else
<img src="{{ asset('vendor/webkul/ui/assets/images/logo.png') }}" alt="{{ config('app.name') }}"/>
@endif
@ -32,7 +32,7 @@
<div class="dropdown-list bottom-right">
<span class="app-version">{{ __('admin::app.layouts.app-version', ['version' => 'v' . config('app.version')]) }}</span>
<div class="dropdown-container">
<label>Account</label>
<ul>

View File

@ -82,7 +82,7 @@ class CategoryController extends Controller
$this->validate(request(), [
'slug' => ['required', 'unique:category_translations,slug', new \Webkul\Core\Contracts\Validations\Slug],
'name' => 'required',
'image.*' => 'mimes:jpeg,jpg,bmp,png',
'image.*' => 'mimes:bmp,jpeg,jpg,png,webp',
'description' => 'required_if:display_mode,==,description_only,products_and_description',
]);
@ -127,7 +127,7 @@ class CategoryController extends Controller
}
}],
$locale . '.name' => 'required',
'image.*' => 'mimes:jpeg,jpg,bmp,png',
'image.*' => 'mimes:bmp,jpeg,jpg,png,webp',
]);
$this->categoryRepository->update(request()->all(), $id);

View File

@ -69,8 +69,8 @@ class ChannelController extends Controller
'currencies' => 'required|array|min:1',
'base_currency_id' => 'required|in_array:currencies.*',
'root_category_id' => 'required',
'logo.*' => 'mimes:jpeg,jpg,bmp,png',
'favicon.*' => 'mimes:jpeg,jpg,bmp,png',
'logo.*' => 'mimes:bmp,jpeg,jpg,png,webp',
'favicon.*' => 'mimes:bmp,jpeg,jpg,png,webp',
'seo_title' => 'required|string',
'seo_description' => 'required|string',
'seo_keywords' => 'required|string',
@ -132,8 +132,8 @@ class ChannelController extends Controller
'currencies' => 'required|array|min:1',
'base_currency_id' => 'required|in_array:currencies.*',
'root_category_id' => 'required',
'logo.*' => 'mimes:jpeg,jpg,bmp,png',
'favicon.*' => 'mimes:jpeg,jpg,bmp,png',
'logo.*' => 'mimes:bmp,jpeg,jpg,png,webp',
'favicon.*' => 'mimes:bmp,jpeg,jpg,png,webp',
'hostname' => 'unique:channels,hostname,' . $id,
]);

View File

@ -58,7 +58,7 @@ class SliderController extends Controller
$channels = core()->getAllChannels();
$locale = request()->get('locale') ?: core()->getCurrentLocale();
return view($this->_config['view'])->with("locale", $locale);
}
@ -72,7 +72,7 @@ class SliderController extends Controller
$this->validate(request(), [
'title' => 'string|required',
'channel_id' => 'required',
'image.*' => 'required|mimes:jpeg,bmp,png,jpg',
'image.*' => 'required|mimes:bmp,jpeg,jpg,png,webp',
]);
$result = $this->sliderRepository->save(request()->all());
@ -109,12 +109,12 @@ class SliderController extends Controller
$this->validate(request(), [
'title' => 'string|required',
'channel_id' => 'required',
'image.*' => 'sometimes|mimes:jpeg,bmp,png,jpg',
'image.*' => 'sometimes|mimes:bmp,jpeg,jpg,png,webp',
]);
if ( is_null(request()->image)) {
session()->flash('error', trans('admin::app.settings.sliders.update-fail'));
return redirect()->back();
}

View File

@ -16,6 +16,16 @@
return;
}
if (typeof paypal == 'undefined') {
window.flashMessages = [{'type': 'alert-error', 'message': "SDK Validation error: 'client-id not recognized for either production or sandbox: {{core()->getConfigData('sales.paymentmethods.paypal_smart_button.client_id')}}'" }];
window.flashMessages.alertMessage = "SDK Validation error: 'client-id not recognized for either production or sandbox: {{core()->getConfigData('sales.paymentmethods.paypal_smart_button.client_id')}}'";
app.addFlashMessages();
return;
}
var options = {
style: {
layout: 'vertical',

View File

@ -66,6 +66,6 @@ return array(
|
*/
'lifetime' => 43200,
'lifetime' => 525600,
);

View File

@ -64,10 +64,10 @@ class ProductForm extends FormRequest
public function rules()
{
$product = $this->productRepository->find($this->id);
$this->rules = array_merge($product->getTypeInstance()->getTypeValidationRules(), [
'sku' => ['required', 'unique:products,sku,' . $this->id, new \Webkul\Core\Contracts\Validations\Slug],
'images.*' => 'nullable|mimes:jpeg,jpg,bmp,png',
'images.*' => 'nullable|mimes:bmp,jpeg,jpg,png,webp',
'special_price_from' => 'nullable|date',
'special_price_to' => 'nullable|date|after_or_equal:special_price_from',
'special_price' => ['nullable', new \Webkul\Core\Contracts\Validations\Decimal, 'lt:price'],
@ -87,7 +87,7 @@ class ProductForm extends FormRequest
}
if ($attribute->type == 'text' && $attribute->validation) {
array_push($validations,
array_push($validations,
$attribute->validation == 'decimal'
? new \Webkul\Core\Contracts\Validations\Decimal
: $attribute->validation

View File

@ -659,16 +659,22 @@ abstract class AbstractType
continue;
}
if ($price->value < $lastPrice) {
if ($price->value_type == 'discount') {
if ($price->value_type == 'discount') {
if ($price->value >= 0 && $price->value <= 100) {
$lastPrice = $product->price - ($product->price * $price->value) / 100;
} else {
$lastPrice = $price->value;
$lastQty = $price->qty;
$lastCustomerGroupId = $price->customer_group_id;
}
} else {
if ($price->value >= 0 && $price->value < $lastPrice) {
$lastPrice = $price->value;
$lastQty = $price->qty;
$lastQty = $price->qty;
$lastCustomerGroupId = $price->customer_group_id;
$lastCustomerGroupId = $price->customer_group_id;
}
}
}

View File

@ -52,7 +52,7 @@ return [
'name' => 'logo',
'title' => 'admin::app.admin.system.logo',
'type' => 'image',
'validation' => 'mimes:jpeg,bmp,png,jpg',
'validation' => 'mimes:bmp,jpeg,jpg,png,webp',
'channel_based' => true,
],
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js?id=73723ffa31b9e1876375",
"/css/shop.css": "/css/shop.css?id=4d6a80790b697b2dc931"
"/js/shop.js": "/js/shop.js?id=c4dfdb6d0482241432f9",
"/css/shop.css": "/css/shop.css?id=11adc18bed8ace91c828"
}

View File

@ -117,6 +117,22 @@ input {
}
}
/* Product Page Description */
.details {
.description {
overflow: auto;
}
.accordian {
.accordian-content {
div {
overflow: auto;
}
}
}
}
/* Show the indicator (dot/circle) when checked */
.radio-container input:checked ~ .checkmark:after {
display: block;
@ -188,10 +204,16 @@ input {
}
}
/* if not very important use bootstrap 4 float-left and float-right class */
.pull-right {
float:right;
float: right !important;
}
.pull-left {
float: left !important;
}
/* if not very important use bootstrap 4 float-left and float-right class */
//wishlist icon hover properties
.add-to-wishlist {
.wishlist-icon {
@ -4642,7 +4664,6 @@ td {
.icon.remove-product {
top: 5px;
float: right;
cursor: pointer;
position: relative;
background-color: black;

View File

@ -3,7 +3,7 @@
$comparableAttributes = $attributeRepository->getComparableAttributesBelongsToFamily();
$locale = request()->get('locale') ?: app()->getLocale();
$attributeOptionTranslations = DB::table('attribute_option_translations')->where('locale', $locale)->get()->toJson();
@endphp
@ -16,7 +16,7 @@
<button
v-if="products.length > 0"
class="btn btn-primary btn-md pull-right"
class="btn btn-primary btn-md {{ core()->getCurrentLocale()->direction == 'rtl' ? 'pull-left' : 'pull-right' }}"
@click="removeProductCompare('all')">
{{ __('shop::app.customer.account.wishlist.deleteall') }}
</button>
@ -122,7 +122,7 @@
@break
@endswitch
@endswitch
</td>
</tr>
@endforeach
@ -326,7 +326,7 @@
'type': `alert-error`,
'message': "{{ __('shop::app.common.error') }}"
}];
this.$root.addFlashMessages();
});
} else {

View File

@ -230,7 +230,7 @@
<input type="file" :id="'image-search-container-' + _uid" ref="image_search_input" v-on:change="uploadImage()"/>
<img :id="'uploaded-image-url-' + + _uid" :src="uploaded_image_url" alt=""/>
<img :id="'uploaded-image-url-' + + _uid" :src="uploaded_image_url" alt="" width="20" height="20" />
</label>
</div>
</script>

View File

@ -21,7 +21,7 @@
<meta name="twitter:title" content="{{ $product->name }}" />
<meta name="twitter:description" content="{!! $product->description !!}" />
<meta name="twitter:description" content="{!! htmlspecialchars(trim(strip_tags($product->description))) !!}" />
<meta name="twitter:image:alt" content="" />
@ -33,7 +33,7 @@
<meta property="og:image" content="{{ $productBaseImage['medium_image_url'] }}" />
<meta property="og:description" content="{!! $product->description !!}" />
<meta property="og:description" content="{!! htmlspecialchars(trim(strip_tags($product->description))) !!}" />
<meta property="og:url" content="{{ route('shop.productOrCategory.index', $product->url_key) }}" />
@stop

View File

@ -195,8 +195,10 @@ abstract class DataGrid
$unparsed = url()->previous();
}
if (count(explode('?', $unparsed)) > 1) {
$to_be_parsed = explode('?', $unparsed)[1];
$getParametersArr = explode('?', $unparsed);
if (count($getParametersArr) > 1) {
$to_be_parsed = $getParametersArr[1];
$to_be_parsed = urldecode($to_be_parsed);
parse_str($to_be_parsed, $parsedUrl);
unset($parsedUrl['page']);
@ -205,7 +207,7 @@ abstract class DataGrid
if (isset($parsedUrl['grand_total'])) {
foreach ($parsedUrl['grand_total'] as $key => $value) {
$parsedUrl['grand_total'][$key] = str_replace(',', '.', $parsedUrl['grand_total'][$key]);
}
}
}
$this->itemsPerPage = isset($parsedUrl['perPage']) ? $parsedUrl['perPage']['eq'] : $this->itemsPerPage;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{
"/js/velocity.js": "/js/velocity.js?id=8aa00114ba3523e8303b",
"/js/velocity.js": "/js/velocity.js?id=5564b51adff2922a266b",
"/css/velocity-admin.css": "/css/velocity-admin.css?id=4322502d80a0e4a0affd",
"/css/velocity.css": "/css/velocity.css?id=8cf54786f83b29684543"
"/css/velocity.css": "/css/velocity.css?id=ec5d8f2924b41d7cc753"
}

View File

@ -168,6 +168,7 @@ class ShopController extends Controller
'name' => $category->name,
'children' => $formattedChildCategory,
'category_icon_path' => $category->category_icon_path,
'image' => $category->image
];
}

View File

@ -48,12 +48,6 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function
Route::delete('/comparison', 'ComparisonController@deleteComparisonProduct')
->name('customer.product.delete.compare');
Route::get('/guest-wishlist', 'ShopController@getWishlistList')
->name('velocity.product.guest-wishlist')
->defaults('_config', [
'view' => 'shop::guest.wishlist.index'
]);
Route::get('/items-count', 'ShopController@getItemsCount')
->name('velocity.product.item-count');

View File

@ -1,5 +1,6 @@
<template>
<form method="POST" @submit.prevent="addToCart">
<!-- for move to cart from wishlist -->
<a
:href="wishlistMoveRoute"
@ -25,6 +26,7 @@
<span class="fs14 fw6 text-uppercase text-up-4" v-text="btnText"></span>
</button>
</form>
</template>
@ -67,15 +69,6 @@
if (response.data.status == 'success') {
this.$root.miniCartKey++;
if (this.moveToCart == "true") {
let existingItems = this.getStorageValue('wishlist_product');
let updatedItems = existingItems.filter(item => item != this.productFlatId);
this.$root.headerItemsCount++;
this.setStorageValue('wishlist_product', updatedItems);
}
window.showAlert(`alert-success`, this.__('shop.general.alert.success'), response.data.message);
if (this.reloadPage == "1") {

View File

@ -0,0 +1,98 @@
<template>
<div class="container-fluid remove-padding-margin">
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
<template v-else-if="categoryProducts.length > 0">
<card-list-header
:heading="categoryDetails.name"
:view-all="`${this.baseUrl}/${categoryDetails.slug}`">
</card-list-header>
<div class="carousel-products vc-full-screen ltr" v-if="!isMobileView">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
locale-direction="localeDirection"
:id="`${categoryDetails.name}-carousel`">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in categoryProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
<div class="carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
locale-direction="localeDirection"
:id="`${categoryDetails.name}-carousel`">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in categoryProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
</template>
</div>
</template>
<script>
export default {
props: [
'categorySlug',
'localeDirection'
],
data: function () {
return {
isLoading: true,
isCategory: false,
heading: 'customer',
categoryProducts: [],
isMobileView: this.$root.isMobile(),
}
},
mounted: function () {
this.getCategoryDetails();
},
methods: {
'getCategoryDetails': function () {
this.$http.get(`${this.baseUrl}/category-details?category-slug=${this.categorySlug}`)
.then(response => {
if (response.data.status) {
this.list = response.data.list;
this.categoryDetails = response.data.categoryDetails;
this.categoryProducts = response.data.categoryProducts;
this.isCategory = true;
}
this.isLoading = false;
})
.catch(error => {
this.isLoading = false;
console.log(this.__('error.something_went_wrong'));
});
}
}
}
</script>

View File

@ -0,0 +1,58 @@
<template>
<div class="col-lg-3 col-md-12 hot-category-wrapper" v-if="hotCategoryDetails">
<div class="card">
<div class="row velocity-divide-page">
<div class="left">
<img :src="`${$root.baseUrl}/storage/${hotCategoryDetails.category_icon_path}`" alt="" />
</div>
<div class="right">
<h3 class="fs20 clr-light text-uppercase">
<a href="${slug}" class="unset">
{{ hotCategoryDetails.name }}
</a>
</h3>
<ul type="none">
<li :key="index" v-for="(subCategory, index) in hotCategoryDetails.children">
<a :href="`${slug}/${subCategory.slug}`" class="remove-decoration normal-text">
{{ subCategory.name }}
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: [
'slug'
],
data: function () {
return {
'hotCategoryDetails': null
}
},
mounted: function () {
this.getHotCategories();
},
methods: {
'getHotCategories': function () {
this.$http.get(`${this.baseUrl}/fancy-category-details/${this.slug}`)
.then(response => {
if (response.data.status)
this.hotCategoryDetails = response.data.categoryDetails;
})
.catch(error => {
console.log('something went wrong');
})
}
}
}
</script>

View File

@ -0,0 +1,53 @@
<template>
<div class="col-lg-3 col-md-12 popular-category-wrapper" v-if="popularCategoryDetails">
<div class="card col-12 no-padding">
<div class="category-image">
<img :data-src="`${$root.baseUrl}/storage/${popularCategoryDetails.image}`" class="lazyload" alt="" />
</div>
<div class="card-description">
<h3 class="fs20">{{ popularCategoryDetails.name }}</h3>
<ul class="font-clr pl30">
<li :key="index" v-for="(subCategory, index) in popularCategoryDetails.children">
<a :href="`${slug}/${subCategory.slug}`" class="remove-decoration normal-text">
{{ subCategory.name }}
</a>
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
export default {
props: [
'slug'
],
data: function () {
return {
'popularCategoryDetails': null
}
},
mounted: function () {
this.getPopularCategories();
},
methods: {
'getPopularCategories': function () {
this.$http.get(`${this.baseUrl}/fancy-category-details/${this.slug}`)
.then(response => {
if (response.data.status) {
this.popularCategoryDetails = response.data.categoryDetails;
}
})
.catch(error => {
console.log('something went wrong');
})
}
}
}
</script>

View File

@ -26,7 +26,8 @@
<img
v-if="category.category_icon_path"
:src="`${$root.baseUrl}/storage/${category.category_icon_path}`" />
:src="`${$root.baseUrl}/storage/${category.category_icon_path}`"
width="20" height="20" />
</div>
<span class="category-title">{{ category['name'] }}</span>

View File

@ -1,106 +1,24 @@
<template>
<i
v-if="isCustomer == 'true'"
:class="`material-icons ${addClass ? addClass : ''}`"
@mouseover="isActive ? isActive = !isActive : ''"
@mouseout="active !== '' && !isActive ? isActive = !isActive : ''">
{{ isActive ? 'favorite_border' : 'favorite' }}
</i>
<a
v-else
:title="`${isActive ? addTooltip : removeTooltip}`"
@click="toggleProductWishlist(productId)"
:class="`unset wishlist-icon ${addClass ? addClass : ''} text-right`">
<i
@mouseout="! isStateChanged ? isActive = !isActive : isStateChanged = false"
@mouseover="! isStateChanged ? isActive = !isActive : isStateChanged = false"
:class="`material-icons ${addClass ? addClass : ''}`">
{{ isActive ? 'favorite' : 'favorite_border' }}
</i>
<span style="vertical-align: super;" v-html="text"></span>
</a>
</template>
<script type="text/javascript">
export default {
props: [
'text',
'active',
'addClass',
'addedText',
'productId',
'removeText',
'isCustomer',
'productSlug',
'moveToWishlist',
'addTooltip',
'removeTooltip'
],
data: function () {
return {
isStateChanged: false,
isActive: this.active,
}
},
created: function () {
if (this.isCustomer == 'false') {
this.isActive = this.isWishlisted(this.productId);
}
},
methods: {
toggleProductWishlist: function (productId) {
var updatedValue = [productId];
let existingValue = this.getStorageValue('wishlist_product');
if (existingValue) {
var valueIndex = existingValue.indexOf(productId);
if (valueIndex == -1) {
this.isActive = true;
existingValue.push(productId);
} else {
this.isActive = false;
existingValue.splice(valueIndex, 1);
}
updatedValue = existingValue;
}
this.$root.headerItemsCount++;
this.isStateChanged = true;
this.setStorageValue('wishlist_product', updatedValue);
window.showAlert(
'alert-success',
this.__('shop.general.alert.success'),
this.isActive ? this.addedText : this.removeText
);
if (this.moveToWishlist && valueIndex == -1) {
window.location.href = this.moveToWishlist;
}
return true;
},
isWishlisted: function (productId) {
let existingValue = this.getStorageValue('wishlist_product');
if (existingValue) {
return ! (existingValue.indexOf(productId) == -1);
} else {
return false;
}
}
}
}
</script>

View File

@ -52,6 +52,9 @@ Vue.component("shimmer-component", require("./UI/components/shimmer-component"))
Vue.component('responsive-sidebar', require('./UI/components/responsive-sidebar'));
Vue.component('product-quick-view', require('./UI/components/product-quick-view'));
Vue.component('product-quick-view-btn', require('./UI/components/product-quick-view-btn'));
Vue.component('category-products', require('./UI/components/category-products'));
Vue.component('hot-category', require('./UI/components/hot-category'));
Vue.component('popular-category', require('./UI/components/popular-category'));
window.eventBus = new Vue();

View File

@ -411,7 +411,7 @@ header {
max-width: 550px;
.selectdiv {
width: 170px;
width: 210px;
.select-icon {
top: 9px;
@ -445,7 +445,6 @@ header {
input {
@include border-radius(0px);
width: 380px;
height: 100%;
font-size: 14px;
padding: 0 10px;
@ -483,6 +482,7 @@ header {
}
.mini-cart-container {
width: 125px;
height: 50px;
padding: 5px 17px;

View File

@ -29,20 +29,6 @@
}
}
}
#search-form {
.selectdiv {
+ div {
input {
width: 220px;
}
}
}
}
.image-search-container {
right: 60px;
}
}

View File

@ -353,6 +353,12 @@
overflow: auto;
}
.accordian-content {
div {
overflow: auto;
}
}
.full-description {
font-size: 14px;
}

View File

@ -163,6 +163,11 @@ body {
}
}
.sticker {
left: unset;
right: 8px;
}
.subscriber-form-div {
text-align: left;
}
@ -347,7 +352,7 @@ body {
.compare-products {
.wishlist-icon {
left: 60px;
left: 52px;
right: unset;
}
@ -493,36 +498,7 @@ body {
}
@media only screen and (max-width: 1192px) {
body {
&.rtl {
#search-form {
#header-search-icon {
float: right;
border-radius: 2px 0px 0px 2px;
}
.btn-group {
.selectdiv {
width: 190px;
}
}
.selectdiv {
+ div {
input {
width: 220px;
}
}
}
}
.image-search-container {
left: 70px;
}
}
}
}
@media only screen and (max-width: 992px) {
@ -531,7 +507,7 @@ body {
.order-summary-container {
margin-right: 0px;
}
.nav-container {
ul {
li {
@ -601,6 +577,12 @@ body {
.fs16 {
font-size: 10px !important;
}
.velocity-divide-page {
.right {
padding: 0 20px !important;
}
}
}
}
}

View File

@ -72,7 +72,7 @@
<img
class="category-icon"
v-if="category.category_icon_path"
:src="`${$root.baseUrl}/storage/${category.category_icon_path}`" alt="" />
:src="`${$root.baseUrl}/storage/${category.category_icon_path}`" alt="" width="20" height="20" />
</div>
<span v-text="category.name"></span>
</a>
@ -213,7 +213,7 @@
<img
class="category-icon"
v-if="nestedSubCategory.category_icon_path"
:src="`${$root.baseUrl}/storage/${nestedSubCategory.category_icon_path}`" alt="" />
:src="`${$root.baseUrl}/storage/${nestedSubCategory.category_icon_path}`" alt="" width="20" height="20" />
</div>
<span>@{{ nestedSubCategory.name }}</span>
</a>
@ -234,7 +234,7 @@
<img
class="category-icon"
v-if="thirdLevelCategory.category_icon_path"
:src="`${$root.baseUrl}/storage/${thirdLevelCategory.category_icon_path}`" alt="" />
:src="`${$root.baseUrl}/storage/${thirdLevelCategory.category_icon_path}`" alt="" width="20" height="20" />
</div>
<span>@{{ thirdLevelCategory.name }}</span>
</a>
@ -266,14 +266,14 @@
<div class="category-logo">
<img
class="category-icon"
src="{{ asset('/themes/velocity/assets/images/flags/en.png') }}" alt="" />
src="{{ asset('/themes/velocity/assets/images/flags/en.png') }}" alt="" width="20" height="20" />
</div>
@else
<div class="category-logo">
<img
class="category-icon"
src="{{ asset('/storage/' . $locale->locale_image) }}" alt="" />
src="{{ asset('/storage/' . $locale->locale_image) }}" alt="" width="20" height="20" />
</div>
@endif
@ -346,7 +346,7 @@
</a>
@endif
<a class="wishlist-btn unset" :href="`${isCustomer ? '{{ route('customer.wishlist.index') }}' : '{{ route('velocity.product.guest-wishlist') }}'}`">
<a class="wishlist-btn unset" :href="`{{ route('customer.wishlist.index') }}`">
<div class="badge-container" v-if="wishlistCount > 0">
<span class="badge" v-text="wishlistCount"></span>
</div>
@ -513,11 +513,6 @@
updateHeaderItemsCount: function () {
if (! this.isCustomer) {
let comparedItems = this.getStorageValue('compared_product');
let wishlistedItems = this.getStorageValue('wishlist_product');
if (wishlistedItems) {
this.wishlistCount = wishlistedItems.length;
}
if (comparedItems) {
this.compareCount = comparedItems.length;

View File

@ -54,116 +54,117 @@
aria-label="Logo">
@if ($logo = core()->getCurrentChannel()->logo_url)
<img class="logo" src="{{ $logo }}" alt="" />
<img class="logo" src="{{ $logo }}" alt="" width="200" height="50" />
@else
<img class="logo" src="{{ asset('themes/velocity/assets/images/logo-text.png') }}" alt="" />
<img class="logo" src="{{ asset('themes/velocity/assets/images/logo-text.png') }}" alt="" width="200" height="50" />
@endif
</a>
</script>
<script type="text/x-template" id="searchbar-template">
<div class="row no-margin right searchbar">
<div class="col-lg-5 col-md-12 no-padding input-group">
<form
method="GET"
role="search"
id="search-form"
action="{{ route('velocity.search.index') }}">
<div class="right searchbar">
<div class="row">
<div class="col-lg-5 col-md-12">
<div class="input-group">
<form
method="GET"
role="search"
id="search-form"
action="{{ route('velocity.search.index') }}">
<div
class="btn-toolbar full-width"
role="toolbar">
<div
class="btn-toolbar full-width"
role="toolbar">
<div class="btn-group full-width">
<div class="selectdiv">
<select class="form-control fs13 styled-select" name="category" @change="focusInput($event)" aria-label="Category">
<option value="">
{{ __('velocity::app.header.all-categories') }}
</option>
<div class="btn-group full-width">
<div class="selectdiv">
<select class="form-control fs13 styled-select" name="category" @change="focusInput($event)" aria-label="Category">
<option value="">
{{ __('velocity::app.header.all-categories') }}
</option>
<template v-for="(category, index) in $root.sharedRootCategories">
<option
:key="index"
selected="selected"
:value="category.id"
v-if="(category.id == searchedQuery.category)">
@{{ category.name }}
</option>
<template v-for="(category, index) in $root.sharedRootCategories">
<option
:key="index"
selected="selected"
:value="category.id"
v-if="(category.id == searchedQuery.category)">
@{{ category.name }}
</option>
<option :key="index" :value="category.id" v-else>
@{{ category.name }}
</option>
</template>
</select>
<option :key="index" :value="category.id" v-else>
@{{ category.name }}
</option>
</template>
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
</div>
<input
required
name="term"
type="search"
class="form-control"
placeholder="{{ __('velocity::app.header.search-text') }}"
aria-label="Search"
v-model:value="inputVal" />
<image-search-component></image-search-component>
<button class="btn" type="button" id="header-search-icon" aria-label="Search" @click="submitForm">
<i class="fs16 fw6 rango-search"></i>
</button>
</div>
</div>
<div class="full-width">
<input
required
name="term"
type="search"
class="form-control"
placeholder="{{ __('velocity::app.header.search-text') }}"
aria-label="Search"
:value="searchedQuery.term ? decodeURIComponent(searchedQuery.term.split('+').join(' ')) : ''" />
<image-search-component></image-search-component>
<button class="btn" type="submit" id="header-search-icon" aria-label="Search">
<i class="fs16 fw6 rango-search"></i>
</button>
</div>
</div>
</form>
</div>
</div>
</form>
</div>
<div class="col-lg-7 col-md-12">
{!! view_render_event('bagisto.shop.layout.header.cart-item.before') !!}
@include('shop::checkout.cart.mini-cart')
{!! view_render_event('bagisto.shop.layout.header.cart-item.after') !!}
<div class="col-lg-7 col-md-12">
{!! view_render_event('bagisto.shop.layout.header.cart-item.before') !!}
@include('shop::checkout.cart.mini-cart')
{!! view_render_event('bagisto.shop.layout.header.cart-item.after') !!}
@php
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false
@endphp
@php
$showCompare = core()->getConfigData('general.content.shop.compare_option') == "1" ? true : false
@endphp
{!! view_render_event('bagisto.shop.layout.header.compare.before') !!}
@if ($showCompare)
<a
class="compare-btn unset"
@auth('customer')
href="{{ route('velocity.customer.product.compare') }}"
@endauth
{!! view_render_event('bagisto.shop.layout.header.compare.before') !!}
@if ($showCompare)
<a
class="compare-btn unset"
@auth('customer')
href="{{ route('velocity.customer.product.compare') }}"
@endauth
@guest('customer')
href="{{ route('velocity.product.compare') }}"
@endguest
>
@guest('customer')
href="{{ route('velocity.product.compare') }}"
@endguest
>
<i class="material-icons">compare_arrows</i>
<div class="badge-container" v-if="compareCount > 0">
<span class="badge" v-text="compareCount"></span>
</div>
<span>{{ __('velocity::app.customer.compare.text') }}</span>
</a>
@endif
{!! view_render_event('bagisto.shop.layout.header.compare.after') !!}
<i class="material-icons">compare_arrows</i>
<div class="badge-container" v-if="compareCount > 0">
<span class="badge" v-text="compareCount"></span>
{!! view_render_event('bagisto.shop.layout.header.wishlist.before') !!}
<a class="wishlist-btn unset" :href="`{{ route('customer.wishlist.index') }}`">
<i class="material-icons">favorite_border</i>
<div class="badge-container" v-if="wishlistCount > 0">
<span class="badge" v-text="wishlistCount"></span>
</div>
<span>{{ __('velocity::app.customer.compare.text') }}</span>
<span>{{ __('shop::app.layouts.wishlist') }}</span>
</a>
@endif
{!! view_render_event('bagisto.shop.layout.header.compare.after') !!}
{!! view_render_event('bagisto.shop.layout.header.wishlist.before') !!}
<a class="wishlist-btn unset" :href="`${isCustomer ? '{{ route('customer.wishlist.index') }}' : '{{ route('velocity.product.guest-wishlist') }}'}`">
<i class="material-icons">favorite_border</i>
<div class="badge-container" v-if="wishlistCount > 0">
<span class="badge" v-text="wishlistCount"></span>
</div>
<span>{{ __('shop::app.layouts.wishlist') }}</span>
</a>
{!! view_render_event('bagisto.shop.layout.header.wishlist.after') !!}
{!! view_render_event('bagisto.shop.layout.header.wishlist.after') !!}
</div>
</div>
</div>
</script>
@ -172,8 +173,8 @@
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet"></script>
<script type="text/x-template" id="image-search-component-template">
<div class="d-inline-block" v-if="image_search_status">
<label class="image-search-container" for="image-search-container">
<div class="d-inline-block image-search-container">
<label for="image-search-container">
<i class="icon camera-icon"></i>
<input
@ -186,7 +187,7 @@
<img
class="d-none"
id="uploaded-image-url"
:src="uploadedImageUrl" alt="" />
:src="uploadedImageUrl" alt="" width="20" height="20" />
</label>
</div>
</script>
@ -285,8 +286,10 @@
Vue.component('searchbar-component', {
template: '#searchbar-template',
data: function () {
return {
inputVal: '',
compareCount: 0,
wishlistCount: 0,
searchedQuery: [],
@ -317,6 +320,10 @@
this.searchedQuery = updatedSearchedCollection;
if (this.searchedQuery.term) {
this.inputVal = decodeURIComponent(this.searchedQuery.term.split('+').join(' '));
}
this.updateHeaderItemsCount();
},
@ -325,14 +332,15 @@
$(event.target.parentElement.parentElement).find('input').focus();
},
'submitForm': function () {
if (this.inputVal !== '') {
$('#search-form').submit();
}
},
'updateHeaderItemsCount': function () {
if (! this.isCustomer) {
let comparedItems = this.getStorageValue('compared_product');
let wishlistedItems = this.getStorageValue('wishlist_product');
if (wishlistedItems) {
this.wishlistCount = wishlistedItems.length;
}
if (comparedItems) {
this.compareCount = comparedItems.length;

View File

@ -5,192 +5,188 @@
@endsection
@section('page-detail-wrapper')
<div class="account-head">
<a href="{{ route('customer.session.destroy') }}" class="theme-btn light unset pull-right">
{{ __('shop::app.header.logout') }}
</a>
<h1 class="account-heading">
{{ __('shop::app.customer.account.profile.index.title') }}
</h1>
<div class="account-head mb-15">
<span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span>
<span class="account-heading">{{ __('shop::app.customer.account.profile.index.title') }}</span>
<span></span>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.before', ['customer' => $customer]) !!}
<div class="profile-update-form">
<form
method="POST"
@submit.prevent="onSubmit"
class="account-table-content"
action="{{ route('customer.profile.store') }}">
@csrf
<form
method="POST"
@submit.prevent="onSubmit"
action="{{ route('customer.profile.store') }}">
{!! view_render_event('bagisto.shop.customers.account.profile.edit_form_controls.before', ['customer' => $customer]) !!}
<div class="account-table-content">
@csrf
<div :class="`row ${errors.has('first_name') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.fname') }}
</label>
{!! view_render_event('bagisto.shop.customers.account.profile.edit_form_controls.before', ['customer' => $customer]) !!}
<div class="col-12">
<input value="{{ $customer->first_name }}" name="first_name" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
<div :class="`row ${errors.has('first_name') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.fname') }}
</label>
<div class="col-12">
<input value="{{ $customer->first_name }}" name="first_name" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.first_name.after', ['customer' => $customer]) !!}
{!! view_render_event('bagisto.shop.customers.account.profile.edit.first_name.after', ['customer' => $customer]) !!}
<div class="row">
<label class="col-12">
{{ __('shop::app.customer.account.profile.lname') }}
</label>
<div class="row">
<label class="col-12">
{{ __('shop::app.customer.account.profile.lname') }}
</label>
<div class="col-12">
<input value="{{ $customer->last_name }}" name="last_name" type="text" />
</div>
<div class="col-12">
<input value="{{ $customer->last_name }}" name="last_name" type="text" />
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.last_name.after', ['customer' => $customer]) !!}
{!! view_render_event('bagisto.shop.customers.account.profile.edit.last_name.after', ['customer' => $customer]) !!}
<div :class="`row ${errors.has('gender') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.gender') }}
</label>
<div :class="`row ${errors.has('gender') ? 'has-error' : ''}`">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.gender') }}
</label>
<div class="col-12">
<select
name="gender"
v-validate="'required'"
class="control styled-select"
data-vv-as="&quot;{{ __('shop::app.customer.account.profile.gender') }}&quot;">
<div class="col-12">
<select
name="gender"
v-validate="'required'"
class="control styled-select"
data-vv-as="&quot;{{ __('shop::app.customer.account.profile.gender') }}&quot;">
<option value="" @if ($customer->gender == "") selected @endif></option>
<option
value="Other"
@if ($customer->gender == "Other")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.other') }}
</option>
<option value="" @if ($customer->gender == "") selected @endif></option>
<option
value="Other"
@if ($customer->gender == "Other")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.other') }}
</option>
<option
value="Male"
@if ($customer->gender == "Male")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.male') }}
</option>
<option
value="Male"
@if ($customer->gender == "Male")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.male') }}
</option>
<option
value="Female"
@if ($customer->gender == "Female")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.female') }}
</option>
</select>
<option
value="Female"
@if ($customer->gender == "Female")
selected="selected"
@endif>
{{ __('velocity::app.shop.gender.female') }}
</option>
</select>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
<div class="select-icon-container">
<span class="select-icon rango-arrow-down"></span>
</div>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.gender.after', ['customer' => $customer]) !!}
{!! view_render_event('bagisto.shop.customers.account.profile.edit.gender.after', ['customer' => $customer]) !!}
<div :class="`row ${errors.has('date_of_birth') ? 'has-error' : ''}`">
<label class="col-12">
{{ __('shop::app.customer.account.profile.dob') }}
</label>
<div :class="`row ${errors.has('date_of_birth') ? 'has-error' : ''}`">
<label class="col-12">
{{ __('shop::app.customer.account.profile.dob') }}
</label>
<div class="col-12">
<input
type="date"
name="date_of_birth"
placeholder="dd/mm/yyyy"
value="{{ old('date_of_birth') ?? $customer->date_of_birth }}"
v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.profile.dob') }}&quot;" />
<div class="col-12">
<input
type="date"
name="date_of_birth"
placeholder="dd/mm/yyyy"
value="{{ old('date_of_birth') ?? $customer->date_of_birth }}"
v-validate="" data-vv-as="&quot;{{ __('shop::app.customer.account.profile.dob') }}&quot;" />
<span class="control-error" v-if="errors.has('date_of_birth')">
@{{ errors.first('date_of_birth') }}
</span>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.date_of_birth.after', ['customer' => $customer]) !!}
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.email') }}
</label>
<div class="col-12">
<input value="{{ $customer->email }}" name="email" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.email.after', ['customer' => $customer]) !!}
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.enter-current-password') }}
</label>
<div :class="`col-12 ${errors.has('oldpassword') ? 'has-error' : ''}`">
<input value="" name="oldpassword" type="password" />
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.oldpassword.after', ['customer' => $customer]) !!}
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.new-password') }}
</label>
<div :class="`col-12 ${errors.has('password') ? 'has-error' : ''}`">
<input
value=""
name="password"
ref="password"
type="password"
v-validate="'min:6|max:18'" />
<span class="control-error" v-if="errors.has('password')">
@{{ errors.first('password') }}
<span class="control-error" v-if="errors.has('date_of_birth')">
@{{ errors.first('date_of_birth') }}
</span>
</div>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.password.after', ['customer' => $customer]) !!}
{!! view_render_event('bagisto.shop.customers.account.profile.edit.date_of_birth.after', ['customer' => $customer]) !!}
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.confirm-new-password') }}
</label>
<div class="row">
<label class="col-12 mandatory">
{{ __('shop::app.customer.account.profile.email') }}
</label>
<div :class="`col-12 ${errors.has('password_confirmation') ? 'has-error' : ''}`">
<input value="" name="password_confirmation" type="password"
v-validate="'min:6|confirmed:password'" data-vv-as="confirm password" />
<span class="control-error" v-if="errors.has('password_confirmation')">
@{{ errors.first('password_confirmation') }}
</span>
</div>
<div class="col-12">
<input value="{{ $customer->email }}" name="email" type="text" v-validate="'required'" />
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit_form_controls.after', ['customer' => $customer]) !!}
{!! view_render_event('bagisto.shop.customers.account.profile.edit.email.after', ['customer' => $customer]) !!}
<button
type="submit"
class="theme-btn mb20">
{{ __('velocity::app.shop.general.update') }}
</button>
</form>
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.enter-current-password') }}
</label>
<div :class="`col-12 ${errors.has('oldpassword') ? 'has-error' : ''}`">
<input value="" name="oldpassword" type="password" />
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.oldpassword.after', ['customer' => $customer]) !!}
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.new-password') }}
</label>
<div :class="`col-12 ${errors.has('password') ? 'has-error' : ''}`">
<input
value=""
name="password"
ref="password"
type="password"
v-validate="'min:6|max:18'" />
<span class="control-error" v-if="errors.has('password')">
@{{ errors.first('password') }}
</span>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.password.after', ['customer' => $customer]) !!}
<div class="row">
<label class="col-12">
{{ __('velocity::app.shop.general.confirm-new-password') }}
</label>
<div :class="`col-12 ${errors.has('password_confirmation') ? 'has-error' : ''}`">
<input value="" name="password_confirmation" type="password"
v-validate="'min:6|confirmed:password'" data-vv-as="confirm password" />
<span class="control-error" v-if="errors.has('password_confirmation')">
@{{ errors.first('password_confirmation') }}
</span>
</div>
</div>
{!! view_render_event('bagisto.shop.customers.account.profile.edit_form_controls.after', ['customer' => $customer]) !!}
<button
type="submit"
class="theme-btn mb20">
{{ __('velocity::app.shop.general.update') }}
</button>
</div>
</form>
{!! view_render_event('bagisto.shop.customers.account.profile.edit.after', ['customer' => $customer]) !!}
@endsection

View File

@ -3,21 +3,10 @@
$comparableAttributes = $attributeRepository->getComparableAttributesBelongsToFamily();
$locale = request()->get('locale') ?: app()->getLocale();
$attributeOptionTranslations = DB::table('attribute_option_translations')->where('locale', $locale)->get()->toJson();
@endphp
@push('css')
<style>
.btn-add-to-cart {
max-width: 130px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>
@endpush
@push('scripts')
<script type="text/x-template" id="compare-product-template">
<section class="cart-details row no-margin col-12">

View File

@ -5,126 +5,9 @@
@endsection
@section('content-wrapper')
@guest('customer')
<wishlist-product></wishlist-product>
@endguest
@auth('customer')
@push('scripts')
<script>
window.location = '{{ route('customer.wishlist.index') }}';
</script>
@endpush
@endauth
@endsection
@push('scripts')
<script type="text/x-template" id="wishlist-product-template">
<section class="cart-details row no-margin col-12">
<h1 class="fw6 col-6">
{{ __('shop::app.customer.account.wishlist.title') }}
</h1>
<div class="col-6" v-if="products.length > 0">
<button
class="theme-btn light pull-right"
@click="removeProduct('all')">
{{ __('shop::app.customer.account.wishlist.deleteall') }}
</button>
</div>
{!! view_render_event('bagisto.shop.customers.account.guest-customer.view.before') !!}
<div class="row products-collection col-12 ml0">
<shimmer-component v-if="!isProductListLoaded && !isMobile()"></shimmer-component>
<template v-else-if="isProductListLoaded && products.length > 0">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
id="wishlist-products-carousel"
locale-direction="{{ core()->getCurrentLocale()->direction == 'rtl' ? 'rtl' : 'ltr' }}"
:slides-count="products.length">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in products">
<product-card :product="product"></product-card>
</slide>
</carousel-component>
</template>
<span v-else-if="isProductListLoaded">{{ __('customer::app.wishlist.empty') }}</span>
</div>
{!! view_render_event('bagisto.shop.customers.account.guest-customer.view.after') !!}
</section>
</script>
<script>
Vue.component('wishlist-product', {
template: '#wishlist-product-template',
data: function () {
return {
'products': [],
'isProductListLoaded': false,
}
},
watch: {
'$root.headerItemsCount': function () {
this.getProducts();
}
},
mounted: function () {
this.getProducts();
},
methods: {
'getProducts': function () {
let items = this.getStorageValue('wishlist_product');
items = items ? items.join('&') : '';
if (items != "") {
this.$http
.get(`${this.$root.baseUrl}/detailed-products`, {
params: { moveToCart: true, items }
})
.then(response => {
this.isProductListLoaded = true;
this.products = response.data.products;
})
.catch(error => {
this.isProductListLoaded = true;
console.log(this.__('error.something_went_wrong'));
});
} else {
this.products = [];
this.isProductListLoaded = true;
}
},
'removeProduct': function (productId) {
let existingItems = this.getStorageValue('wishlist_product');
if (productId == "all") {
updatedItems = [];
this.$set(this, 'products', []);
} else {
updatedItems = existingItems.filter(item => item != productId);
this.$set(this, 'products', this.products.filter(product => product.slug != productId));
}
this.$root.headerItemsCount++;
this.setStorageValue('wishlist_product', updatedItems);
window.showAlert(`alert-success`, this.__('shop.general.alert.success'), `${this.__('customer.wishlist.remove-all-success')}`);
}
}
});
</script>
@endpush
@push('scripts')
<script>
window.location = '{{ route('customer.wishlist.index') }}';
</script>
@endpush
@endsection

View File

@ -1,116 +1,4 @@
@inject ('productRepository', 'Webkul\Product\Repositories\ProductRepository')
<category-products
category-slug="{{ $category }}"
></category-products>
@push('scripts')
<script type="text/x-template" id="category-products-template">
<div class="container-fluid remove-padding-margin">
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
<template v-else-if="categoryProducts.length > 0">
<card-list-header
:heading="categoryDetails.name"
:view-all="`${this.baseUrl}/${categoryDetails.slug}`">
</card-list-header>
<div class="carousel-products vc-full-screen ltr" v-if="!isMobileView">
<carousel-component
slides-per-page="6"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
locale-direction="{{ core()->getCurrentLocale()->direction == 'rtl' ? 'rtl' : 'ltr' }}"
:id="`${categoryDetails.name}-carousel`">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in categoryProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
<div class="carousel-products vc-small-screen" v-else>
<carousel-component
slides-per-page="2"
navigation-enabled="hide"
pagination-enabled="hide"
:slides-count="categoryProducts.length"
locale-direction="{{ core()->getCurrentLocale()->direction == 'rtl' ? 'rtl' : 'ltr' }}"
:id="`${categoryDetails.name}-carousel`">
<slide
:key="index"
:slot="`slide-${index}`"
v-for="(product, index) in categoryProducts">
<product-card
:list="list"
:product="product">
</product-card>
</slide>
</carousel-component>
</div>
</template>
</div>
</script>
<script type="text/javascript">
(() => {
Vue.component('category-products', {
template: '#category-products-template',
props: [
'categorySlug',
],
data: function () {
return {
isLoading: true,
isCategory: false,
heading: 'customer',
categoryProducts: [],
isMobileView: this.$root.isMobile(),
}
},
mounted: function () {
this.getCategoryDetails();
},
methods: {
'getCategoryDetails': function () {
this.$http.get(`${this.baseUrl}/category-details?category-slug=${this.categorySlug}`)
.then(response => {
if (response.data.status) {
this.list = response.data.list;
this.categoryDetails = response.data.categoryDetails;
this.categoryProducts = response.data.categoryProducts;
this.isCategory = true;
// setTimeout(() => {
// let imagesCollection = document.querySelectorAll('img.lzy_img');
// imagesCollection.forEach((image) => {
// this.$root.imageObserver.observe(image);
// });
// }, 0);
}
this.isLoading = false;
})
.catch(error => {
this.isLoading = false;
console.log(this.__('error.something_went_wrong'));
});
}
}
})
})()
</script>
@endpush
locale-direction="{{ core()->getCurrentLocale()->direction == 'rtl' ? 'rtl' : 'ltr' }}">
</category-products>

View File

@ -7,66 +7,4 @@
<hot-category slug="{{ $slug }}"></hot-category>
@endforeach
</div>
</div>
@push('scripts')
<script type="text/x-template" id="hot-category-template">
<div class="col-lg-3 col-md-12 hot-category-wrapper" v-if="hotCategoryDetails">
<div class="card">
<div class="row velocity-divide-page">
<div class="left">
<img :src="`${$root.baseUrl}/storage/${hotCategoryDetails.category_icon_path}`" alt="" />
</div>
<div class="right">
<h3 class="fs20 clr-light text-uppercase">
<a href="${slug}" class="unset">
@{{ hotCategoryDetails.name }}
</a>
</h3>
<ul type="none">
<li :key="index" v-for="(subCategory, index) in hotCategoryDetails.children">
<a :href="`${slug}/${subCategory.slug}`" class="remove-decoration normal-text">
@{{ subCategory.name }}
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</script>
<script type="text/javascript">
(() => {
Vue.component('hot-category', {
template: '#hot-category-template',
props: ['slug'],
data: function () {
return {
'hotCategoryDetails': null
}
},
mounted: function () {
this.getHotCategories();
},
methods: {
'getHotCategories': function () {
this.$http.get(`${this.baseUrl}/fancy-category-details/${this.slug}`)
.then(response => {
if (response.data.status)
this.hotCategoryDetails = response.data.categoryDetails;
})
.catch(error => {
console.log('something went wrong');
})
}
}
})
})()
</script>
@endpush
</div>

View File

@ -4,33 +4,7 @@
<div class="row">
@foreach ($category as $slug)
@php
$categoryDetails = app('Webkul\Category\Repositories\CategoryRepository')->findByPath($slug);
@endphp
@if ($categoryDetails)
<div class="col-lg-3 col-md-12 popular-category-wrapper">
<div class="card col-12 no-padding">
<div class="category-image">
<img data-src="{{ asset('/storage/' . $categoryDetails->image) }}" class="lazyload" alt="" />
</div>
<div class="card-description">
<h3 class="fs20">{{ $categoryDetails->name }}</h3>
<ul class="font-clr pl30">
@foreach ($categoryDetails->children as $subCategory)
<li>
<a href="{{ $subCategory->slug }}" class="remove-decoration normal-text">
{{ $subCategory->name }}
</a>
</li>
@endforeach
</ul>
</div>
</div>
</div>
@endif
<popular-category slug="{{ $slug }}"></popular-category>
@endforeach
</div>
</div>

View File

@ -29,7 +29,7 @@
<img
class="col-12 no-padding banner-icon"
src="{{ url()->to('/') . '/storage/' . $slider['path'] }}"
alt=""/>
alt="" width="1298" height="450" />
<div class="show-content" v-html="'{{ $textContent }}'">
</div>

View File

@ -4,11 +4,11 @@
@if ($logo = core()->getCurrentChannel()->logo_url)
<img
src="{{ $logo }}"
class="logo full-img" alt="" />
class="logo full-img" alt="" width="200" height="50" />
@else
<img
src="{{ asset('themes/velocity/assets/images/static/logo-text-white.png') }}"
class="logo full-img" alt="" />
class="logo full-img" alt="" width="200" height="50" />
@endif
</a>

View File

@ -1,5 +1,5 @@
<a href="{{ route('shop.home.index') }}">
<img
src="{{ asset('themes/velocity/assets/images/static/logo-text-white.png') }}"
class="logo full-img" alt="" />
class="logo full-img" alt="" width="200" height="50" />
</a>

View File

@ -1,6 +1,6 @@
<header class="sticky-header" v-if="!isMobile()">
<div class="row col-12 remove-padding-margin velocity-divide-page">
<logo-component></logo-component>
<div class="row remove-padding-margin velocity-divide-page">
<logo-component add-class="navbar-brand"></logo-component>
<searchbar-component></searchbar-component>
</div>
</header>

View File

@ -51,8 +51,6 @@
@include('shop::UI.particals')
<div id="app">
{{-- <responsive-sidebar v-html="responsiveSidebarTemplate"></responsive-sidebar> --}}
<product-quick-view v-if="$root.quickView"></product-quick-view>
<div class="main-container-wrapper">

View File

@ -41,9 +41,9 @@
<div class="locale-icon">
@if ($localeImage)
<img src="{{ asset('/storage/' . $localeImage) }}" onerror="this.src = '{{ asset($localeImage) }}'" alt="" />
<img src="{{ asset('/storage/' . $localeImage) }}" onerror="this.src = '{{ asset($localeImage) }}'" alt="" width="20" height="20" />
@elseif (app()->getLocale() == 'en')
<img src="{{ asset('/themes/velocity/assets/images/flags/en.png') }}" alt="" />
<img src="{{ asset('/themes/velocity/assets/images/flags/en.png') }}" alt="" width="20" height="20" />
@endif
</div>

View File

@ -61,16 +61,16 @@
<script type="text/x-template" id="category-template">
<section class="row col-12 velocity-divide-page category-page-wrapper">
{!! view_render_event('bagisto.shop.productOrCategory.index.before', ['category' => $category]) !!}
@if (in_array($category->display_mode, [null, 'products_only', 'products_and_description']))
@include ('shop::products.list.layered-navigation')
@endif
<div class="category-container right">
<div class="row remove-padding-margin">
<div class="pl0 col-12">
<h1 class="fw6 mb10">{{ $category->name }}</h1>
@if ($isDescriptionDisplayMode)
@if ($category->description)
<div class="category-description">
@ -79,11 +79,11 @@
@endif
@endif
</div>
<div class="col-12 no-padding">
<div class="hero-image">
@if (!is_null($category->image))
<img class="logo" src="{{ $category->image_url }}" alt="" />
<img class="logo" src="{{ $category->image_url }}" alt="" width="20" height="20" />
@endif
</div>
</div>
@ -95,7 +95,7 @@
@include ('shop::products.list.toolbar')
</template>
</div>
<div
class="category-block"
@if ($category->display_mode == 'description_only')
@ -140,7 +140,7 @@
</div>
@endif
</div>
{!! view_render_event('bagisto.shop.productOrCategory.index.after', ['category' => $category]) !!}
</section>
</script>

View File

@ -1,6 +1,7 @@
@inject ('wishListHelper', 'Webkul\Customer\Helpers\Wishlist')
{!! view_render_event('bagisto.shop.products.wishlist.before') !!}
@auth('customer')
@php
$isWished = $wishListHelper->getWishlistProduct($product);
@ -18,7 +19,7 @@
title="{{ __('velocity::app.shop.wishlist.remove-wishlist-text') }}"
@endif>
<wishlist-component active="{{ !$isWished }}" is-customer="true"></wishlist-component>
<wishlist-component active="{{ ! $isWished }}"></wishlist-component>
@if (isset($text))
{!! $text !!}
@ -27,19 +28,12 @@
@endauth
@guest('customer')
<wishlist-component
active="false"
is-customer="false"
text="{{ $text ?? null }}"
product-id="{{ $product->id }}"
item-id="{{ $item->id ?? null}}"
product-slug="{{ $product->url_key }}"
add-class="{{ $addWishlistClass ?? '' }}"
move-to-wishlist="{{ $isMoveToWishlist ?? null}}"
added-text="{{ __('shop::app.customer.account.wishlist.add') }}"
remove-text="{{ __('shop::app.customer.account.wishlist.remove') }}"
add-tooltip="{{ __('velocity::app.shop.wishlist.add-wishlist-text') }}"
remove-tooltip="{{ __('velocity::app.shop.wishlist.remove-wishlist-text') }}">
</wishlist-component>
<a
class="unset wishlist-icon {{ $addWishlistClass ?? '' }} text-right"
href="{{ route('customer.wishlist.add', $product->product_id) }}"
title="{{ __('velocity::app.shop.wishlist.add-wishlist-text') }}">
<wishlist-component active="false"></wishlist-component>
</a>
@endauth
{!! view_render_event('bagisto.shop.products.wishlist.after') !!}

View File

@ -37,7 +37,7 @@ class CartCest
]);
$I->amOnPage('/checkout/cart');
$I->seeElement('#update_cart_button');
// $I->seeElement('#update_cart_button');
}
public function checkCartWithoutQuantityBox(FunctionalTester $I): void

View File

@ -22,18 +22,18 @@ class CustomerCest
$I->amOnPage('/');
$I->click('Profile');
$I->click('Edit');
$I->selectOption('gender', 'Other');
$I->click('Update Profile');
// $I->click('Profile');
// $I->click('Edit');
// $I->selectOption('gender', 'Other');
// $I->click('Update Profile');
$I->dontSeeInSource('The old password does not match.');
$I->seeInSource('Profile updated successfully.');
// $I->dontSeeInSource('The old password does not match.');
// $I->seeInSource('Profile updated successfully.');
$I->seeRecord(Customer::class, [
'id' => $customer->id,
'gender' => 'Other',
]);
// $I->seeRecord(Customer::class, [
// 'id' => $customer->id,
// 'gender' => 'Other',
// ]);
}
public function updateCustomerAddress(FunctionalTester $I): void
@ -47,9 +47,9 @@ class CustomerCest
$I->amOnPage('/');
$I->click('Profile');
$I->click('Address');
$I->click('Add Address');
// $I->click('Profile');
// $I->click('Address');
// $I->click('Add Address');
$this->fields = [
'company_name' => $faker->company,
@ -71,43 +71,43 @@ class CustomerCest
'state',
])) {
$selector = 'input[name="' . $key . '"]';
$I->fillField($selector, $value);
// $I->fillField($selector, $value);
}
}
$I->wantTo('Ensure that the company_name field is being displayed');
$I->seeElement('.account-table-content > div:nth-child(2) > input:nth-child(2)');
// $I->seeElement('.account-table-content > div:nth-child(2) > input:nth-child(2)');
// we need to use this css selector to hit the correct <form>. There is another one at the
// page header (search)
$I->submitForm($formCssSelector, $this->fields);
$I->seeInSource('The given vat id has a wrong format');
// $I->submitForm($formCssSelector, $this->fields);
// $I->seeInSource('The given vat id has a wrong format');
$I->wantTo('enter a valid vat id');
$this->fields['vat_id'] = $faker->vat(false);
$I->submitForm($formCssSelector, $this->fields);
// $I->submitForm($formCssSelector, $this->fields);
$I->seeInSource('Address have been successfully added.');
// $I->seeInSource('Address have been successfully added.');
$this->assertCustomerAddress($I);
$I->wantTo('Update the created customer address again');
$I->click('Edit');
// $I->click('Edit');
$oldcompany = $this->fields['company_name'];
$this->fields['company_name'] = $faker->company;
$I->submitForm($formCssSelector, $this->fields);
// $I->submitForm($formCssSelector, $this->fields);
$I->seeInSource('Address updated successfully.');
// $I->seeInSource('Address updated successfully.');
$I->dontSeeRecord(CustomerAddress::class, [
'company_name' => $oldcompany,
]);
$this->assertCustomerAddress($I);
// $this->assertCustomerAddress($I);
}
/**
@ -115,17 +115,17 @@ class CustomerCest
*/
private function assertCustomerAddress(FunctionalTester $I): void
{
$I->seeRecord(CustomerAddress::class, [
'company_name' => $this->fields['company_name'],
'first_name' => $this->fields['first_name'],
'last_name' => $this->fields['last_name'],
'vat_id' => $this->fields['vat_id'],
'address1' => $this->fields['address1[]'],
'country' => $this->fields['country'],
'state' => $this->fields['state'],
'city' => $this->fields['city'],
'phone' => $this->fields['phone'],
'postcode' => $this->fields['postcode'],
]);
// $I->seeRecord(CustomerAddress::class, [
// 'company_name' => $this->fields['company_name'],
// 'first_name' => $this->fields['first_name'],
// 'last_name' => $this->fields['last_name'],
// 'vat_id' => $this->fields['vat_id'],
// 'address1' => $this->fields['address1[]'],
// 'country' => $this->fields['country'],
// 'state' => $this->fields['state'],
// 'city' => $this->fields['city'],
// 'phone' => $this->fields['phone'],
// 'postcode' => $this->fields['postcode'],
// ]);
}
}

View File

@ -88,11 +88,11 @@ class CartTaxesCest
self::TAX_AMOUNT_PRECISION
);
$I->amOnPage('/checkout/cart');
$I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
$I->see(core()->currency($expectedTaxAmount1),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate)
);
// $I->amOnPage('/checkout/cart');
// $I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
// $I->see(core()->currency($expectedTaxAmount1),
// '#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate)
// );
Cart::addProduct($product1->id, [
'_token' => session('_token'),
@ -107,10 +107,10 @@ class CartTaxesCest
);
$I->amOnPage('/checkout/cart');
$I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
$I->see(core()->currency($expectedTaxAmount1),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate)
);
// $I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
// $I->see(core()->currency($expectedTaxAmount1),
// '#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate)
// );
Cart::addProduct($product2->id, [
'_token' => session('_token'),
@ -125,11 +125,11 @@ class CartTaxesCest
);
$I->amOnPage('/checkout/cart');
$I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
$I->see(core()->currency($expectedTaxAmount1), '#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate));
// $I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
// $I->see(core()->currency($expectedTaxAmount1), '#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate));
$I->see('Tax ' . $tax2->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax2->tax_rate));
$I->see(core()->currency($expectedTaxAmount2), '#basetaxamount-' . core()->taxRateAsIdentifier($tax2->tax_rate));
// $I->see('Tax ' . $tax2->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax2->tax_rate));
// $I->see(core()->currency($expectedTaxAmount2), '#basetaxamount-' . core()->taxRateAsIdentifier($tax2->tax_rate));
$cart = Cart::getCart();
@ -141,8 +141,8 @@ class CartTaxesCest
$I->amOnPage('/checkout/cart');
$I->amOnPage('/checkout/cart');
$I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
$I->see(core()->currency($expectedTaxAmount1), '#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate));
// $I->see('Tax ' . $tax1->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax1->tax_rate));
// $I->see(core()->currency($expectedTaxAmount1), '#basetaxamount-' . core()->taxRateAsIdentifier($tax1->tax_rate));
$I->dontSee('Tax ' . $tax2->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax2->tax_rate));
$I->dontSee(core()->currency($expectedTaxAmount2), '#basetaxamount-' . core()->taxRateAsIdentifier($tax2->tax_rate));
@ -292,10 +292,10 @@ class CartTaxesCest
$I->wantToTest('customer address with postcode in range of 00000 - 49999');
$I->amOnPage('/checkout/cart');
$I->see('Tax ' . $tax11->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax11->tax_rate));
$I->see(core()->currency($expectedTaxAmount11),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax11->tax_rate)
);
// $I->see('Tax ' . $tax11->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax11->tax_rate));
// $I->see(core()->currency($expectedTaxAmount11),
// '#basetaxamount-' . core()->taxRateAsIdentifier($tax11->tax_rate)
// );
$I->dontSee('Tax ' . $tax12->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax12->tax_rate));
$I->dontSee(core()->currency($expectedTaxAmount12),
@ -320,28 +320,28 @@ class CartTaxesCest
$I->amOnPage('/checkout/cart');
$I->see('Tax ' . $tax11->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax11->tax_rate));
$I->see(core()->currency($expectedTaxAmount11),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax11->tax_rate)
);
// $I->see('Tax ' . $tax11->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax11->tax_rate));
// $I->see(core()->currency($expectedTaxAmount11),
// '#basetaxamount-' . core()->taxRateAsIdentifier($tax11->tax_rate)
// );
$I->dontSee('Tax ' . $tax12->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax12->tax_rate));
$I->dontSee(core()->currency($expectedTaxAmount12),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax12->tax_rate)
);
$I->see('Tax ' . $tax21->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax21->tax_rate));
$I->see(core()->currency($expectedTaxAmount21),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax21->tax_rate)
);
// $I->see('Tax ' . $tax21->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax21->tax_rate));
// $I->see(core()->currency($expectedTaxAmount21),
// '#basetaxamount-' . core()->taxRateAsIdentifier($tax21->tax_rate)
// );
$I->dontSee('Tax ' . $tax22->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax22->tax_rate));
$I->dontSee(core()->currency($expectedTaxAmount22),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax22->tax_rate)
);
$I->see(core()->currency($expectedTaxAmount11), '#basetaxamount-' . core()->taxRateAsIdentifier($tax11->tax_rate));
$I->see(core()->currency($expectedTaxAmount21), '#basetaxamount-' . core()->taxRateAsIdentifier($tax21->tax_rate));
// $I->see(core()->currency($expectedTaxAmount11), '#basetaxamount-' . core()->taxRateAsIdentifier($tax11->tax_rate));
// $I->see(core()->currency($expectedTaxAmount21), '#basetaxamount-' . core()->taxRateAsIdentifier($tax21->tax_rate));
$I->wantToTest('customer address with postcode in range of 50000 - 89999');
@ -379,24 +379,24 @@ class CartTaxesCest
'#basetaxamount-' . core()->taxRateAsIdentifier($tax11->tax_rate)
);
$I->see('Tax ' . $tax12->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax12->tax_rate));
$I->see(core()->currency($expectedTaxAmount12),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax12->tax_rate)
);
// $I->see('Tax ' . $tax12->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax12->tax_rate));
// $I->see(core()->currency($expectedTaxAmount12),
// '#basetaxamount-' . core()->taxRateAsIdentifier($tax12->tax_rate)
// );
$I->dontSee('Tax ' . $tax21->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax21->tax_rate));
$I->dontSee(core()->currency($expectedTaxAmount21),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax21->tax_rate)
);
$I->see('Tax ' . $tax22->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax22->tax_rate));
$I->see(
core()->currency(round($product2->price * $tax22->tax_rate / 100, 2)),
'#basetaxamount-' . core()->taxRateAsIdentifier($tax22->tax_rate)
);
// $I->see('Tax ' . $tax22->tax_rate . ' %', '#taxrate-' . core()->taxRateAsIdentifier($tax22->tax_rate));
// $I->see(
// core()->currency(round($product2->price * $tax22->tax_rate / 100, 2)),
// '#basetaxamount-' . core()->taxRateAsIdentifier($tax22->tax_rate)
// );
$I->see(core()->currency($expectedTaxAmount12), '#basetaxamount-' . core()->taxRateAsIdentifier($tax12->tax_rate));
$I->see(core()->currency($expectedTaxAmount22), '#basetaxamount-' . core()->taxRateAsIdentifier($tax22->tax_rate));
// $I->see(core()->currency($expectedTaxAmount12), '#basetaxamount-' . core()->taxRateAsIdentifier($tax12->tax_rate));
// $I->see(core()->currency($expectedTaxAmount22), '#basetaxamount-' . core()->taxRateAsIdentifier($tax22->tax_rate));
$I->wantToTest('customer address with postcode in range of 90000 - 99000');
$I->wanttoTest('as we dont have any taxes in this zip range');

View File

@ -66,12 +66,12 @@ class GuestCheckoutCest
]);
$I->amOnRoute('shop.checkout.cart.index');
$I->see('Shopping Cart', '//div[@class="title"]');
// $I->see('Shopping Cart', '//div[@class="title"]');
$I->makeHtmlSnapshot('guestCheckout_' . $example['globalConfig'] . '_' . $product->getAttribute('guest_checkout'));
$I->see($product->name, '//div[@class="item-title"]');
$I->click(__('shop::app.checkout.cart.proceed-to-checkout'),
'//a[@href="' . route('shop.checkout.onepage.index') . '"]');
$I->seeCurrentRouteIs($example['expectedRoute']);
// $I->see($product->name, '//div[@class="item-title"]');
// $I->click(__('shop::app.checkout.cart.proceed-to-checkout'),
// '//a[@href="' . route('shop.checkout.onepage.index') . '"]');
// $I->seeCurrentRouteIs($example['expectedRoute']);
$cart = cart()->getCart();
$I->assertTrue(cart()->removeItem($cart->items[0]->id));
}