Merge branch 'elektronika' of https://gitlab.com/merdan.m/elektronika into elektronika

This commit is contained in:
root 2022-04-28 14:29:49 +05:00
commit b2009e8958
181 changed files with 12328 additions and 1454 deletions

View File

@ -1,15 +1,16 @@
APP_NAME=Bagisto
APP_ENV=local
APP_VERSION=1.4.2
APP_VERSION=1.4.3
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_ADMIN_URL=admin
APP_TIMEZONE=Asia/Kolkata
APP_LOCALE=en
LOG_CHANNEL=stack
APP_CURRENCY=USD
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306

View File

@ -2,6 +2,99 @@
This changelog consists of the bug & security fixes and new features being included in the releases listed below.
## **v1.4.3 (20th of April 2022)** - *Release*
* #6213 [feature] - Command For Bagisto Publish
* #6197 [feature] - Link to frontend from admin product list or product detail page
* #6190 [feature] - Give option to enable WYSIWYG editor in configuration
* #5376 [feature] - There should be an option to remove all cart items at once
* #6294 [enhancement] - The mouse property should be a pointer when the admin is trying to mark all notifications as read.
* #6289 [enhancement] - Improvement on products listing
* #6285 [enhancement] - The dashboard cards are not clickable
* #6283 [enhancement] - When the user is trying to view the mini cart then Product Quantity Looks like as a minus value
* #6269 [enhancement] - The mouse property should be a pointer when the customer is trying to change the app currency & locale
* #6259 [enhancement] - The color of View All Notifications should be blue on the mouseover in admin panel
* #6243 [enhancement] - The mouse property should be a pointer when the admin is trying to drag the product image while editing any product
* #6241 [enhancement] - There should be checkboxes inside the status dropdown if the user is trying to filter orders with multiple statuses
* #6229 [enhancement] - The mouse property should be a pointer when the user is trying to sort the table by tables header.
* #6217 [enhancement] - There should be an asterisk icon for the required fields if the user is trying to book the product.
* #6213 [enhancement] - Command For Bagisto Publish
* #6208 [enhancement] - The product status should be Highlighted in product list page
* #5967 [enhancement] - There should be an option to copy the product's share link.
* #5960 [enhancement] - There should be an option for a sitemap generator. .
* #5559 [enhancement] - There should be the currency icon inside the currency dropdown
* #5530 [enhancement] - there should be an cross icon in blisss theme so that customer can delete product from cart
* #5397 [enhancement] - The filter dropdown should be according to the selected value.
* #5354 [enhancement] - The Input validation's dropdown should be according to attribute type.
* #2718 [enhancement] - Show error message "No booking available" if booking is not available for selected date. Booking
* #2308 [enhancement] - Existing groups in the attribute families are not translatable yet.
* #6290 [fixed] - Cancel already shipped order results in incorrect pending inventory amount
* #6279 [fixed] - The currency icon is overriding on the currency dropdown when the app locale is Arabic.
* #6270 [fixed] - The enter key is not working if the admin is trying to apply the filter by pressing the enter key
* #6267 [fixed] - There should not be an exception if the admin is trying to view order after deleting the customer of same order Admin
* #6266 [fixed] - The admin is not able to view the bookings in the calendar view.
* #6261 [fixed] - The filter options should be under the filter button. when the customer is trying to filter order in Arabic locale
* #6260 [fixed] - The upload image option should be slightly on the right side. when the customer is adding a review for any product.
* #6256 [fixed] - There should not be any extra space between add to cart and the by now button.
* #6253 [fixed] - The page should be redirected to the particular order's page if the customer is clicking on the order id after placing the order.
* #6250 [fixed] - The admin is not able to view the customer's review if the customer is creating a review with the moustache syntax Like: {{ url(' ') }}
* #6246 [fixed] - The products are not listing when url key is null
* #6244 [fixed] - There is an exception when the customer is changing the app currency on the product view page.
* #6228 [fixed] - There should not be a blank value in the items per page dropdown. on customer orders page
* #6206 [fixed] - The border of calendar icon is not showing in dark mode, when the admin is trying to view booking in calendar view.
* #6205 [fixed] - The flash message should be according to the selected locale if the admin trying to create a Shipment.
* #6204 [fixed] - The carousel arrow icons [ previous and next ] should work properly in the Arabic locale.
* #6202 [fixed] - There should be some space between the input box and labels if the user is trying to book an appointment for any booking product.
* #6196 [fixed] - The admin should be able to delete the users.
* #6195 [fixed] - Mini Cart sub total is not updating after removing the cart's item.
* #6192 [fixed] - The shopping cart goes empty after removing an item from the mini cart.
* #5772 [fixed] - issue in french lanugage in navigation bar
* #5067 [fixed] - Products is_wishlisted attribute is always false on API
## **v1.4.2 (31st of March 2022)** - *Release*

View File

@ -97,7 +97,7 @@ Take advantage of two of the hottest frameworks used in this project -- Laravel
* **For MySQL users**: 5.7.23 or higher.
* **For MariaDB users**: 10.2.7 or Higher.
* **Node**: 8.11.3 LTS or higher.
* **Composer**: 1.6.5 or higher.
* **Composer**: 2.3.5 or higher.
### Installation and Configuration

8
composer.lock generated
View File

@ -153,12 +153,12 @@
"source": {
"type": "git",
"url": "https://github.com/bagisto/rest-api.git",
"reference": "03d7284867327c9db2412260e9113982fa7c07f1"
"reference": "8f679061530ca31d85bff7fff0a19a3e4368216e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bagisto/rest-api/zipball/03d7284867327c9db2412260e9113982fa7c07f1",
"reference": "03d7284867327c9db2412260e9113982fa7c07f1",
"url": "https://api.github.com/repos/bagisto/rest-api/zipball/8f679061530ca31d85bff7fff0a19a3e4368216e",
"reference": "8f679061530ca31d85bff7fff0a19a3e4368216e",
"shasum": ""
},
"default-branch": true,
@ -189,7 +189,7 @@
"issues": "https://github.com/bagisto/rest-api/issues",
"source": "https://github.com/bagisto/rest-api/tree/master"
},
"time": "2022-01-21T11:21:50+00:00"
"time": "2022-04-07T09:23:21+00:00"
},
{
"name": "bagistobrasil/bagisto-product-social-share",

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/admin.js": "/js/admin.js?id=1dddbb0d655216b79be5",
"/css/admin.css": "/css/admin.css?id=d35081df99f6ce2df4ff"
"/js/admin.js": "/js/admin.js?id=551bdd2fab3e31a7d5b1",
"/css/admin.css": "/css/admin.css?id=0a408f23127642584bbc"
}

View File

@ -105,7 +105,7 @@ class OrderDataGrid extends DataGrid
$this->addColumn([
'index' => 'status',
'label' => trans('admin::app.datagrid.status'),
'type' => 'string',
'type' => 'checkbox',
'options' => [
'processing' => trans('shop::app.customer.account.order.index.processing'),
'completed' => trans('shop::app.customer.account.order.index.completed'),

View File

@ -105,6 +105,7 @@ class ProductDataGrid extends DataGrid
'products.type as product_type',
'product_flat.status',
'product_flat.price',
'product_flat.url_key',
'attribute_families.name as attribute_family',
DB::raw('SUM(' . DB::getTablePrefix() . 'product_inventories.qty) as quantity')
);
@ -166,6 +167,13 @@ class ProductDataGrid extends DataGrid
'searchable' => true,
'sortable' => true,
'filterable' => true,
'closure' => function ($row) {
if (! empty($row->url_key)) {
return "<a href='" . route('shop.productOrCategory.index', $row->url_key) . "' target='_blank'>" . $row->product_name . "</a>";
}
return $row->product_name;
},
]);
$this->addColumn([

View File

@ -1,48 +0,0 @@
<?php
namespace Webkul\Admin\Http\Middleware;
use Closure;
use Webkul\Core\Repositories\LocaleRepository;
class Locale
{
/**
* Create a new middleware instance.
*
* @param \Webkul\Core\Repositories\LocaleRepository $localeRepository
*/
public function __construct(protected LocaleRepository $localeRepository)
{
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$locale = request()->get('admin_locale');
if ($locale) {
if ($this->localeRepository->findOneByField('code', $locale)) {
app()->setLocale($locale);
session()->put('admin_locale', $locale);
}
} else {
if ($locale = session()->get('admin_locale')) {
app()->setLocale($locale);
} else {
app()->setLocale(app()->getLocale());
}
}
unset($request['admin_locale']);
return $next($request);
}
}

View File

@ -28,8 +28,6 @@ class AdminServiceProvider extends ServiceProvider
$this->registerACL();
$router->aliasMiddleware('admin_locale', Locale::class);
$this->app->register(EventServiceProvider::class);
}

View File

@ -769,6 +769,7 @@ body {
color: $read-all-text-color;
background: none;
border: none;
cursor: pointer;
}
#notif-title {

View File

@ -1,4 +1,3 @@
@import 'colors';
$toggleSize: 31px;
$toggleMargin: -25px 10px;
$toggleLine: 2px;

View File

@ -286,6 +286,9 @@ return [
'confirm-password' => 'تأكيد كلمة المرور',
'back-link-title' => 'العودة للتوقيع',
'submit-btn-title' => 'بريد إلكتروني كلمة مرور إعادة تعيين وصلة',
'passwords' => [
'throttled' => 'تحذير: لقد طلبت إعادة تعيين كلمة المرور مؤخرًا ، يرجى التحقق من بريدك الإلكتروني.',
]
],
'reset-password' => [
@ -685,6 +688,8 @@ return [
'name' => 'اسم',
'groups' => 'المجموعات',
'add-group-title' => 'أضف المجموعة',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'موضع',
'attribute-code' => 'الشفرة',
'type' => 'النوع',

File diff suppressed because it is too large Load Diff

View File

@ -286,6 +286,9 @@ return [
'confirm-password' => 'Passwort bestätigen',
'back-link-title' => 'Zurück zur Anmeldung',
'submit-btn-title' => 'E-Mail zum Zurücksetzen des Passworts senden',
'passwords' => [
'throttled' => 'Warnung: Sie haben das Zurücksetzen des Passworts kürzlich angefordert, bitte überprüfen Sie Ihre E-Mails.',
]
],
'reset-password' =>
[
@ -676,6 +679,8 @@ return [
'name' => 'Name',
'groups' => 'Gruppen',
'add-group-title' => 'Gruppe hinzufügen',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Position',
'attribute-code' => 'Code',
'type' => 'Typ',

View File

@ -288,6 +288,9 @@ return [
'confirm-password' => 'Confirm Password',
'back-link-title' => 'Back to Sign In',
'submit-btn-title' => 'Send Password Reset Email',
'passwords' => [
'throttled' => 'Warning: You have requested password reset recently, please check your email.',
]
],
'reset-password' => [
@ -688,6 +691,8 @@ return [
'name' => 'Name',
'groups' => 'Groups',
'add-group-title' => 'Add Group',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Position',
'attribute-code' => 'Code',
'type' => 'Type',

View File

@ -690,6 +690,8 @@ return [
'name' => 'Nombre',
'groups' => 'Grupos',
'add-group-title' => 'Agregar grupo',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Posición',
'attribute-code' => 'Código',
'type' => 'Tipo',

View File

@ -673,6 +673,8 @@ return [
'name' => 'نام',
'groups' => 'گروه ها',
'add-group-title' => 'افزودن گروه',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'موقعیت',
'attribute-code' => 'کد',
'type' => 'نوع',

View File

@ -288,6 +288,9 @@ return [
'confirm-password' => 'Confirmez le mot de passe',
'back-link-title' => 'Retour à la connexion',
'submit-btn-title' => 'Envoyer un e-mail de réinitialisation du mot de passe',
'passwords' => [
'throttled' => 'Avertissement : Vous avez récemment demandé la réinitialisation de votre mot de passe, veuillez vérifier votre messagerie.',
]
],
'reset-password' => [
@ -689,6 +692,8 @@ return [
'name' => 'Nom',
'groups' => 'Groupes',
'add-group-title' => 'Ajouter un groupe',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Positionner',
'attribute-code' => 'Code',
'type' => 'Taper',

File diff suppressed because it is too large Load Diff

View File

@ -688,6 +688,8 @@ return [
'name' => 'नाम',
'groups' => 'समूह',
'add-group-title' => 'समूह जोड़ें',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'स्थान',
'attribute-code' => 'कोड',
'type' => 'प्रकार',

View File

@ -283,6 +283,9 @@ return [
'confirm-password' => 'Conferma Password',
'back-link-title' => 'Torna a Login',
'submit-btn-title' => 'Invia Email Recupera Password',
'passwords' => [
'throttled' => 'Avvertenza: hai richiesto di recente la reimpostazione della password, controlla la tua email.',
]
],
'reset-password' => [
@ -673,6 +676,8 @@ return [
'name' => 'Nome',
'groups' => 'Gruppi',
'add-group-title' => 'Aggiungi Gruppo',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Posizione',
'attribute-code' => 'Codice',
'type' => 'Tipo',

File diff suppressed because it is too large Load Diff

View File

@ -672,6 +672,8 @@ return [
'name' => 'Naam',
'groups' => 'Groepen',
'add-group-title' => 'Add Group',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Position',
'attribute-code' => 'Code',
'type' => 'Type',

View File

@ -672,6 +672,8 @@ return [
'name' => 'Nazwa',
'groups' => 'Grupy',
'add-group-title' => 'Dodaj grupę',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Pozycja',
'attribute-code' => 'Kod',
'type' => 'Rodzaj',

View File

@ -671,6 +671,8 @@ return [
'name' => 'Nome',
'groups' => 'Grupos',
'add-group-title' => 'Add Grupo',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Posição',
'attribute-code' => 'Código',
'type' => 'Tipo',

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -678,6 +678,8 @@ return [
'name' => 'Tanımı',
'groups' => 'Gruplar',
'add-group-title' => 'Grup Ekle',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => 'Konum',
'attribute-code' => 'Nitelik Kodu',
'type' => 'Tipi',

View File

@ -673,6 +673,8 @@ return [
'name' => '名称',
'groups' => '客户群',
'add-group-title' => '添加群',
'edit-group-title' => 'Edit Group',
'update-group-title' => 'Update Group',
'position' => '位置',
'attribute-code' => '代码',
'type' => '类型',

View File

@ -141,7 +141,7 @@
} else {
imageInput.value = '';
alert('{{ __('admin::app.account.image_upload_message') }}');
alert('{{ __('admin::app.account.image-upload-message') }}');
}
}
}

View File

@ -370,6 +370,12 @@
} else {
$('#enable_wysiwyg').parents('.control-group').addClass('hide');
}
if (['text'].indexOf($(e.target).val()) > -1) {
$('#validation').parents('.control-group').removeClass('hide');
} else {
$('#validation').parents('.control-group').addClass('hide');
}
})
});

View File

@ -184,25 +184,27 @@
<input type="hidden" name="is_unique" value="{{ $attribute->is_unique }}"/>
</div>
<div class="control-group">
<?php $selectedValidation = old('validation') ?: $attribute->validation ?>
<label for="validation">{{ __('admin::app.catalog.attributes.input_validation') }}</label>
<select class="control" id="validation" name="validation" {{ ! $attribute->is_user_defined ? 'disabled' : '' }}>
<option value=""></option>
<option value="numeric" {{ $selectedValidation == 'numeric' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.number') }}
</option>
<option value="decimal" {{ $selectedValidation == 'decimal' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.decimal') }}
</option>
<option value="email" {{ $selectedValidation == 'email' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.email') }}
</option>
<option value="url" {{ $selectedValidation == 'url' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.url') }}
</option>
</select>
</div>
@if ($attribute->type == 'text')
<div class="control-group">
<?php $selectedValidation = old('validation') ?: $attribute->validation ?>
<label for="validation">{{ __('admin::app.catalog.attributes.input_validation') }}</label>
<select class="control" id="validation" name="validation" {{ ! $attribute->is_user_defined ? 'disabled' : '' }}>
<option value=""></option>
<option value="numeric" {{ $selectedValidation == 'numeric' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.number') }}
</option>
<option value="decimal" {{ $selectedValidation == 'decimal' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.decimal') }}
</option>
<option value="email" {{ $selectedValidation == 'email' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.email') }}
</option>
<option value="url" {{ $selectedValidation == 'url' ? 'selected' : '' }}>
{{ __('admin::app.catalog.attributes.url') }}
</option>
</select>
</div>
@endif
{!! view_render_event('bagisto.admin.catalog.attribute.edit_form_accordian.validations.controls.after', ['attribute' => $attribute]) !!}
</div>

View File

@ -61,10 +61,6 @@
<accordian title="{{ __('admin::app.catalog.families.groups') }}" :active="true">
<div slot="body">
<button type="button" style="margin-bottom : 20px" class="btn btn-md btn-primary" @click="showModal('addGroup')">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
{!! view_render_event('bagisto.admin.catalog.family.create_form_accordian.groups.controls.before') !!}
<group-list></group-list>
@ -81,63 +77,108 @@
</form>
</div>
<modal id="addGroup" :is-open="modalIds.addGroup">
<h3 slot="header">{{ __('admin::app.catalog.families.add-group-title') }}</h3>
<div slot="body">
<group-form></group-form>
</div>
</modal>
@stop
@push('scripts')
<script type="text/x-template" id="group-form-template">
<form method="POST" action="{{ route('admin.catalog.families.store') }}" data-vv-scope="add-group-form" @submit.prevent="addGroup('add-group-form')">
<div class="page-content">
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('add-group-form.groupName') ? 'has-error' : '']">
<label for="groupName" class="required">{{ __('admin::app.catalog.families.name') }}</label>
<input type="text" v-validate="'required'" v-model="group.groupName" class="control" id="groupName" name="groupName" data-vv-as="&quot;{{ __('admin::app.catalog.families.name') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.groupName')">@{{ errors.first('add-group-form.groupName') }}</span>
</div>
<div class="control-group" :class="[errors.has('add-group-form.position') ? 'has-error' : '']">
<label for="position" class="required">{{ __('admin::app.catalog.families.position') }}</label>
<input type="text" v-validate="'required|numeric'" v-model="group.position" class="control" id="position" name="position" data-vv-as="&quot;{{ __('admin::app.catalog.families.position') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.position')">@{{ errors.first('add-group-form.position') }}</span>
</div>
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
</div>
</div>
</form>
</script>
<script type="text/x-template" id="group-list-template">
<div>
<group-item v-for='(group, index) in groups' :group="group" :custom_attributes="custom_attributes" :key="index" :index="index" @onRemoveGroup="removeGroup($event)" @onAttributeAdd="addAttributes(index, $event)" @onAttributeRemove="removeAttribute(index, $event)"></group-item>
<button type="button" style="margin-bottom : 20px" class="btn btn-md btn-primary" @click="$root.showModal('addGroupForm')">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
<modal id="addGroupForm" :is-open="$root.modalIds.addGroupForm">
<h3 slot="header">{{ __('admin::app.catalog.families.add-group-title') }}</h3>
<div slot="body">
<form method="POST" data-vv-scope="add-group-form" @submit.prevent="addGroup('add-group-form')">
<div class="page-content">
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('add-group-form.name') ? 'has-error' : '']">
<label for="name" class="required">{{ __('admin::app.catalog.families.name') }}</label>
<input type="text" v-validate="'required'" v-model="group.name" class="control" id="name" name="name" data-vv-as="&quot;{{ __('admin::app.catalog.families.name') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.name')">@{{ errors.first('add-group-form.name') }}</span>
</div>
<div class="control-group" :class="[errors.has('add-group-form.position') ? 'has-error' : '']">
<label for="position" class="required">{{ __('admin::app.catalog.families.position') }}</label>
<input type="text" v-validate="'required|numeric'" v-model="group.position" class="control" id="position" name="position" data-vv-as="&quot;{{ __('admin::app.catalog.families.position') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.position')">@{{ errors.first('add-group-form.position') }}</span>
</div>
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
</div>
</div>
</form>
</div>
</modal>
<modal id="editGroupForm" :is-open="$root.modalIds.editGroupForm">
<h3 slot="header">{{ __('admin::app.catalog.families.edit-group-title') }}</h3>
<div slot="body">
<form method="POST" data-vv-scope="edit-group-form" @submit.prevent="updateGroup('edit-group-form')">
<div class="page-content">
<div class="form-container">
<div class="control-group" :class="[errors.has('edit-group-form.name') ? 'has-error' : '']">
<label for="name" class="required">{{ __('admin::app.catalog.families.name') }}</label>
<input type="text" v-validate="'required'" v-model="editGroup.name" class="control" id="name" name="name" data-vv-as="&quot;{{ __('admin::app.catalog.families.name') }}&quot;"/>
<span class="control-error" v-if="errors.has('edit-group-form.name')">@{{ errors.first('edit-group-form.name') }}</span>
</div>
<div class="control-group" :class="[errors.has('edit-group-form.position') ? 'has-error' : '']">
<label for="position" class="required">{{ __('admin::app.catalog.families.position') }}</label>
<input type="text" v-validate="'required|numeric'" v-model="editGroup.position" class="control" id="position" name="position" data-vv-as="&quot;{{ __('admin::app.catalog.families.position') }}&quot;"/>
<span class="control-error" v-if="errors.has('edit-group-form.position')">@{{ errors.first('edit-group-form.position') }}</span>
</div>
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.catalog.families.update-group-title') }}
</button>
</div>
</div>
</form>
</div>
</modal>
<group-item
v-for='(group, index) in groups'
:group="group"
:custom_attributes="custom_attributes"
:key="index"
:index="index"
@onRemoveGroup="removeGroup($event)"
@onEditGroup="openEditGroupModal($event)"
@onAttributeAdd="addAttributes(index, $event)"
@onAttributeRemove="removeAttribute(index, $event)"
></group-item>
</div>
</script>
<script type="text/x-template" id="group-item-template">
<accordian :title="group.groupName" :active="true">
<accordian :title="group.name" :active="true">
<div slot="header">
<i class="icon expand-icon left"></i>
<h1>@{{ group.name ? group.name : group.groupName }}</h1>
<h1>@{{ group.name }}</h1>
<i class="icon trash-icon" @click="removeGroup()" v-if="group.is_user_defined"></i>
<span class="icon pencil-lg-icon" @click="editGroup()"></span>
</div>
<div slot="body">
<input type="hidden" :name="[groupInputName + '[name]']" :value="group.name ? group.name : group.groupName"/>
<input type="hidden" :name="[groupInputName + '[name]']" :value="group.name"/>
<input type="hidden" :name="[groupInputName + '[position]']" :value="group.position"/>
<input type="hidden" :name="[groupInputName + '[is_user_defined]']" :value="group.is_user_defined"/>
@ -201,71 +242,28 @@
var groups = @json($attributeFamily ? $attributeFamily->attribute_groups : []);
var custom_attributes = @json($custom_attributes);
Vue.component('group-form', {
data: function () {
return {
group: {
'groupName': '',
'position': '',
'is_user_defined': 1,
'custom_attributes': []
}
}
},
template: '#group-form-template',
methods: {
addGroup: function (formScope) {
var this_this = this;
this.$validator.validateAll(formScope).then(function (result) {
if (result) {
var filteredGroups = groups.filter(function(group) {
return this_this.group.groupName.trim() === (group.name ? group.name.trim() : group.groupName.trim())
})
if (filteredGroups.length) {
const field = this.$validator.fields.find({ name: 'groupName', scope: 'add-group-form' });
if (field) {
this.$validator.errors.add({
id: field.id,
field: 'groupName',
msg: "{{ __('admin::app.catalog.families.group-exist-error') }}",
scope: 'add-group-form',
});
}
} else {
groups.push(this_this.group);
groups = this_this.sortGroups();
this.group = {'groupName': '', 'position': '', 'is_user_defined': 1, 'custom_attributes': []};
this_this.$parent.closeModal();
}
}
});
},
sortGroups: function () {
return groups.sort(function(a, b) {
return a.position - b.position;
});
}
}
});
Vue.component('group-list', {
template: '#group-list-template',
data: function() {
return {
group: {
'name': '',
'position': '',
'is_user_defined': 1,
'custom_attributes': []
},
editGroup: {
'name': '',
'position': '',
'is_user_defined': 1,
'custom_attributes': []
},
groups: groups,
custom_attributes: custom_attributes
}
},
@ -286,6 +284,88 @@
},
methods: {
addGroup: function (formScope) {
var self = this;
this.$validator.validateAll(formScope).then(function (result) {
if (result) {
var filteredGroups = groups.filter(function(group) {
return self.group.name.trim() === group.name.trim()
})
if (filteredGroups.length) {
const field = self.$validator.fields.find({ name: 'name', scope: 'add-group-form' });
if (field) {
self.$validator.errors.add({
id: field.id,
field: 'name',
msg: "{{ __('admin::app.catalog.families.group-exist-error') }}",
scope: 'add-group-form',
});
}
} else {
groups.push(self.group);
groups = self.sortGroups();
this.group = {'name': '', 'position': '', 'is_user_defined': 1, 'custom_attributes': []};
self.$set(self.$root.modalIds, 'addGroupForm', false);
}
}
});
},
updateGroup: function(formScope) {
var self = this;
this.$validator.validateAll(formScope).then(function (result) {
if (result) {
var filteredGroups = groups.filter(function(group) {
return self.editGroup.name.trim() === group.name.trim()
})
if (filteredGroups.length > 1) {
const field = self.$validator.fields.find({ name: 'name', scope: 'edit-group-form' });
if (field) {
self.$validator.errors.add({
id: field.id,
field: 'name',
msg: "{{ __('admin::app.catalog.families.group-exist-error') }}",
scope: 'edit-group-form',
});
}
} else {
let index = groups.indexOf(self.editGroup)
groups[index] = self.editGroup;
groups = self.sortGroups();
this.editGroup = {'name': '', 'position': '', 'is_user_defined': 1, 'custom_attributes': []};
self.$set(self.$root.modalIds, 'editGroupForm', false);
}
}
});
},
sortGroups: function () {
return groups.sort(function(a, b) {
return a.position - b.position;
});
},
openEditGroupModal: function (group) {
this.editGroup = group;
this.$root.showModal('editGroupForm')
},
removeGroup: function (group) {
group.custom_attributes.forEach(function(attribute) {
this.custom_attributes.push(attribute);
@ -342,6 +422,10 @@
},
methods: {
editGroup: function() {
this.$emit('onEditGroup', this.group)
},
removeGroup: function () {
this.$emit('onRemoveGroup', this.group)
},

View File

@ -64,10 +64,6 @@
{!! view_render_event('bagisto.admin.catalog.family.edit_form_accordian.groups.controls.before', ['attributeFamily' => $attributeFamily]) !!}
<button type="button" style="margin-bottom : 20px" class="btn btn-md btn-primary" @click="showModal('addGroup')">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
<group-list></group-list>
{!! view_render_event('bagisto.admin.catalog.family.edit_form_accordian.groups.controls.before', ['attributeFamily' => $attributeFamily]) !!}
@ -81,63 +77,106 @@
</form>
</div>
<modal id="addGroup" :is-open="modalIds.addGroup">
<h3 slot="header">{{ __('admin::app.catalog.families.add-group-title') }}</h3>
<div slot="body">
<group-form></group-form>
</div>
</modal>
@stop
@push('scripts')
<script type="text/x-template" id="group-form-template">
<form method="POST" action="{{ route('admin.catalog.families.store') }}" data-vv-scope="add-group-form" @submit.prevent="addGroup('add-group-form')">
<div class="page-content">
<div class="form-container">
@csrf()
<div class="control-group" :class="[errors.has('add-group-form.groupName') ? 'has-error' : '']">
<label for="groupName" class="required">{{ __('admin::app.catalog.families.name') }}</label>
<input type="text" v-validate="'required'" v-model="group.groupName" class="control" id="groupName" name="groupName" data-vv-as="&quot;{{ __('admin::app.catalog.families.name') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.groupName')">@{{ errors.first('add-group-form.groupName') }}</span>
</div>
<div class="control-group" :class="[errors.has('add-group-form.position') ? 'has-error' : '']">
<label for="position" class="required">{{ __('admin::app.catalog.families.position') }}</label>
<input type="text" v-validate="'required|numeric'" v-model="group.position" class="control" id="position" name="position" data-vv-as="&quot;{{ __('admin::app.catalog.families.position') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.position')">@{{ errors.first('add-group-form.position') }}</span>
</div>
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
</div>
</div>
</form>
</script>
<script type="text/x-template" id="group-list-template">
<div style="margin-top: 20px">
<group-item v-for='(group, index) in groups' :group="group" :custom_attributes="custom_attributes" :key="index" :index="index" @onRemoveGroup="removeGroup($event)" @onAttributeAdd="addAttributes(index, $event)" @onAttributeRemove="removeAttribute(index, $event)"></group-item>
<button type="button" style="margin-bottom : 20px" class="btn btn-md btn-primary" @click="showModal('addGroupForm')">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
<modal id="addGroupForm" :is-open="$root.modalIds.addGroupForm">
<h3 slot="header">{{ __('admin::app.catalog.families.add-group-title') }}</h3>
<div slot="body">
<form method="POST" data-vv-scope="add-group-form" @submit.prevent="addGroup('add-group-form')">
<div class="page-content">
<div class="form-container">
<div class="control-group" :class="[errors.has('add-group-form.name') ? 'has-error' : '']">
<label for="name" class="required">{{ __('admin::app.catalog.families.name') }}</label>
<input type="text" v-validate="'required'" v-model="group.name" class="control" id="name" name="name" data-vv-as="&quot;{{ __('admin::app.catalog.families.name') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.name')">@{{ errors.first('add-group-form.name') }}</span>
</div>
<div class="control-group" :class="[errors.has('add-group-form.position') ? 'has-error' : '']">
<label for="position" class="required">{{ __('admin::app.catalog.families.position') }}</label>
<input type="text" v-validate="'required|numeric'" v-model="group.position" class="control" id="position" name="position" data-vv-as="&quot;{{ __('admin::app.catalog.families.position') }}&quot;"/>
<span class="control-error" v-if="errors.has('add-group-form.position')">@{{ errors.first('add-group-form.position') }}</span>
</div>
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.catalog.families.add-group-title') }}
</button>
</div>
</div>
</form>
</div>
</modal>
<modal id="editGroupForm" :is-open="$root.modalIds.editGroupForm">
<h3 slot="header">{{ __('admin::app.catalog.families.edit-group-title') }}</h3>
<div slot="body">
<form method="POST" data-vv-scope="edit-group-form" @submit.prevent="updateGroup('edit-group-form')">
<div class="page-content">
<div class="form-container">
<div class="control-group" :class="[errors.has('edit-group-form.name') ? 'has-error' : '']">
<label for="name" class="required">{{ __('admin::app.catalog.families.name') }}</label>
<input type="text" v-validate="'required'" v-model="editGroup.name" class="control" id="name" name="name" data-vv-as="&quot;{{ __('admin::app.catalog.families.name') }}&quot;"/>
<span class="control-error" v-if="errors.has('edit-group-form.name')">@{{ errors.first('edit-group-form.name') }}</span>
</div>
<div class="control-group" :class="[errors.has('edit-group-form.position') ? 'has-error' : '']">
<label for="position" class="required">{{ __('admin::app.catalog.families.position') }}</label>
<input type="text" v-validate="'required|numeric'" v-model="editGroup.position" class="control" id="position" name="position" data-vv-as="&quot;{{ __('admin::app.catalog.families.position') }}&quot;"/>
<span class="control-error" v-if="errors.has('edit-group-form.position')">@{{ errors.first('edit-group-form.position') }}</span>
</div>
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.catalog.families.update-group-title') }}
</button>
</div>
</div>
</form>
</div>
</modal>
<group-item
v-for='(group, index) in groups'
:group="group"
:custom_attributes="custom_attributes"
:key="index"
:index="index"
@onRemoveGroup="removeGroup($event)"
@onEditGroup="openEditGroupModal($event)"
@onAttributeAdd="addAttributes(index, $event)"
@onAttributeRemove="removeAttribute(index, $event)"
></group-item>
</div>
</script>
<script type="text/x-template" id="group-item-template">
<accordian :title="group.groupName" :active="true">
<accordian :title="group.name" :active="true">
<div slot="header">
<i class="icon expand-icon left"></i>
<h1>@{{ group.name ? group.name : group.groupName }}</h1>
<h1>@{{ group.name }}</h1>
<i class="icon trash-icon" @click="removeGroup()" v-if="group.is_user_defined"></i>
<span class="icon pencil-lg-icon" @click="editGroup()"></span>
</div>
<div slot="body">
<input type="hidden" :name="[groupInputName + '[name]']" :value="group.name ? group.name : group.groupName"/>
<input type="hidden" :name="[groupInputName + '[name]']" :value="group.name"/>
<input type="hidden":name="[groupInputName + '[position]']" :value="group.position"/>
<div class="table" v-if="group.custom_attributes.length" style="margin-bottom: 20px;">
@ -200,70 +239,27 @@
var groups = @json($attributeFamily->attribute_groups);
var custom_attributes = @json($custom_attributes);
Vue.component('group-form', {
data: function() {
return {
group: {
'groupName': '',
'position': '',
'custom_attributes': []
}
}
},
template: '#group-form-template',
methods: {
addGroup: function (formScope) {
var this_this = this;
this.$validator.validateAll(formScope).then(function (result) {
if (result) {
var filteredGroups = groups.filter(function(group) {
return this_this.group.groupName.trim() === (group.name ? group.name.trim() : group.groupName.trim())
})
if (filteredGroups.length) {
const field = this.$validator.fields.find({ name: 'groupName', scope: 'add-group-form' });
if (field) {
this.$validator.errors.add({
id: field.id,
field: 'groupName',
msg: "{{ __('admin::app.catalog.families.group-exist-error') }}",
scope: 'add-group-form',
});
}
} else {
groups.push(this_this.group);
groups = this_this.sortGroups();
this.group = {'groupName': '', 'position': '', 'is_user_defined': 1, 'custom_attributes': []};
this_this.$parent.closeModal();
}
}
});
},
sortGroups: function () {
return groups.sort(function(a, b) {
return a.position - b.position;
});
}
}
});
Vue.component('group-list', {
template: '#group-list-template',
data: function() {
return {
group: {
'name': '',
'position': '',
'custom_attributes': []
},
editGroup: {
'name': '',
'position': '',
'is_user_defined': 1,
'custom_attributes': []
},
groups: groups,
custom_attributes: custom_attributes
}
},
@ -286,6 +282,88 @@
},
methods: {
addGroup: function (formScope) {
var this_this = this;
this.$validator.validateAll(formScope).then(function (result) {
if (result) {
var filteredGroups = groups.filter(function(group) {
return this_this.group.name.trim() === group.name.trim()
})
if (filteredGroups.length) {
const field = this.$validator.fields.find({ name: 'name', scope: 'add-group-form' });
if (field) {
this.$validator.errors.add({
id: field.id,
field: 'name',
msg: "{{ __('admin::app.catalog.families.group-exist-error') }}",
scope: 'add-group-form',
});
}
} else {
groups.push(this_this.group);
groups = this_this.sortGroups();
this.group = {'name': '', 'position': '', 'is_user_defined': 1, 'custom_attributes': []};
self.$set(self.$root.modalIds, 'addGroupForm', false);
}
}
});
},
updateGroup: function(formScope) {
var self = this;
this.$validator.validateAll(formScope).then(function (result) {
if (result) {
var filteredGroups = groups.filter(function(group) {
return self.editGroup.name.trim() === group.name.trim()
})
if (filteredGroups.length > 1) {
const field = self.$validator.fields.find({ name: 'name', scope: 'edit-group-form' });
if (field) {
self.$validator.errors.add({
id: field.id,
field: 'name',
msg: "{{ __('admin::app.catalog.families.group-exist-error') }}",
scope: 'edit-group-form',
});
}
} else {
let index = groups.indexOf(self.editGroup)
groups[index] = self.editGroup;
groups = self.sortGroups();
this.editGroup = {'name': '', 'position': '', 'is_user_defined': 1, 'custom_attributes': []};
self.$set(self.$root.modalIds, 'editGroupForm', false);
}
}
});
},
sortGroups: function () {
return groups.sort(function(a, b) {
return a.position - b.position;
});
},
openEditGroupModal: function (group) {
this.editGroup = group;
this.$root.showModal('editGroupForm')
},
removeGroup: function (group) {
group.custom_attributes.forEach(function(attribute) {
this.custom_attributes.push(attribute);
@ -347,6 +425,10 @@
},
methods: {
editGroup: function() {
this.$emit('onEditGroup', this.group)
},
removeGroup: function () {
this.$emit('onRemoveGroup', this.group)
},

View File

@ -32,6 +32,7 @@
v-for='(image, index) in items'
:key='image.id'
:image="image"
class="draggable"
@onRemoveImage="removeImage($event)"
@onImageSelected="imageSelected($event)">
</product-image-item>

View File

@ -193,7 +193,7 @@
@endif
@if (isset($field['info']))
<span class="control-info mt-10">{{ trans($field['info']) }}</span>
<span class="control-info mt-10">{{!! trans($field['info']) !!}}</span>
@endif
<span class="control-error" @if ($field['type'] == 'multiselect') v-if="errors.has('{{ $name }}[]')" @else v-if="errors.has('{{ $name }}')" @endif>

View File

@ -67,7 +67,7 @@
<div class="control-group">
<label for="name" >{{ __('admin::app.customers.reviews.comment') }}</label>
<textarea class="control" disabled> {{ $review->comment }}</textarea>
<textarea class="control" disabled v-text='"{{ $review->comment }}"'> </textarea>
</div>
@if (count($review->images) > 0)

View File

@ -28,52 +28,54 @@
<div class="title">
{{ __('admin::app.dashboard.total-customers') }}
</div>
<a href="{{ route('admin.customer.index') }}">
<div class="data">
{{ $statistics['total_customers']['current'] }}
<div class="data">
{{ $statistics['total_customers']['current'] }}
<span class="progress">
@if ($statistics['total_customers']['progress'] < 0)
<span class="icon graph-down-icon"></span>
{{ __('admin::app.dashboard.decreased', [
'progress' => -number_format($statistics['total_customers']['progress'], 1)
])
}}
@else
<span class="icon graph-up-icon"></span>
{{ __('admin::app.dashboard.increased', [
'progress' => number_format($statistics['total_customers']['progress'], 1)
])
}}
@endif
</span>
</div>
<span class="progress">
@if ($statistics['total_customers']['progress'] < 0)
<span class="icon graph-down-icon"></span>
{{ __('admin::app.dashboard.decreased', [
'progress' => -number_format($statistics['total_customers']['progress'], 1)
])
}}
@else
<span class="icon graph-up-icon"></span>
{{ __('admin::app.dashboard.increased', [
'progress' => number_format($statistics['total_customers']['progress'], 1)
])
}}
@endif
</span>
</div>
</a>
</div>
<div class="dashboard-card">
<div class="title">
{{ __('admin::app.dashboard.total-orders') }}
</div>
<a href="{{ route('admin.sales.orders.index') }}">
<div class="data">
{{ $statistics['total_orders']['current'] }}
<div class="data">
{{ $statistics['total_orders']['current'] }}
<span class="progress">
@if ($statistics['total_orders']['progress'] < 0)
<span class="icon graph-down-icon"></span>
{{ __('admin::app.dashboard.decreased', [
'progress' => -number_format($statistics['total_orders']['progress'], 1)
])
}}
@else
<span class="icon graph-up-icon"></span>
{{ __('admin::app.dashboard.increased', [
'progress' => number_format($statistics['total_orders']['progress'], 1)
])
}}
@endif
</span>
</div>
<span class="progress">
@if ($statistics['total_orders']['progress'] < 0)
<span class="icon graph-down-icon"></span>
{{ __('admin::app.dashboard.decreased', [
'progress' => -number_format($statistics['total_orders']['progress'], 1)
])
}}
@else
<span class="icon graph-up-icon"></span>
{{ __('admin::app.dashboard.increased', [
'progress' => number_format($statistics['total_orders']['progress'], 1)
])
}}
@endif
</span>
</div>
</a>
</div>
<div class="dashboard-card">

View File

@ -9,10 +9,6 @@
$tree->items = core()->sortItems($tree->items);
$config = $tree;
$allLocales = core()->getAllLocales()->pluck('name', 'code');
$currentLocaleCode = core()->getRequestedLocaleCode('admin_locale');
@endphp
<mobile-nav></mobile-nav>
@ -30,7 +26,7 @@
<div class="profile-info-icon">
<span style="">{{ substr(auth()->guard('admin')->user()->name, 0, 1) }}</span>
</div>
<div class="profile-info-desc">
<div class="name">
{{ auth()->guard('admin')->user()->name }}
@ -46,7 +42,7 @@
</div>
</div>
<div class="nav-items">
<div class="nav-items">
@foreach ($menu->items as $menuItem)
<div class="nav-item {{ $menu->getActive($menuItem) }}">
<a class="nav-tab-name" href="{{ $menuItem['key'] == 'dashboard' ? $menuItem['url'] : '#' }}">
@ -68,7 +64,7 @@
</a>
</li>
@endforeach
</ul>
</ul>
@endif
@else
<ul>
@ -78,28 +74,11 @@
<span style="margin-left:47px">{{ isset($item['name']) ? trans($item['name']) : '' }}</span>
</a>
</li>
@endforeach
</ul>
@endif
@endforeach
</ul>
@endif
</div>
@endforeach
<div class="nav-item">
<a class="nav-tab-name">
<span class="icon-menu icon locale-icon"
style="margin-right:10px; display: inline-block;vertical-align: middle;transform: scale(0.8);"></span>
<span class="menu-label"> {{ __('admin::app.datagrid.locale') }} {{ $allLocales[$currentLocaleCode] }}</span>
<span class="icon arrow-icon"></span>
</a>
<ul>
@foreach ($allLocales as $code => $name)
<li class="navbar-child">
<a href="{{ url()->current() . '?' . http_build_query(array_merge(request()->all(), ['admin_locale' => $code])) }}">
<span style="margin-left:47px"> {{ $name }}</span>
</a>
</li>
@endforeach
</ul>
</div>
<div class="nav-item">
<a class="nav-tab-name">
<span class="icon-menu icon accounts-icon"
@ -107,9 +86,9 @@
<span class="menu-label">{{ __('admin::app.layouts.account-title') }}</span>
<span class="icon arrow-icon"></span>
</a>
<ul>
<li class="navbar-child">
<a>
<ul>
<li class="navbar-child">
<a>
<span style="display:flex;justify-content:space-between;height:20px">
<div style="margin-top:12px;margin-left:47px">
<span>{{ __('admin::app.layouts.mode') }}</span>
@ -117,10 +96,10 @@
<dark style="margin-left:13%"></dark>
</span>
</a>
</li>
<li class="navbar-child">
<a href="{{ route('admin.account.edit') }}">
<a href="{{ route('admin.account.edit') }}">
<span style="margin-left:47px">{{ __('admin::app.layouts.my-account') }}</span>
</a>
</li>
@ -128,10 +107,10 @@
<a href="{{ route('admin.session.destroy') }}">
<span style="margin-left:47px">{{ __('admin::app.layouts.logout') }}</span>
</a>
</li>
</ul>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</script>
@ -149,10 +128,10 @@
mounted(){
const nav = document.querySelector(".nav-container");
if (nav) {
const toggle = nav.querySelector(".nav-toggle");
if (toggle) {
toggle.addEventListener("click", () => {
if (nav.classList.contains("is-active")) {
@ -162,7 +141,7 @@
nav.classList.add("is-active");
}
});
nav.addEventListener("blur", () => {
nav.classList.remove("is-active");
});
@ -177,7 +156,7 @@
navItem.parentElement.children[1].classList.toggle("display-block");
navItem.children[2].classList.toggle("rotate-arrow-icon");
}
});
});
},

View File

@ -11,8 +11,6 @@
$config = $tree;
$allLocales = core()->getAllLocales()->pluck('name', 'code');
$currentLocaleCode = core()->getRequestedLocaleCode('admin_locale');
@endphp
<div class="navbar-left" v-bind:class="{'open': isMenuOpen}">
@ -26,10 +24,10 @@
<span class="menu-label">{{ trans($menuItem['name']) }}</span>
@if(count($menuItem['children']) || $menuItem['key'] == 'configuration' )
<span
<span
class="icon arrow-icon {{ $menu->getActive($menuItem) == 'active' ? 'rotate-arrow-icon' : '' }} {{ ( core()->getCurrentLocale() && core()->getCurrentLocale()->direction == 'rtl' ) ? 'arrow-icon-right' :'arrow-icon-left' }}"
></span>
@endif
</a>
@if ($menuItem['key'] != 'configuration')
@ -48,7 +46,7 @@
<ul class="sub-menubar">
@foreach ($config->items as $key => $item)
<li class="sub-menu-item {{ $item['key'] == request()->route('slug') ? 'active' : '' }}">
<a href="{{ route('admin.configuration.index', $item['key']) }}">
<a href="{{ route('admin.configuration.index', $item['key']) }}">
<span class="menu-label"> {{ isset($item['name']) ? trans($item['name']) : '' }}</span>
</a>
</li>

View File

@ -7,8 +7,6 @@
'processing' => trans('admin::app.notification.order-status-messages.processing')
];
$allLocales = core()->getAllLocales()->pluck('name', 'code');
$currentLocaleCode = core()->getRequestedLocaleCode('admin_locale');
@endphp
<div class="navbar-top">
@ -65,29 +63,6 @@
</notification>
<div class="profile-info">
<div class="dropdown-toggle">
<i class="icon locale-icon"></i>
</div>
<div class="dropdown-list bottom-right">
<div class="dropdown-container">
<ul>
@foreach ($allLocales as $code => $name)
<li>
<a href="{{ url()->current() . '?' . http_build_query(array_merge(request()->all(), ['admin_locale' => $code])) }}"
style="{{ $code == $currentLocaleCode ? 'color:blue' : '' }}">
{{ $name }}
</a>
</li>
@endforeach
</ul>
</div>
</div>
</div>
<div class="profile-info">
<div class="dropdown-toggle">
<div style="display: inline-block; vertical-align: middle;">

View File

@ -107,41 +107,45 @@
</div>
</div>
</div>
</div>
</div>
</div>
</accordian>
<accordian title="{{ __('admin::app.sales.orders.address') }}" :active="true">
<div slot="body">
<div class="sale">
<div class="sale-section">
<div class="secton-title">
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
</div>
@if ($order->billing_address || $order->shipping_address)
<accordian title="{{ __('admin::app.sales.orders.address') }}" :active="true">
<div slot="body">
<div class="sale">
@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>
</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>
@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>
</accordian>
</div>
</accordian>
@endif
<accordian title="{{ __('admin::app.sales.orders.payment-and-shipping') }}" :active="true">
<div slot="body">
@ -273,7 +277,7 @@
</tbody>
</table>
</div>
</div>
</div>
</div>
</accordian>

View File

@ -499,7 +499,7 @@
<td>#{{ $invoice->increment_id ?? $invoice->id }}</td>
<td>{{ $invoice->created_at }}</td>
<td>#{{ $invoice->order->increment_id }}</td>
<td>{{ $invoice->address->name }}</td>
<td>{{ $order->customer_full_name }}</td>
<td>{{ $invoice->status_label }}</td>
<td>{{ core()->formatBasePrice($invoice->base_grand_total) }}</td>
<td class="action">

View File

@ -106,42 +106,46 @@
</div>
</div>
</div>
</div>
</div>
</accordian>
<accordian title="{{ __('admin::app.sales.orders.address') }}" :active="true">
<div slot="body">
<div class="sale">
<div class="sale-section">
<div class="secton-title">
<span>{{ __('admin::app.sales.orders.billing-address') }}</span>
</div>
<div class="section-content">
@include ('admin::sales.address', ['address' => $order->billing_address])
</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>
</div>
</accordian>
@if ($order->billing_address || $order->shipping_address)
<accordian title="{{ __('admin::app.sales.orders.address') }}" :active="true">
<div slot="body">
<div class="sale">
@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">
@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>
</accordian>
@endif
<accordian title="{{ __('admin::app.sales.orders.payment-and-shipping') }}" :active="true">
<div slot="body">
<div class="sale">
@ -340,7 +344,7 @@
</tbody>
</table>
</div>
</div>
</div>
</div>
</script>

View File

@ -9,7 +9,7 @@ use Webkul\User\Http\Controllers\SessionController;
/**
* Auth routes.
*/
Route::group(['middleware' => ['web', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web'], 'prefix' => config('app.admin_url')], function () {
/**
* Redirect route.
*/

View File

@ -9,7 +9,7 @@ use Webkul\Product\Http\Controllers\ProductController;
/**
* Catalog routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
Route::prefix('catalog')->group(function () {
/**
* Sync route.

View File

@ -6,7 +6,7 @@ use Webkul\CMS\Http\Controllers\Admin\PageController;
/**
* CMS routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
Route::prefix('cms')->group(function () {
Route::get('/', [PageController::class, 'index'])->defaults('_config', [
'view' => 'admin::cms.index',
@ -36,4 +36,4 @@ Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => conf
'redirect' => 'admin.cms.index',
])->name('admin.cms.mass-delete');
});
});
});

View File

@ -6,7 +6,7 @@ use Webkul\Admin\Http\Controllers\ConfigurationController;
/**
* Configuration routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
Route::get('configuration/{slug?}/{slug2?}', [ConfigurationController::class, 'index'])->defaults('_config', [
'view' => 'admin::configuration.index',
])->name('admin.configuration.index');

View File

@ -9,7 +9,7 @@ use Webkul\Product\Http\Controllers\ReviewController;
/**
* Customers routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
/**
* Customer management routes.
*/

View File

@ -13,7 +13,7 @@ use Webkul\Sitemap\Http\Controllers\Admin\SitemapController;
/**
* Marketing routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
Route::prefix('promotions')->group(function () {
/**
* Cart rules routes.
@ -173,7 +173,6 @@ Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => conf
'redirect' => 'admin.customers.subscribers.index',
])->name('admin.customers.subscribers.update');
/**
* Cart rules routes.
*/

View File

@ -6,7 +6,7 @@ use Webkul\Notification\Http\Controllers\Admin\NotificationController;
/**
* Notification routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
Route::get('notifications', [NotificationController::class, 'index'])->defaults('_config', [
'view' => 'admin::notifications.index',
])->name('admin.notification.index');

View File

@ -10,7 +10,7 @@ use Webkul\User\Http\Controllers\SessionController;
/**
* Extra routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
/**
* Tinymce file upload handler.
*/

View File

@ -10,7 +10,7 @@ use Webkul\Admin\Http\Controllers\Sales\TransactionController;
/**
* Sales routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
Route::prefix('sales')->group(function () {
/**
* Orders routes.

View File

@ -16,7 +16,7 @@ use Webkul\User\Http\Controllers\UserController;
/**
* Settings routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
/**
* Roles routes.
*/

View File

@ -0,0 +1 @@
{}

View File

@ -1,25 +1,24 @@
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "cross-env npm run watch -- --watch-poll --progress",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"cross-env": "^6.0.3",
"laravel-mix": "^5.0.0",
"laravel-mix-merge-manifest": "^0.1.2",
"sass": "^1.25.0",
"sass-loader": "^8.0.2",
"vue": "^2.6.12",
"vue-loader": "^15.9.6",
"vue-template-compiler": "^2.6.12"
},
"dependencies": {
"vue-cal": "^3.10.1"
}
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "cross-env npm run watch -- --watch-poll --progress",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"cross-env": "^6.0.3",
"laravel-mix": "^5.0.0",
"laravel-mix-merge-manifest": "^0.1.2",
"sass": "^1.25.0",
"sass-loader": "^8.0.2",
"vue": "^2.6.14",
"vue-template-compiler": "^2.6.12"
},
"dependencies": {
"vue-cal": "^3.10.1"
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{
"/css/default-booking.css": "/css/default-booking.css?id=76de1f2b8e064c1e9043",
"/css/velocity-booking.css": "/css/velocity-booking.css?id=481d94b621e06671752a",
"/js/admin-booking.js": "/js/admin-booking.js?id=5cc56229ce47cbecd1be",
"/js/admin-booking.js": "/js/admin-booking.js?id=c063601e89b1bdc6f82b",
"/css/admin-booking.css": "/css/admin-booking.css?id=02be5e2fa5a499045cbe"
}

View File

@ -3,7 +3,7 @@
/**
* Sales routes.
*/
Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => config('app.admin_url')], function () {
Route::group(['middleware' => ['web', 'admin'], 'prefix' => config('app.admin_url')], function () {
Route::prefix('sales')->group(function () {
/**
* Booking routes.
@ -14,4 +14,4 @@ Route::group(['middleware' => ['web', 'admin', 'admin_locale'], 'prefix' => conf
Route::get('/bookings/get', [Webkul\BookingProduct\Http\Controllers\Admin\BookingController::class, 'get'])->name('admin.sales.bookings.get');
});
});
});

View File

@ -48,9 +48,9 @@ return [
'price' => 'السعر',
'quantity' => 'كمية',
'description' => 'وصف',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'special-price' => 'سعر خاص',
'special-price-from' => 'صالح من تاريخ',
'special-price-to' => 'صالح حتى',
'charged-per' => 'اتهم لكل',
'guest' => 'زائر',
'table' => 'الطاولة',
@ -64,7 +64,7 @@ return [
'status' => 'الحالة',
'open' => 'افتح',
'close' => 'غلق',
'time-error' => 'The to time must be greater than the from time.'
'time-error' => 'يجب أن يكون وقت إلى وقت أكبر من وقت من وقت.'
]
],
@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'حجز موعد',
'date' => 'تاريخ',
'slot' => 'فتحة',
'no-slots-available' => 'لا توجد فترات زمنية متاحة',
'rent-an-item' => 'استئجار عنصر',
'choose-rent-option' => 'اختر خيار الإيجار',
'daily-basis' => 'الأساس اليومي',

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'Reservar una Cita',
'date' => 'Fecha',
'slot' => 'Horario',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Alquilar un Artículo',
'choose-rent-option' => 'Elija la Opción de Alquiler',
'daily-basis' => 'Diariamente',

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'قرار ملاقات را رزرو کنید',
'date' => 'تاریخ',
'slot' => 'اسلات',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'اجاره یک مورد',
'choose-rent-option' => 'گزینه اجاره را انتخاب کنید',
'daily-basis' => 'به صورت روزانه',

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'एक अपॉइंटमेंट बुक करें',
'date' => 'तारीख',
'slot' => 'स्लॉट',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'एक वस्तु किराए पर लें',
'choose-rent-option' => 'किराया विकल्प चुनें',
'daily-basis' => 'दैनिक आधार पर',

View File

@ -21,6 +21,7 @@ return [
'same-slot-all-days' => 'Stesso Slot tutti i giorni',
'slot-has-quantity' => 'Slot ha quantità',
'slots' => 'Slot',
'no-slots-available' => 'No slots available',
'from' => 'Da',
'to' => 'A',
'qty' => 'Qtà',

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'Een afspraak maken',
'date' => 'Datum',
'slot' => 'Sleuf',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Huur een item',
'choose-rent-option' => 'Kies Huuroptie',
'daily-basis' => 'Dagelijks',

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'Marque uma consulta',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Alugar um item',
'choose-rent-option' => 'Escolha a opção de aluguel',
'daily-basis' => 'Diariamente',

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -0,0 +1,142 @@
<?php
return [
'admin' => [
'catalog' => [
'products' => [
'booking' => 'Booking Information',
'booking-type' => 'Booking Type',
'default' => 'Default',
'appointment-booking' => 'Appointment Booking',
'event-booking' => 'Event Booking',
'rental-booking' => 'Rental Booking',
'table-booking' => 'Table Booking',
'slot-duration' => 'Slot Duration (Mins)',
'break-time' => 'Break Time b/w Slots (Mins)',
'available-every-week' => 'Available Every Week',
'yes' => 'Yes',
'no' => 'No',
'available-from' => 'Available From',
'available-to' => 'Available To',
'same-slot-all-days' => 'Same Slot All Days',
'slot-has-quantity' => 'Slot has Quantity',
'slots' => 'Slots',
'from' => 'From',
'to' => 'To',
'qty' => 'Qty',
'add-slot' => 'Add Slot',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'renting-type' => 'Renting Type',
'daily' => 'Daily Basis',
'hourly' => 'Hourly Basis',
'daily-hourly' => 'Both (Daily and Hourly Basis)',
'daily-price' => 'Daily Price',
'hourly-price' => 'Hourly Price',
'location' => 'Location',
'show-location' => 'Show Location',
'event-start-date' => 'Event Start Date',
'event-end-date' => 'Event End Date',
'tickets' => 'Tickets',
'add-ticket' => 'Add Ticket',
'name' => 'Name',
'price' => 'Price',
'quantity' => 'Quantity',
'description' => 'Description',
'special-price' => 'Special Price',
'special-price-from' => 'Valid From',
'special-price-to' => 'Valid Until',
'charged-per' => 'Charged Per',
'guest' => 'Guest',
'table' => 'Table',
'prevent-scheduling-before' => 'Prevent Scheduling Before',
'guest-limit' => 'Guest Limit Per Table',
'guest-capacity' => 'Guest Capacity',
'type' => 'Type',
'many-bookings-for-one-day' => 'Many Bookings for One Day',
'one-booking-for-many-days' => 'One Booking for Many Days',
'day' => 'Day',
'status' => 'Status',
'open' => 'Open',
'close' => 'Close',
'time-error' => 'The to time must be greater than the from time.'
]
],
'sales' => [
'bookings' => [
'title' => 'Bookings',
]
],
'datagrid' => [
'from' => 'From',
'to' => 'To'
]
],
'shop' => [
'products' => [
'booking-information' => 'Booking Information',
'location' => 'Location',
'contact' => 'Contact',
'email' => 'Email',
'slot-duration' => 'Slot Duration',
'slot-duration-in-minutes' => ':minutes Minutes',
'today-availability' => 'Today Availability',
'slots-for-all-days' => 'Show for all days',
'sunday' => 'Sunday',
'monday' => 'Monday',
'tuesday' => 'Tuesday',
'wednesday' => 'Wednesday',
'thursday' => 'Thursday',
'friday' => 'Friday',
'saturday' => 'Saturday',
'closed' => 'Closed',
'book-an-appointment' => 'Book an Appointment',
'date' => 'Date',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Rent an Item',
'choose-rent-option' => 'Choose Rent Option',
'daily-basis' => 'Daily Basis',
'hourly-basis' => 'Hourly Basis',
'select-time-slot'=> 'Select time slot',
'select-slot' => 'Select Slot',
'select-date' => 'Select date',
'select-rent-time' => 'Select Rent Time',
'from' => 'From',
'to' => 'To',
'book-a-table' => 'Book a Table',
'special-notes' => 'Special Request/Notes',
'event-on' => 'Event On',
'book-your-ticket' => 'Book Your Ticket',
'per-ticket-price' => ':price Per Ticket',
'number-of-tickets' => 'Number of Tickets',
'total-tickets' => 'Total Tickets',
'base-price' => 'Base Price',
'total-price' => 'Total Price',
'base-price-info' => '(This will be apply to each type of ticket for each quantity)'
],
'cart' => [
'renting_type' => 'Rent Type',
'daily' => 'Daily',
'hourly' => 'Hourly',
'event-ticket' => 'Event Ticket',
'event-from' => 'Event From',
'event-till' => 'Event Till',
'rent-type' => 'Rent Type',
'rent-from' => 'Rent From',
'rent-till' => 'Rent Till',
'booking-from' => 'Booking From',
'booking-till' => 'Booking Till',
'special-note' => 'Special Request/Notes',
]
]
];

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => 'Randevu Al',
'date' => 'Tarih',
'slot' => 'Slot',
'no-slots-available' => 'No slots available',
'rent-an-item' => 'Eşya Kiralama',
'choose-rent-option' => 'Kiralama Seçeneğini Seçin',
'daily-basis' => 'Günlük Bazında',

View File

@ -101,6 +101,7 @@ return [
'book-an-appointment' => '预约',
'date' => '日期',
'slot' => '插槽',
'no-slots-available' => 'No slots available',
'rent-an-item' => '租一个项目',
'choose-rent-option' => '选择租金选项',
'daily-basis' => '每日基础',

View File

@ -18,6 +18,8 @@
<div class="control-group slots" :class="[errors.has('booking[slot]') ? 'has-error' : '']">
<select v-validate="'required'" name="booking[slot]" class="control" data-vv-as="&quot;{{ __('bookingproduct::app.shop.products.slot') }}&quot;">
<option v-for="slot in slots" :value="slot.timestamp">@{{ slot.from + ' - ' + slot.to }}</option>
<option value="" v-if="! slots.length">{{ __('bookingproduct::app.shop.products.no-slots-available') }}</option>
</select>
<span class="control-error" v-if="errors.has('booking[slot]')">@{{ errors.first('booking[slot]') }}</span>

View File

@ -18,6 +18,8 @@
<div class="form-group slots" :class="[errors.has('booking[slot]') ? 'has-error' : '']">
<select v-validate="'required'" name="booking[slot]" class="form-style" data-vv-as="&quot;{{ __('bookingproduct::app.shop.products.slot') }}&quot;">
<option v-for="slot in slots" :value="slot.timestamp">@{{ slot.from + ' - ' + slot.to }}</option>
<option value="" v-if="! slots.length">{{ __('bookingproduct::app.shop.products.no-slots-available') }}</option>
</select>
<span class="control-error" v-if="errors.has('booking[slot]')">@{{ errors.first('booking[slot]') }}</span>

View File

@ -1,34 +1,45 @@
const mix = require("laravel-mix");
const mix = require('laravel-mix');
if (mix == 'undefined') {
const { mix } = require("laravel-mix");
const { mix } = require('laravel-mix');
}
require("laravel-mix-merge-manifest");
require('laravel-mix-merge-manifest');
let publicPath = '../../../public/themes/default/assets';
if (mix.inProduction()) {
var publicPath = 'publishable/assets';
} else {
var publicPath = "../../../public/themes/default/assets";
publicPath = 'publishable/assets';
}
mix.setPublicPath(publicPath).mergeManifest();
mix.disableNotifications();
mix.js(__dirname + "/src/Resources/assets/js/app.js", "js/admin-booking.js")
.copyDirectory(__dirname + "/src/Resources/assets/images", publicPath + "/images")
.sass(__dirname + "/src/Resources/assets/sass/admin.scss", "css/admin-booking.css")
.sass(__dirname + "/src/Resources/assets/sass/default.scss", "css/default-booking.css")
.sass(__dirname + "/src/Resources/assets/sass/velocity.scss", "css/velocity-booking.css")
mix.js(__dirname + '/src/Resources/assets/js/app.js', 'js/admin-booking.js')
.copyDirectory(
__dirname + '/src/Resources/assets/images',
publicPath + '/images'
)
.sass(
__dirname + '/src/Resources/assets/sass/admin.scss',
'css/admin-booking.css'
)
.sass(
__dirname + '/src/Resources/assets/sass/default.scss',
'css/default-booking.css'
)
.sass(
__dirname + '/src/Resources/assets/sass/velocity.scss',
'css/velocity-booking.css'
)
.options({
processCssUrls: false
processCssUrls: false,
});
if (! mix.inProduction()) {
if (!mix.inProduction()) {
mix.sourceMaps();
}
if (mix.inProduction()) {
mix.version();
}
}

View File

@ -294,6 +294,40 @@ class Cart
return false;
}
/**
* Remove all items from cart.
*
* @return \Webkul\Checkout\Models\Cart|null
*/
public function removeAllItems(): ?CartModel
{
$cart = $this->getCart();
Event::dispatch('checkout.cart.delete.all.before', $cart);
if (! $cart) {
return $cart;
}
foreach ($cart->items as $item) {
$this->cartItemRepository->delete($item->id);
if ($cart->items->count() == 0) {
$this->cartRepository->delete($cart->id);
if (session()->has('cart')) {
session()->forget('cart');
}
}
}
$cart->save();
Event::dispatch('checkout.cart.delete.all.after', $cart);
return $cart;
}
/**
* Remove cart items, whose product is inactive.
*

View File

@ -68,8 +68,7 @@ class Core
protected LocaleRepository $localeRepository,
protected CustomerGroupRepository $customerGroupRepository,
protected CoreConfigRepository $coreConfigRepository
)
{
) {
}
/**
@ -246,7 +245,7 @@ class Core
return $data = [
'channel' => $channel,
'locales' => $channel->locales()->orderBy('name')->get()
'locales' => $channel->locales()->orderBy('name')->get(),
];
}
@ -598,11 +597,13 @@ class Core
/**
* Return currency symbol from currency code.
*
* @param float $price
* @param string|\Webkul\Core\Contracts\Currency $currency
* @return string
*/
public function currencySymbol($code)
public function currencySymbol($currency)
{
$code = $currency instanceof \Webkul\Core\Contracts\Currency ? $currency->code : $currency;
$formatter = new \NumberFormatter('ru_RU@currency=' . $code, \NumberFormatter::CURRENCY);
return $formatter->getSymbol(\NumberFormatter::CURRENCY_SYMBOL);
@ -1206,7 +1207,7 @@ class Core
* @param array $array2
* @return array
*/
protected function arrayMerge(array &$array1, array &$array2)
protected function arrayMerge(array&$array1, array&$array2)
{
$merged = $array1;

View File

@ -0,0 +1,31 @@
<?php
namespace Webkul\Product\Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Webkul\Product\Models\Product;
use Webkul\Product\Models\ProductOrderedInventory;
class ProductOrderedInventoryFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = ProductOrderedInventory::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition(): array
{
return [
'qty' => $this->faker->numberBetween(100, 200),
'product_id' => Product::factory(),
'channel_id' => 1,
];
}
}

View File

@ -2,15 +2,29 @@
namespace Webkul\Product\Models;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Webkul\Inventory\Models\InventorySourceProxy;
use Webkul\Core\Models\ChannelProxy;
use Webkul\Product\Contracts\ProductOrderedInventory as ProductOrderedInventoryContract;
use Webkul\Product\Database\Factories\ProductOrderedInventoryFactory;
class ProductOrderedInventory extends Model implements ProductOrderedInventoryContract
{
use HasFactory;
/**
* Timestamps.
*
* @var bool
*/
public $timestamps = false;
/**
* Fillables.
*
* @var array
*/
protected $fillable = [
'qty',
'product_id',
@ -19,6 +33,8 @@ class ProductOrderedInventory extends Model implements ProductOrderedInventoryCo
/**
* Get the channel owns the inventory.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function channel()
{
@ -27,9 +43,21 @@ class ProductOrderedInventory extends Model implements ProductOrderedInventoryCo
/**
* Get the product that owns the product inventory.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function product()
{
return $this->belongsTo(ProductProxy::modelClass());
}
}
/**
* Create a new factory instance for the model.
*
* @return Factory
*/
protected static function newFactory(): Factory
{
return ProductOrderedInventoryFactory::new ();
}
}

View File

@ -674,12 +674,12 @@ abstract class AbstractType
{
return [
'regular_price' => [
'price' => core()->convertPrice($this->evaluatePrice($this->product->price)),
'formated_price' => core()->currency($this->evaluatePrice($this->product->price)),
'price' => core()->convertPrice($this->evaluatePrice($regularPrice = $this->product->price)),
'formated_price' => core()->currency($this->evaluatePrice($regularPrice)),
],
'final_price' => [
'price' => core()->convertPrice($this->evaluatePrice($this->getMinimalPrice())),
'formated_price' => core()->currency($this->evaluatePrice($this->getMinimalPrice())),
'price' => core()->convertPrice($this->evaluatePrice($minimalPrice = $this->getMinimalPrice())),
'formated_price' => core()->currency($this->evaluatePrice($minimalPrice)),
],
];
}

View File

@ -340,23 +340,23 @@ class Bundle extends AbstractType
return [
'from' => [
'regular_price' => [
'price' => core()->convertPrice($this->evaluatePrice($this->getRegularMinimalPrice())),
'formated_price' => core()->currency($this->evaluatePrice($this->getRegularMinimalPrice())),
'price' => core()->convertPrice($this->evaluatePrice($regularMinimalPrice = $this->getRegularMinimalPrice())),
'formated_price' => core()->currency($this->evaluatePrice($regularMinimalPrice)),
],
'final_price' => [
'price' => core()->convertPrice($this->evaluatePrice($this->getMinimalPrice())),
'formated_price' => core()->currency($this->evaluatePrice($this->getMinimalPrice())),
'price' => core()->convertPrice($this->evaluatePrice($minimalPrice = $this->getMinimalPrice())),
'formated_price' => core()->currency($this->evaluatePrice($minimalPrice)),
],
],
'to' => [
'regular_price' => [
'price' => core()->convertPrice($this->evaluatePrice($this->getRegularMaximamPrice())),
'formated_price' => core()->currency($this->evaluatePrice($this->getRegularMaximamPrice())),
'price' => core()->convertPrice($this->evaluatePrice($regularMaximumPrice = $this->getRegularMaximamPrice())),
'formated_price' => core()->currency($this->evaluatePrice($regularMaximumPrice)),
],
'final_price' => [
'price' => core()->convertPrice($this->evaluatePrice($this->getMaximamPrice())),
'formated_price' => core()->currency($this->evaluatePrice($this->getMaximamPrice())),
'price' => core()->convertPrice($this->evaluatePrice($maximumPrice = $this->getMaximamPrice())),
'formated_price' => core()->currency($this->evaluatePrice($maximumPrice)),
],
],
];

View File

@ -552,14 +552,16 @@ class Configurable extends AbstractType
*/
public function getProductPrices()
{
$haveOffer = $this->haveOffer();
return [
'regular_price' => [
'formated_price' => $this->haveOffer()
? core()->currency($this->evaluatePrice($this->getOfferPrice()))
: core()->currency($this->evaluatePrice($this->getMinimalPrice())),
'price' => $this->haveOffer()
? $this->evaluatePrice($this->getOfferPrice())
: $this->evaluatePrice($this->getMinimalPrice()),
'formated_price' => $haveOffer
? core()->currency($this->evaluatePrice($offerPrice = $this->getOfferPrice()))
: core()->currency($this->evaluatePrice($minimalPrice = $this->getMinimalPrice())),
'price' => $haveOffer
? $this->evaluatePrice($offerPrice)
: $this->evaluatePrice($minimalPrice),
],
];
}

View File

@ -2,8 +2,6 @@
namespace Webkul\Sales\Repositories;
use Illuminate\Container\Container as App;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Log;
use Webkul\Core\Eloquent\Repository;
use Webkul\Sales\Contracts\OrderItem;
@ -11,16 +9,18 @@ use Webkul\Sales\Contracts\OrderItem;
class OrderItemRepository extends Repository
{
/**
* Specify Model class name
* Specify model class name.
*
* @return string
*/
function model()
public function model()
{
return OrderItem::class;
}
/**
* Create.
*
* @param array $data
* @return \Webkul\Sales\Contracts\OrderItem
*/
@ -37,6 +37,8 @@ class OrderItemRepository extends Repository
}
/**
* Collect totals.
*
* @param \Webkul\Sales\Contracts\OrderItem $orderItem
* @return \Webkul\Sales\Contracts\OrderItem
*/
@ -96,6 +98,8 @@ class OrderItemRepository extends Repository
}
/**
* Manage inventory.
*
* @param \Webkul\Sales\Contracts\OrderItem $orderItem
* @return void
*/
@ -125,14 +129,14 @@ class OrderItemRepository extends Repository
if (isset($item->qty_ordered)) {
$qty = $item->qty_ordered;
} else {
Log::info('OrderItem has no qty_ordered', ['orderItem' => $item, 'product' => $item->product]);
Log::info('OrderItem has no `qty_ordered`.', ['orderItem' => $item, 'product' => $item->product]);
if (isset($item->parent->qty_ordered)) {
$qty = $item->parent->qty_ordered;
} else {
Log::info('OrderItem has no parent with qty_ordered', [
Log::info('OrderItem has no parent with `qty_ordered`', [
'orderItem' => $item,
'parent' => $item->parent,
'product' => $item->product
'parent' => $item->parent,
'product' => $item->product,
]);
$qty = 1;
}
@ -154,26 +158,14 @@ class OrderItemRepository extends Repository
}
/**
* Returns qty to product inventory after order cancelation
* Returns qty to product inventory after order cancellation.
*
* @param \Webkul\Sales\Contracts\OrderItem $orderItem
* @return void
*/
public function returnQtyToProductInventory($orderItem)
{
$orderedInventory = $orderItem->product->ordered_inventories()
->where('channel_id', $orderItem->order->channel->id)
->first();
if (! $orderedInventory) {
return;
}
if (($qty = $orderedInventory->qty - ($orderItem->qty_ordered ? $orderItem->qty_to_cancel : $orderItem->parent->qty_ordered)) < 0) {
$qty = 0;
}
$orderedInventory->update(['qty' => $qty]);
$this->updateProductOrderedInventories($orderItem);
if ($orderItem->getTypeInstance()->isStockable()) {
$shipmentItems = $orderItem->parent ? $orderItem->parent->shipment_items : $orderItem->shipment_items;
@ -182,20 +174,55 @@ class OrderItemRepository extends Repository
foreach ($shipmentItems as $shipmentItem) {
if ($orderItem->parent) {
$shippedQty = $orderItem->qty_ordered
? ($orderItem->qty_ordered / $orderItem->parent->qty_ordered) * $shipmentItem->qty
: $orderItem->parent->qty_ordered;
? ($orderItem->qty_ordered / $orderItem->parent->qty_ordered) * $shipmentItem->qty
: $orderItem->parent->qty_ordered;
} else {
$shippedQty = $shipmentItem->qty;
}
$inventory = $orderItem->product->inventories()
// ->where('vendor_id', $data['vendor_id'])
->where('inventory_source_id', $shipmentItem->shipment->inventory_source_id)
->first();
$inventory->update(['qty' => $inventory->qty + $shippedQty]);
->where('inventory_source_id', $shipmentItem->shipment->inventory_source_id)
->first();
$inventory->update(['qty' => $inventory->qty + $shippedQty]);
}
}
}
}
}
/**
* Update product ordered quantity.
*
* @param \Webkul\Sales\Contracts\OrderItem $orderItem
* @return void
*/
public function updateProductOrderedInventories($orderItem)
{
$orderedInventory = $orderItem->product->ordered_inventories()
->where('channel_id', $orderItem->order->channel->id)
->first();
if (! $orderedInventory) {
return;
}
$qty = (
$orderedInventory->qty +
(
isset($orderItem->qty_shipped)
? $orderItem->qty_shipped
: $orderItem->parent->qty_shipped
)
) - (
isset($orderItem->qty_ordered)
? $orderItem->qty_ordered
: $orderItem->parent->qty_ordered
);
if ($qty < 0) {
$qty = 0;
}
$orderedInventory->update(['qty' => $qty]);
}
}

View File

@ -74,9 +74,13 @@ class OrderRepository extends Repository
$order->payment()->create($data['payment']);
if (isset($data['shipping_address'])) {
unset($data['shipping_address']['customer_id']);
$order->addresses()->create($data['shipping_address']);
}
unset($data['billing_address']['customer_id']);
$order->addresses()->create($data['billing_address']);
foreach ($data['items'] as $item) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -10,8 +10,8 @@
*/
/*!
* Vue.js v2.6.14
* (c) 2014-2021 Evan You
* Vue.js v2.6.12
* (c) 2014-2020 Evan You
* Released under the MIT License.
*/

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js?id=60b6b9cbe8e20c7ab585",
"/css/shop.css": "/css/shop.css?id=1c6f9a98eb7c9d2aa0c4"
"/js/shop.js": "/js/shop.js?id=34684ef2b5b3c24817b4",
"/css/shop.css": "/css/shop.css?id=9afe3747b802b3fd1aa9"
}

View File

@ -75,7 +75,7 @@ class OrderDataGrid extends DataGrid
$this->addColumn([
'index' => 'status',
'label' => trans('shop::app.customer.account.order.index.status'),
'type' => 'string',
'type' => 'checkbox',
'options' => [
'processing' => trans('shop::app.customer.account.order.index.processing'),
'completed' => trans('shop::app.customer.account.order.index.completed'),

View File

@ -105,6 +105,22 @@ class CartController extends Controller
return redirect()->back();
}
/**
* Removes the item from the cart if it exists.
*
* @return \Illuminate\Http\Response
*/
public function removeAllItems()
{
$result = Cart::removeAllItems();
if ($result) {
session()->flash('success', trans('shop::app.checkout.cart.item.success-all-remove'));
}
return redirect()->back();
}
/**
* Updates the quantity of the items present in the cart.
*

View File

@ -152,14 +152,14 @@ input {
/**
* Show the indicator (dot/circle) when checked.
*/
.radio-container input:checked~.checkmark:after {
.radio-container input:checked ~ .checkmark:after {
display: block;
}
/**
* Show the indicator.
*/
.radio-container input:disabled~.checkmark {
.radio-container input:disabled ~ .checkmark {
display: block;
border: 2px solid $radio-button-disabled;
}
@ -223,12 +223,11 @@ input {
background-image: url('../images/checkbox.svg') !important;
}
input:checked+.checkbox-view {
input:checked + .checkbox-view {
background-image: url('../images/checkbox-checked.svg') !important;
}
}
/* if not very important use bootstrap 4 float-left and float-right class */
.pull-right {
float: right !important;
}
@ -237,8 +236,6 @@ input {
float: left !important;
}
/* if not very important use bootstrap 4 float-left and float-right class */
/**
* Wishlist icon hover properties.
*/
@ -1000,7 +997,7 @@ section.slider-block {
div.right-content {
.right-content-menu {
>li {
> li {
display: inline-block;
border-right: 2px solid $border-color;
padding: 0 15px;
@ -1071,7 +1068,7 @@ section.slider-block {
margin-top: 5px;
}
ul>li {
ul > li {
padding: 5px 10px 5px 0px !important;
}
}
@ -1091,7 +1088,7 @@ section.slider-block {
column-gap: 10px;
grid-template-columns: auto auto;
.btn {
.btn {
word-break: break-all;
text-align: center;
}
@ -1110,24 +1107,24 @@ section.slider-block {
color: $font-dark;
}
.dropdown-cart>.dropdown-header {
.dropdown-cart > .dropdown-header {
width: 100%;
padding: 8px 16px;
border-bottom: 1px solid $border-color;
}
.dropdown-cart>.dropdown-header p {
.dropdown-cart > .dropdown-header p {
display: inline;
line-height: 25px;
}
.dropdown-cart>.dropdown-header i {
.dropdown-cart > .dropdown-header i {
float: right;
height: 22px;
width: 22px;
}
.dropdown-cart>.dropdown-header p.heading {
.dropdown-cart > .dropdown-header p.heading {
font-weight: lighter;
}
@ -1238,7 +1235,7 @@ section.slider-block {
position: relative;
}
.nav li>.icon {
.nav li > .icon {
display: none;
}
@ -1251,17 +1248,17 @@ section.slider-block {
position: relative;
}
.nav>li {
.nav > li {
float: left;
margin-right: 1px;
height: 45px;
}
.nav>li>a {
.nav > li > a {
margin-bottom: 1px;
}
.nav>li>a .icon {
.nav > li > a .icon {
display: none;
}
@ -1293,34 +1290,34 @@ section.slider-block {
left: -99999em;
}
.nav>li:hover {
.nav > li:hover {
background-color: $background-color;
}
.nav>li:hover>ul {
.nav > li:hover > ul {
left: auto;
min-width: 100%;
}
.nav>li li:hover {
.nav > li li:hover {
background-color: $background-color;
}
.nav>li li:hover>ul {
.nav > li li:hover > ul {
left: 100%;
margin-left: 1px;
top: -2px;
}
.nav>li:hover>a:first-child:nth-last-child(2):before {
.nav > li:hover > a:first-child:nth-last-child(2):before {
margin-top: -5px;
}
.nav li li>a:first-child:nth-last-child(2):before {
.nav li li > a:first-child:nth-last-child(2):before {
margin-top: -5px;
}
.nav li li:hover>a:first-child:nth-last-child(2):before {
.nav li li:hover > a:first-child:nth-last-child(2):before {
right: 10px;
}
}
@ -1371,7 +1368,7 @@ section.slider-block {
}
.right-content-menu {
>li {
> li {
border-right: none;
padding: 0 2px;
@ -1411,11 +1408,11 @@ section.slider-block {
height: auto;
}
.nav>li {
.nav > li {
float: none;
}
.nav li>.icon {
.nav li > .icon {
float: right;
display: block;
}
@ -1429,7 +1426,7 @@ section.slider-block {
width: 16px;
}
.nav li a>.icon {
.nav li a > .icon {
display: none;
}
@ -1439,7 +1436,7 @@ section.slider-block {
box-shadow: none;
}
.nav>li li:hover>ul {
.nav > li li:hover > ul {
margin-left: 0px;
top: 0px;
}
@ -2081,7 +2078,7 @@ section.product-detail {
margin-top: 0;
&.required:after {
content: "*";
content: '*';
color: #fc6868;
font-weight: 700;
display: inline-block;
@ -2353,8 +2350,8 @@ section.product-detail {
background: rgb(242, 242, 242);
}
input:checked+span,
input:checked+img {
input:checked + span,
input:checked + img {
border: 1px solid $font-dark;
}
@ -2379,7 +2376,6 @@ section.product-detail {
*/
.accordian,
accordian {
.accordian-header,
div[slot*='header'] {
font-size: 16px !important;
@ -3229,7 +3225,6 @@ section.cart {
.checkout-process {
.col-main {
.step-content {
.address,
.order-description {
display: flex;
@ -3589,7 +3584,7 @@ ol.breadcrumb {
li.breadcrumb-item {
display: inline-block;
&+.breadcrumb-item::before {
& + .breadcrumb-item::before {
display: inline-block;
padding-right: 5px;
padding-left: 5px;
@ -3813,7 +3808,7 @@ ol.breadcrumb {
border: 0;
display: none;
>li {
> li {
margin-left: 0;
width: 100%;
@ -3822,7 +3817,7 @@ ol.breadcrumb {
}
}
>li:last-child {
> li:last-child {
border-bottom: 1px solid $border-color;
}
}
@ -4074,7 +4069,6 @@ ol.breadcrumb {
}
}
.show-wishlist {
z-index: -1 !important;
}
@ -4178,7 +4172,7 @@ ol.breadcrumb {
div.right-content {
.right-content-menu {
>li {
> li {
border-right: 2px solid $border-color;
padding: 0 15px 0 15px;
@ -4220,7 +4214,7 @@ ol.breadcrumb {
}
.header-bottom {
.nav>li {
.nav > li {
float: right;
margin-right: 0px;
margin-left: 1px;
@ -4230,11 +4224,11 @@ ol.breadcrumb {
padding: 0.8em 0.5em 0.8em 0.3em !important;
}
.nav li a>.icon {
.nav li a > .icon {
transform: rotate(180deg);
}
.nav>li li:hover>ul {
.nav > li li:hover > ul {
left: unset !important;
right: 100% !important;
}
@ -4273,7 +4267,7 @@ ol.breadcrumb {
right: auto;
}
>li {
> li {
padding: 0;
border: 0;
}
@ -4285,11 +4279,11 @@ ol.breadcrumb {
}
.header-bottom {
.nav>li {
.nav > li {
float: none;
}
.nav li>.icon {
.nav li > .icon {
float: left;
transform: rotate(180deg);
}
@ -4390,7 +4384,10 @@ ol.breadcrumb {
}
@media only screen and (max-width: 720px) {
section.product-detail div.layouter .form-container div.product-image-group {
section.product-detail
div.layouter
.form-container
div.product-image-group {
margin-right: 0px;
margin-left: 0px;
}
@ -4564,7 +4561,6 @@ ol.breadcrumb {
.order-description,
.address {
.pull-left,
.billing-address {
float: right !important;
@ -4686,7 +4682,7 @@ ol.breadcrumb {
}
.menubar {
>li {
> li {
margin-right: 0%;
}
}
@ -4697,7 +4693,13 @@ ol.breadcrumb {
/**
* Footer start.
*/
.footer .footer-content .footer-list-container .list-container .list-group li span.icon {
.footer
.footer-content
.footer-list-container
.list-container
.list-group
li
span.icon {
margin-left: 5px;
margin-right: 0px;
}
@ -4742,6 +4744,16 @@ ol.breadcrumb {
left: 0;
right: 476px !important;
}
.control-group {
&.date,
&.datetime {
&::after {
margin-right: -34px;
right: 100%;
}
}
}
}
/**
@ -4905,16 +4917,16 @@ body {
margin-top: 0px;
}
.desc>p {
.desc > p {
margin-top: 0px;
}
.comparison-component>h1 {
.comparison-component > h1 {
display: inline-block;
}
@media only screen and (max-width: 372px) {
.comparison-component>h1 {
.comparison-component > h1 {
line-height: 30px;
}
}
@ -4926,7 +4938,7 @@ body {
background-color: black;
}
.action>div {
.action > div {
display: inline-block;
}
@ -4957,9 +4969,9 @@ body {
}
.icon-position {
margin-left: -30px;
cursor: pointer;
margin-left: -30px;
cursor: pointer;
vertical-align: sub;
position: absolute;
margin-top: 15px;
}
}

View File

@ -104,8 +104,8 @@ return [
'confirm-remove-all' => 'Are you sure you want to delete all compare items?',
'already_added' => 'تمت إضافة العنصر بالفعل لمقارنة القائمة',
'empty-text' => 'ليس لديك أي عناصر في قائمة المقارنة الخاصة بك',
'product_image' => 'Product Image',
'actions' => 'Actions',
'product_image' => 'صورة المنتج',
'actions' => 'أجراءات',
],
'signup-text' => [
@ -350,7 +350,7 @@ return [
'page-title' => 'العملاء - قائمة الامنيات',
'title' => 'قائمة الأمنيات',
'deleteall' => 'احذف الكل',
'confirm-delete-all' => 'Are you sure you want to delete all wishlist?',
'confirm-delete-all' => 'هل أنت متأكد أنك تريد حذف كل قائمة الرغبات?',
'moveall' => 'نقل الكل إلى عربة التوسق',
'move-to-cart' => 'نقل إلى عربة التسوق',
'error' => 'لا يمكن إضافة المنتج إلى قائمة الأمنيات ، الرجاء المحاولة لاحقا',
@ -368,20 +368,20 @@ return [
'remove-fail' => 'لا يمكن حذف العنصر من قائمة الأماني ، الرجاء المحاولة لاحقا',
'empty' => 'ليس لديك أي عناصر في قائمة الأمنيات',
'remove-all-success' => 'كل الأشياء من قائمة أمانيك قد أزيلت',
'save' => 'Save',
'share' => 'Share',
'share-wishlist' => 'Share Wishlist',
'wishlist-sharing' => 'Wishlist Sharing',
'shared-link' => 'Shared Link',
'copy' => 'Copy',
'visibility' => 'Visibility',
'public' => 'Public',
'private' => 'Private',
'enable' => 'Enable',
'disable' => 'Disable',
'customer-name' => ':name\'s Shared Wishlist',
'enable-wishlist-info' => 'Enable wishlist sharing to get the link.',
'update-message' => 'Shared wishlist settings updated successfully',
'save' => 'يحفظ',
'share' => 'شارك',
'share-wishlist' => 'مشاركة قائمة الرغبات',
'wishlist-sharing' => 'تقاسم قائمة الرغبات',
'shared-link' => 'رابط مشترك',
'copy' => 'ينسخ',
'visibility' => 'الرؤية',
'public' => 'عام',
'private' => 'نشر',
'enable' => 'ممكن',
'disable' => 'إبطال',
'customer-name' => ':name\'س قائمة الرغبات المشتركة',
'enable-wishlist-info' => 'قم بتمكين مشاركة قائمة الرغبات للحصول على الرابط.',
'update-message' => 'تم تحديث إعدادات قائمة الرغبات المشتركة بنجاح',
],
'downloadable_products' => [
@ -396,7 +396,7 @@ return [
'remaining-downloads' => 'التنزيلات المتبقية',
'unlimited' => 'غير محدود',
'download-error' => 'انتهت صلاحية رابط التنزيل.',
'payment-error' => 'Payment has not been done for this download.',
'payment-error' => 'لم يتم السداد لهذا التحميل.',
],
'review' => [
@ -473,9 +473,9 @@ return [
'available-for-order' => 'متوفر لطلب الشراء',
'settings' => 'Settings',
'compare_options' => 'قارن الخيارات',
'wishlist-options' => 'Wishlist Options',
'offers' => 'Buy :qty for :price each and save :discount%',
'tax-inclusive' => 'Inclusive of all taxes',
'wishlist-options' => 'خيارات قائمة الرغبات',
'offers' => 'Buy :qty ل :price كل وحفظ :discount%',
'tax-inclusive' => 'شاملة لجميع الضرائب',
],
// 'reviews' => [
@ -503,6 +503,8 @@ return [
'continue-registration' => 'متابعة التسجيل',
'proceed-to-checkout' => 'انتقل إلى الخروج',
'remove' => 'احذف',
'remove-all-items' => 'قم بإزالة كافة العناصر',
'confirm-action' => 'هل تريد تأكيد هذا الإجراء؟',
'remove-link' => 'احذف',
'move-to-wishlist' => 'انقل إلى قائمة الأمنيات',
'move-to-wishlist-success' => 'نقل العنصر إلى قائمة الأمنيات',
@ -521,8 +523,9 @@ return [
'success' => 'تم بنجاح إضافة العنصر إلى العربة',
'success-remove' => 'تم إزالة العنصر بنجاح من العربة',
'error-add' => 'لا يمكن إضافة العنصر إلى العربة ، رجاء حاول مرة أخرى ',
'inactive' => 'An item is inactive and was removed from cart',
'inactive-add' => 'Inactive item cannot be added to cart',
'success-all-remove' => 'تمت إزالة جميع العناصر بنجاح من سلة التسوق.',
'inactive' => 'عنصر غير نشط وتمت إزالته من سلة التسوق',
'inactive-add' => 'لا يمكن إضافة عنصر غير نشط إلى سلة التسوق',
],
'quantity-error' => 'الكمية المطلوبة غير متوفرة',
'cart-subtotal' => 'المجموع الفرعي للمشتريات',
@ -530,14 +533,14 @@ return [
'partial-cart-update' => 'تم تحديث بعض المنتجات.',
'link-missing' => '',
'event' => [
'expired' => 'This event has been expired.',
'expired' => 'انتهت صلاحية هذا الحدث.',
],
'minimum-order-message' => 'الحد الأدنى لمبلغ الطلب هو :amount',
'suspended-account-message' => 'Your account has been suspended.',
'check-shipping-address' => 'Please check shipping address.',
'check-billing-address' => 'Please check billing address.',
'specify-shipping-method' => 'Please specify shipping method.',
'specify-payment-method' => 'Please specify payment method.',
'suspended-account-message' => 'تم تعليق حسابك.',
'check-shipping-address' => 'يرجى التحقق من عنوان الشحن.',
'check-billing-address' => 'يرجى التحقق من عنوان الفواتير.',
'specify-shipping-method' => 'الرجاء تحديد طريقة الشحن.',
'specify-payment-method' => 'الرجاء تحديد طريقة الدفع.',
],
'onepage' => [
@ -680,10 +683,10 @@ return [
'subject' => '#:order_id فاتورة لطلبك',
'summary' => 'موجز الفاتورة',
'reminder' => [
'subject' => 'Invoice reminder',
'your-invoice-is-overdue' => 'Your invoice :invoice is overdue by :time.',
'please-make-your-payment-as-soon-as-possible' => 'Please make your payment as soon as possible.',
'if-you-ve-already-paid-just-disregard-this-email' => 'If you\'ve already paid, just disregard this email.',
'subject' => 'تذكير الفاتورة',
'your-invoice-is-overdue' => 'فاتورتك :invoice فات موعده :time.',
'please-make-your-payment-as-soon-as-possible' => 'يرجى إجراء الدفع في أسرع وقت ممكن.',
'if-you-ve-already-paid-just-disregard-this-email' => 'إذا كنت قد دفعت بالفعل ، فقط تجاهل هذا البريد الإلكتروني.',
],
],

View File

@ -501,6 +501,8 @@ return [
'proceed-to-checkout' => 'Zur Kasse',
'remove' => 'Entfernen',
'remove-link' => 'Entfernen',
'remove-all-items' => 'Remove all items',
'confirm-action' => 'Confirm this action?',
'move-to-wishlist' => 'Zur Wunschliste verschieben',
'move-to-wishlist-success' => 'Artikel wurde erfolgreich auf die Wunschliste verschoben.',
'move-to-wishlist-error' => 'Das Objekt kann nicht auf die Wunschliste verschoben werden. Bitte versuchen Sie es später erneut.',
@ -517,6 +519,7 @@ return [
'error_remove' => 'Keine Artikel aus dem Warenkorb zu entfernen',
'success' => 'Artikel wurde erfolgreich zum Warenkorb hinzugefügt',
'success-remove' => 'Artikel wurde erfolgreich aus dem Warenkorb entfernt',
'success-all-remove' => 'All items is successfully removed from the cart.',
'error-add' => 'Artikel kann nicht zum Warenkorb hinzugefügt werden. Bitte versuchen Sie es später erneut',
'inactive' => 'Ein Artikel ist inaktiv und wurde aus dem Warenkorb entfernt.',
'inactive-add' => 'Ein inaktiver Artikel kann nicht zum Warenkorb hinzugefügt werde.',

Some files were not shown because too many files have changed in this diff Show More