This commit is contained in:
Shubham Mehrotra 2021-04-20 10:31:57 +05:30
commit 1814948811
372 changed files with 14613 additions and 6236 deletions

View File

@ -1,6 +1,6 @@
APP_NAME=Bagisto
APP_ENV=local
APP_VERSION=1.2.0
APP_VERSION=1.3.1
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
@ -67,4 +67,4 @@ LINKEDIN_CALLBACK_URL=https://yourhost.com/customer/social-login/linkedin/callba
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_CALLBACK_URL=https://yourhost.com/customer/social-login/github/callback
GITHUB_CALLBACK_URL=https://yourhost.com/customer/social-login/github/callback

View File

@ -1,6 +1,6 @@
APP_NAME=Laravel
APP_ENV=local
APP_VERSION=1.2.0
APP_VERSION=1.3.1
APP_KEY=base64:G4KY3tUsTaY9ONo1n/QyJvVLQZdJDgbIkSJswFK01HE=
APP_DEBUG=true
APP_URL=http://localhost

View File

@ -1,11 +1,10 @@
**BUGS:**
## Description
<!--- Please mention issue #id and use comma if your PR solves multiple issues -->
<!--- Please describe your changes in detail -->
>Please describe the issue that you solved if its not filed.
## How to test this
<!--- Please describe in detail how to test the changes made in this PR -->
>Otherwise please mention issue #id and use comma if your PR
>solves multiple issues.
**For things other than bugs:**
> Describe that thing in very short line, word limit is 200.
> Otherwise use **issue #id** if the issue was filed as **feature** request.
## Documentation
- [ ] My pull request requires a update on the documentation repository.
<!--- Please describe in detail what needs to be changed --->

View File

@ -4,8 +4,12 @@ on: [push, pull_request]
jobs:
tests:
name: Run tests
runs-on: ubuntu-latest
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest]
php-versions: ['7.3', '7.4', '8.0']
name: PHP ${{ matrix.php-versions }} test on ${{ matrix.operating-system }}
services:
mysql:
@ -23,13 +27,13 @@ jobs:
- name: Checkout
uses: actions/checkout@v2
- name: Setup php
uses: shivammathur/setup-php@v1
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.3'
extensions: intl, curl, mbstring, openssl, pdo, pdo_mysql, tokenizer
php-version: ${{ matrix.php-versions }}
extensions: curl, gd, intl, mbstring, openssl, pdo, pdo_mysql, tokenizer, zip
- name: Set environment
- name: Set Environment
run: |
set -e
sed -i "s|^\(DB_HOST=\s*\).*$|\1127.0.0.1|" .env.testing
@ -37,24 +41,33 @@ jobs:
printf "the complete .env.testing ...\n\n"
cat .env.testing
- name: Composer install
- name: Composer Install
run: |
set -e
composer install --no-interaction --ansi --no-progress --no-suggest --optimize-autoloader
composer install --no-cache
- name: Migrate database
- name: Migrate Database
run: set -e && php artisan migrate --env=testing
- name: Execute unit tests
- name: Seed Database
run: set -e && php artisan db:seed --env=testing
- name: Vendor Publish
run: set -e && php artisan vendor:publish --all --force --env=testing
- name: Optimize Stuffs
run: set -e && php artisan optimize --env=testing
- name: Execute Unit Tests
run: set -e && vendor/bin/codecept run unit
- name: Execute functional tests
- name: Execute Functional Tests
run: set -e && vendor/bin/codecept run functional
- name: Execute trigger tests
- name: Execute Trigger Tests
run: set -e && vendor/bin/codecept run trigger
- name: Persist test artifacts
- name: Persist Test Artifacts
uses: actions/upload-artifact@v1
if: always()
with:

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,17 @@
# CHANGELOG for v0.2.x
#### This changelog consists the bug & security fixes and new features being included in the releases listed below.
This changelog consists the bug & security fixes and new features being included in the releases listed below.
## **v0.2.0 (23th of December, 2019)** - *Release*
* #1955 [fixed] - Message need to be changed on mouse hover on cross symbol next to applied coupon.
* #1959 [fixed] - if admin has set the same condition twice, then catalog rule is not getting apply
* #1958 [fixed] - getting exception on front end, if action type is Buy x get y free in non couponable cart rule.
* #1957 [fixed] - if action type is Fixed Amount to Whole Cart, then apply to shipping option should get hide.
* #1955 [fixed] - Message need to be changed on mouse hover on cross symbol next to applied coupon.
* #1954 [fixed] - If any different tax category has been assigned to variants in configurable product, then while using tax category condition in cart rule, rule is not working properly.
* #1950 [fixed] - multiple catalog rule should not get get applied, if 1st one has been created as End Other Rules = yes
* #1950 [fixed] - multiple catalog rule should not get get applied, if 1st one has been created as End Other Rules = yes

File diff suppressed because it is too large Load Diff

View File

@ -157,4 +157,14 @@ Thank you to all our backers! 🙏
Support this project by becoming a sponsor. Your logo will show up here with a link to your website.
<a href="https://opencollective.com/bagisto/contribute/sponsor-7372/checkout" target="_blank"><img src="https://images.opencollective.com/static/images/become_sponsor.svg"></a>
<div>
<a href="https://opencollective.com/bagisto/contribute/sponsor-7372/checkout" target="_blank">
<img src="https://images.opencollective.com/static/images/become_sponsor.svg">
</a>
</div>
<kbd>
<a href="http://e.ventures/" target="_blank">
<img src="https://images.opencollective.com/e-ventures1/7d61db2/logo.png" height="75">
</a>
</kbd>

View File

@ -3,6 +3,8 @@
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
@ -13,8 +15,8 @@ class EventServiceProvider extends ServiceProvider
* @var array
*/
// protected $listen = [
// 'App\Events\Event' => [
// 'App\Listeners\EventListener',
// Registered::class => [
// SendEmailVerificationNotification::class,
// ],
// ];
@ -26,7 +28,5 @@ class EventServiceProvider extends ServiceProvider
public function boot()
{
parent::boot();
//
}
}
}

View File

@ -14,7 +14,7 @@ class RouteServiceProvider extends ServiceProvider
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
// protected $namespace = 'App\Http\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
@ -36,8 +36,6 @@ class RouteServiceProvider extends ServiceProvider
$this->mapApiRoutes();
$this->mapWebRoutes();
//
}
/**

View File

@ -8,52 +8,47 @@
"license": "MIT",
"type": "project",
"require": {
"php": "^7.2.5",
"ext-curl": "*",
"ext-intl": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"ext-pdo": "*",
"ext-pdo_mysql": "*",
"ext-tokenizer": "*",
"php": "^7.3|^8.0",
"algolia/algoliasearch-client-php": "^2.2",
"astrotomic/laravel-translatable": "^11.0.0",
"aws/aws-sdk-php": "^3.171",
"babenkoivan/elastic-scout-driver": "^1.1",
"bagisto/bagisto-package-generator": "9999999-dev",
"bagistobrasil/bagisto-product-social-share": "^0.1.2",
"barryvdh/laravel-debugbar": "^3.1",
"barryvdh/laravel-dompdf": "0.8.6",
"doctrine/dbal": "2.9.2",
"barryvdh/laravel-dompdf": "^0.8",
"doctrine/dbal": "^2.9",
"enshrined/svg-sanitize": "^0.14.0",
"facade/ignition": "^2.3.6",
"fakerphp/faker": "^1.14",
"fideloper/proxy": "^4.2",
"flynsarmy/db-blade-compiler": "^5.5",
"fzaninotto/faker": "^1.4",
"guzzlehttp/guzzle": "~6.3",
"guzzlehttp/guzzle": "^7.0.1",
"intervention/image": "^2.4",
"intervention/imagecache": "^2.3",
"kalnoy/nestedset": "5.0.1",
"khaled.alshamaa/ar-php": "^5.5.2",
"kalnoy/nestedset": "^5.0",
"khaled.alshamaa/ar-php": "^6.0.0",
"konekt/concord": "^1.2",
"laravel/framework": "^7.0",
"laravel/framework": "^8.0",
"laravel/legacy-factories": "^1.1",
"laravel/scout": "^8.0",
"laravel/socialite": "^4.4",
"laravel/socialite": "^5.0",
"laravel/tinker": "^2.0",
"laravel/ui": "^2.0",
"laravel/ui": "^3.0",
"maatwebsite/excel": "^3.1.26",
"paypal/paypal-checkout-sdk": "1.0.1",
"prettus/l5-repository": "^2.6",
"tymon/jwt-auth": "^1.0.0"
},
"require-dev": {
"codeception/codeception": "4.1.1",
"codeception/codeception": "^4.1",
"codeception/module-asserts": "^1.1",
"codeception/module-filesystem": "^1.0",
"codeception/module-laravel5": "^1.0",
"codeception/module-webdriver": "^1.0",
"filp/whoops": "^2.0",
"mockery/mockery": "^1.3.1",
"nunomaduro/collision": "^4.1",
"phpunit/phpunit": "^8.5"
"nunomaduro/collision": "^5.3",
"phpunit/phpunit": "^9.5"
},
"replace": {
"bagisto/laravel-user": "v0.1.0",
@ -77,40 +72,38 @@
"bagisto/laravel-discount": "v0.1.0"
},
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/",
"Webkul\\User\\": "packages/Webkul/User/src",
"Webkul\\Admin\\": "packages/Webkul/Admin/src",
"Webkul\\Ui\\": "packages/Webkul/Ui/src",
"Webkul\\Category\\": "packages/Webkul/Category/src",
"Webkul\\Checkout\\": "packages/Webkul/Checkout/src",
"Webkul\\Attribute\\": "packages/Webkul/Attribute/src",
"Webkul\\Shop\\": "packages/Webkul/Shop/src",
"Webkul\\Core\\": "packages/Webkul/Core/src",
"Webkul\\Customer\\": "packages/Webkul/Customer/src",
"Webkul\\Inventory\\": "packages/Webkul/Inventory/src",
"Webkul\\Product\\": "packages/Webkul/Product/src",
"Webkul\\Theme\\": "packages/Webkul/Theme/src",
"Webkul\\Shipping\\": "packages/Webkul/Shipping/src",
"Webkul\\Payment\\": "packages/Webkul/Payment/src",
"Webkul\\Paypal\\": "packages/Webkul/Paypal/src",
"Webkul\\Sales\\": "packages/Webkul/Sales/src",
"Webkul\\Tax\\": "packages/Webkul/Tax/src",
"Webkul\\API\\": "packages/Webkul/API",
"Webkul\\CatalogRule\\": "packages/Webkul/CatalogRule/src",
"Webkul\\CartRule\\": "packages/Webkul/CartRule/src",
"Webkul\\Rule\\": "packages/Webkul/Rule/src",
"Webkul\\CMS\\": "packages/Webkul/CMS/src",
"Webkul\\Velocity\\": "packages/Webkul/Velocity/src",
"Webkul\\BookingProduct\\": "packages/Webkul/BookingProduct/src",
"Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src",
"Webkul\\DebugBar\\": "packages/Webkul/DebugBar/src",
"Webkul\\Marketing\\": "packages/Webkul/Marketing/src"
}
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/",
"Webkul\\User\\": "packages/Webkul/User/src",
"Webkul\\Admin\\": "packages/Webkul/Admin/src",
"Webkul\\Ui\\": "packages/Webkul/Ui/src",
"Webkul\\Category\\": "packages/Webkul/Category/src",
"Webkul\\Checkout\\": "packages/Webkul/Checkout/src",
"Webkul\\Attribute\\": "packages/Webkul/Attribute/src",
"Webkul\\Shop\\": "packages/Webkul/Shop/src",
"Webkul\\Core\\": "packages/Webkul/Core/src",
"Webkul\\Customer\\": "packages/Webkul/Customer/src",
"Webkul\\Inventory\\": "packages/Webkul/Inventory/src",
"Webkul\\Product\\": "packages/Webkul/Product/src",
"Webkul\\Theme\\": "packages/Webkul/Theme/src",
"Webkul\\Shipping\\": "packages/Webkul/Shipping/src",
"Webkul\\Payment\\": "packages/Webkul/Payment/src",
"Webkul\\Paypal\\": "packages/Webkul/Paypal/src",
"Webkul\\Sales\\": "packages/Webkul/Sales/src",
"Webkul\\Tax\\": "packages/Webkul/Tax/src",
"Webkul\\API\\": "packages/Webkul/API",
"Webkul\\CatalogRule\\": "packages/Webkul/CatalogRule/src",
"Webkul\\CartRule\\": "packages/Webkul/CartRule/src",
"Webkul\\Rule\\": "packages/Webkul/Rule/src",
"Webkul\\CMS\\": "packages/Webkul/CMS/src",
"Webkul\\Velocity\\": "packages/Webkul/Velocity/src",
"Webkul\\BookingProduct\\": "packages/Webkul/BookingProduct/src",
"Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src",
"Webkul\\DebugBar\\": "packages/Webkul/DebugBar/src",
"Webkul\\Marketing\\": "packages/Webkul/Marketing/src"
}
},
"autoload-dev": {
"psr-4": {
@ -161,4 +154,4 @@
},
"minimum-stability": "dev",
"prefer-stable": true
}
}

2710
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -28,7 +28,7 @@ return [
],
'admin-api' => [
'driver' => 'token',
'driver' => 'jwt',
'provider' => 'admins',
]
],

View File

@ -69,20 +69,8 @@ return [
],
'redis' => [
'client' => 'predis',
'clusters' => [
'default' => [
[
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
],
'driver' => 'redis',
'connection' => env('CACHE_CONNECTION', 'cache'),
],
],

View File

@ -1,5 +1,7 @@
<?php
use Illuminate\Support\Str;
return [
/*
@ -112,7 +114,21 @@ return [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'database' => env('REDIS_DEFAULT_DATABASE', '0'),
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DATABASE', '1'),
],
'session' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_SESSION_DATABASE', '2'),
],
],

50
config/flare.php Normal file
View File

@ -0,0 +1,50 @@
<?php
return [
/*
|
|--------------------------------------------------------------------------
| Flare API key
|--------------------------------------------------------------------------
|
| Specify Flare's API key below to enable error reporting to the service.
|
| More info: https://flareapp.io/docs/general/projects
|
*/
'key' => env('FLARE_KEY'),
/*
|--------------------------------------------------------------------------
| Reporting Options
|--------------------------------------------------------------------------
|
| These options determine which information will be transmitted to Flare.
|
*/
'reporting' => [
'anonymize_ips' => true,
'collect_git_information' => false,
'report_queries' => true,
'maximum_number_of_collected_queries' => 200,
'report_query_bindings' => true,
'report_view_data' => true,
'grouping_type' => null,
'report_logs' => true,
'maximum_number_of_collected_logs' => 200,
],
/*
|--------------------------------------------------------------------------
| Reporting Log statements
|--------------------------------------------------------------------------
|
| If this setting is `false` log statements won't be send as events to Flare,
| no matter which error level you specified in the Flare log channel.
|
*/
'send_logs_as_events' => true,
];

125
config/ignition.php Normal file
View File

@ -0,0 +1,125 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Editor
|--------------------------------------------------------------------------
|
| Choose your preferred editor to use when clicking any edit button.
|
| Supported: "phpstorm", "vscode", "vscode-insiders",
| "sublime", "atom", "nova"
|
*/
'editor' => env('IGNITION_EDITOR', 'phpstorm'),
/*
|--------------------------------------------------------------------------
| Theme
|--------------------------------------------------------------------------
|
| Here you may specify which theme Ignition should use.
|
| Supported: "light", "dark", "auto"
|
*/
'theme' => env('IGNITION_THEME', 'light'),
/*
|--------------------------------------------------------------------------
| Sharing
|--------------------------------------------------------------------------
|
| You can share local errors with colleagues or others around the world.
| Sharing is completely free and doesn't require an account on Flare.
|
| If necessary, you can completely disable sharing below.
|
*/
'enable_share_button' => env('IGNITION_SHARING_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Register Ignition commands
|--------------------------------------------------------------------------
|
| Ignition comes with an additional make command that lets you create
| new solution classes more easily. To keep your default Laravel
| installation clean, this command is not registered by default.
|
| You can enable the command registration below.
|
*/
'register_commands' => env('REGISTER_IGNITION_COMMANDS', false),
/*
|--------------------------------------------------------------------------
| Ignored Solution Providers
|--------------------------------------------------------------------------
|
| You may specify a list of solution providers (as fully qualified class
| names) that shouldn't be loaded. Ignition will ignore these classes
| and possible solutions provided by them will never be displayed.
|
*/
'ignored_solution_providers' => [
\Facade\Ignition\SolutionProviders\MissingPackageSolutionProvider::class,
],
/*
|--------------------------------------------------------------------------
| Runnable Solutions
|--------------------------------------------------------------------------
|
| Some solutions that Ignition displays are runnable and can perform
| various tasks. Runnable solutions are enabled when your app has
| debug mode enabled. You may also fully disable this feature.
|
*/
'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS', null),
/*
|--------------------------------------------------------------------------
| Remote Path Mapping
|--------------------------------------------------------------------------
|
| If you are using a remote dev server, like Laravel Homestead, Docker, or
| even a remote VPS, it will be necessary to specify your path mapping.
|
| Leaving one, or both of these, empty or null will not trigger the remote
| URL changes and Ignition will treat your editor links as local files.
|
| "remote_sites_path" is an absolute base path for your sites or projects
| in Homestead, Vagrant, Docker, or another remote development server.
|
| Example value: "/home/vagrant/Code"
|
| "local_sites_path" is an absolute base path for your sites or projects
| on your local computer where your IDE or code editor is running on.
|
| Example values: "/Users/<name>/Code", "C:\Users\<name>\Documents\Code"
|
*/
'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', ''),
'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''),
/*
|--------------------------------------------------------------------------
| Housekeeping Endpoint Prefix
|--------------------------------------------------------------------------
|
| Ignition registers a couple of routes when it is enabled. Below you may
| specify a route prefix that will be used to host all internal links.
|
*/
'housekeeping_endpoint_prefix' => '_ignition',
];

View File

@ -70,7 +70,7 @@ return [
|
*/
'connection' => null,
'connection' => env('SESSION_CONNECTION', 'session'),
/*
|--------------------------------------------------------------------------
@ -96,7 +96,7 @@ return [
|
*/
'store' => null,
'store' => env('SESSION_STORE', NULL),
/*
|--------------------------------------------------------------------------

View File

@ -1,5 +1,7 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Webkul\Velocity\Database\Seeders\VelocityMetaDataSeeder;
use Webkul\Admin\Database\Seeders\DatabaseSeeder as BagistoDatabaseSeeder;

View File

@ -31,7 +31,7 @@ class AddressController extends Controller
/**
* Controller instance
*
* @param Webkul\Customer\Repositories\CustomerAddressRepository $customerAddressRepository
* @param CustomerAddressRepository $customerAddressRepository
*/
public function __construct(CustomerAddressRepository $customerAddressRepository)
{
@ -49,12 +49,12 @@ class AddressController extends Controller
/**
* Get user address.
*
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function get()
{
$customer = auth($this->guard)->user();
$addresses = $customer->addresses()->get();
return CustomerAddressResource::collection($addresses);
@ -63,13 +63,14 @@ class AddressController extends Controller
/**
* Store a newly created resource in storage.
*
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
*/
public function store()
{
$customer = auth($this->guard)->user();
if (request()->input('address1') && ! is_array(json_decode(request()->input('address1')))) {
if (request()->input('address1') && ! is_array(request()->input('address1'))) {
return response()->json([
'message' => 'address1 must be an array.',
]);
@ -77,18 +78,20 @@ class AddressController extends Controller
if (request()->input('address1')) {
request()->merge([
'address1' => implode(PHP_EOL, array_filter(json_decode(request()->input('address1')))),
'address1' => implode(PHP_EOL, array_filter(request()->input('address1'))),
'customer_id' => $customer->id,
]);
}
}
$this->validate(request(), [
'address1' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'company' => 'string|nullable',
'vat_id' => 'string|nullable',
'country' => 'string|required',
'state' => 'string|nullable',
'city' => 'string|required',
'postcode' => 'required',
'phone' => 'required',
'phone' => 'required',
]);
$customerAddress = $this->customerAddressRepository->create(request()->all());
@ -101,29 +104,37 @@ class AddressController extends Controller
/**
* Update the specified resource in storage.
*
* @return \Illuminate\Http\Response
* @param int $id
*
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
*/
public function update()
public function update(int $id)
{
$customer = auth($this->guard)->user();
if (request()->input('address1') && ! is_array(request()->input('address1'))) {
return response()->json([
'message' => 'address1 must be an array.',
]);
}
request()->merge(['address1' => implode(PHP_EOL, array_filter(request()->input('address1')))]);
$this->validate(request(), [
'address1' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'company' => 'string|nullable',
'vat_id' => 'string|nullable',
'country' => 'string|required',
'state' => 'string|nullable',
'city' => 'string|required',
'postcode' => 'required',
'phone' => 'required',
'phone' => 'required',
]);
$this->customerAddressRepository->update(request()->all(), request()->input('id'));
$customerAddress = $this->customerAddressRepository->update(request()->all(), $id);
return response()->json([
'message' => 'Your address has been updated successfully.',
'data' => new CustomerAddressResource($this->customerAddressRepository->find(request()->input('id'))),
'data' => new CustomerAddressResource($customerAddress),
]);
}
}

View File

@ -176,7 +176,7 @@ class CheckoutController extends Controller
'status' => ! $status ? false : true,
'message' => ! $status ? trans('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) : 'Success',
'data' => [
'cart' => new CartResource($cart),
'cart' => new CartResource(Cart::getCart()),
]
]);
}

View File

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

View File

@ -2,6 +2,7 @@
namespace Webkul\API\Http\Resources\Catalog;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Resources\Json\JsonResource;
class Category extends JsonResource
@ -15,22 +16,25 @@ class Category extends JsonResource
public function toArray($request)
{
return [
'id' => $this->id,
'code' => $this->code,
'name' => $this->name,
'slug' => $this->slug,
'display_mode' => $this->display_mode,
'description' => $this->description,
'meta_title' => $this->meta_title,
'meta_description' => $this->meta_description,
'meta_keywords' => $this->meta_keywords,
'status' => $this->status,
'image_url' => $this->image_url,
'additional' => is_array($this->resource->additional)
? $this->resource->additional
: json_decode($this->resource->additional, true),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'id' => $this->id,
'code' => $this->code,
'name' => $this->name,
'slug' => $this->slug,
'display_mode' => $this->display_mode,
'description' => $this->description,
'meta_title' => $this->meta_title,
'meta_description' => $this->meta_description,
'meta_keywords' => $this->meta_keywords,
'status' => $this->status,
'image_url' => $this->image_url,
'category_icon_path' => $this->category_icon_path
? Storage::url($this->category_icon_path)
: null,
'additional' => is_array($this->resource->additional)
? $this->resource->additional
: json_decode($this->resource->additional, true),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
}
}

View File

@ -17,6 +17,8 @@ class Product extends JsonResource
$this->productReviewHelper = app('Webkul\Product\Helpers\Review');
$this->wishlistHelper = app('Webkul\Customer\Helpers\Wishlist');
parent::__construct($resource);
}
/**
@ -45,7 +47,8 @@ class Product extends JsonResource
'formated_price' => core()->currency($productTypeInstance->getMinimalPrice()),
'short_description' => $product->short_description,
'description' => $product->description,
'images' => ProductImageFacade::collection($product->images),
'images' => ProductImage::collection($product->images),
'videos' => ProductVideo::collection($product->videos),
'base_image' => ProductImageFacade::getProductBaseImage($product),
'created_at' => $product->created_at,
'updated_at' => $product->updated_at,
@ -61,7 +64,7 @@ class Product extends JsonResource
/* product's checks */
'in_stock' => $product->haveSufficientQuantity(1),
'is_saved' => false,
'is_wishlisted' => $this->wishlistHelper->getWishlistProduct($product),
'is_wishlisted' => $this->wishlistHelper->getWishlistProduct($product) ? true : false,
'is_item_in_cart' => \Cart::hasProduct($product),
'show_quantity_changer' => $this->when(
$product->type !== 'grouped',

View File

@ -0,0 +1,23 @@
<?php
namespace Webkul\API\Http\Resources\Catalog;
use Illuminate\Http\Resources\Json\JsonResource;
class ProductVideo extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'type' => $this->type,
'url' => $this->url
];
}
}

View File

@ -19,6 +19,7 @@ class CustomerAddress extends JsonResource
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'company_name' => $this->company_name,
'vat_id' => $this->vat_id,
'address1' => explode(PHP_EOL, $this->address1),
'country' => $this->country,
'country_name' => core()->country_name($this->country),
@ -26,6 +27,7 @@ class CustomerAddress extends JsonResource
'city' => $this->city,
'postcode' => $this->postcode,
'phone' => $this->phone,
'is_default' => $this->default_address,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];

View File

@ -0,0 +1,28 @@
<?php
namespace Webkul\API\Http\Resources\Sales;
use Illuminate\Http\Resources\Json\JsonResource;
class OrderTransaction extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'transaction_id' => $this->transaction_id,
'status' => $this->status,
'type' => $this->type,
'payment_method' => $this->payment_method,
'data' => $this->data,
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
];
}
}

View File

@ -215,7 +215,7 @@ Route::group(['prefix' => 'api'], function ($router) {
]);
//Invoice routes
//Shipment routes
Route::get('shipments', 'ResourceController@index')->defaults('_config', [
'repository' => 'Webkul\Sales\Repositories\ShipmentRepository',
'resource' => 'Webkul\API\Http\Resources\Sales\Shipment',
@ -228,6 +228,18 @@ Route::group(['prefix' => 'api'], function ($router) {
'authorization_required' => true
]);
//Transaction routes
Route::get('transactions', 'TransactionController@index')->defaults('_config', [
'repository' => 'Webkul\Sales\Repositories\OrderTransactionRepository',
'resource' => 'Webkul\API\Http\Resources\Sales\OrderTransaction',
'authorization_required' => true
]);
Route::get('transactions/{id}', 'TransactionController@get')->defaults('_config', [
'repository' => 'Webkul\Sales\Repositories\OrderTransactionRepository',
'resource' => 'Webkul\API\Http\Resources\Sales\OrderTransaction',
'authorization_required' => true
]);
//Wishlist routes
Route::get('wishlist', 'ResourceController@index')->defaults('_config', [

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=e4c3d46b82083613b407",
"/css/admin.css": "/css/admin.css?id=f2b20e4283a639808ef6"
"/js/admin.js": "/js/admin.js?id=f3d20a6568f3b4473dcc",
"/css/admin.css": "/css/admin.css?id=9f04992b0f1ac9f91e6c"
}

View File

@ -37,6 +37,12 @@ return [
'route' => 'admin.sales.refunds.index',
'sort' => 4,
'icon-class' => '',
], [
'key' => 'sales.transactions',
'name' => 'admin::app.layouts.transactions',
'route' => 'admin.sales.transactions.index',
'sort' => 5,
'icon-class' => '',
], [
'key' => 'catalog',
'name' => 'admin::app.layouts.catalog',

View File

@ -175,7 +175,7 @@ return [
], [
'key' => 'catalog.products.storefront',
'name' => 'admin::app.admin.system.storefront',
'sort' => 2,
'sort' => 3,
'fields' => [
[
'name' => 'mode',
@ -229,10 +229,58 @@ return [
'type' => 'boolean',
]
],
], [
'key' => 'catalog.products.cache-small-image',
'name' => 'admin::app.admin.system.cache-small-image',
'sort' => 4,
'fields' => [
[
'name' => 'width',
'title' => 'admin::app.admin.system.width',
'type' => 'text',
],
[
'name' => 'height',
'title' => 'admin::app.admin.system.height',
'type' => 'text',
]
],
], [
'key' => 'catalog.products.cache-medium-image',
'name' => 'admin::app.admin.system.cache-medium-image',
'sort' => 5,
'fields' => [
[
'name' => 'width',
'title' => 'admin::app.admin.system.width',
'type' => 'text',
],
[
'name' => 'height',
'title' => 'admin::app.admin.system.height',
'type' => 'text',
]
],
], [
'key' => 'catalog.products.cache-large-image',
'name' => 'admin::app.admin.system.cache-large-image',
'sort' => 6,
'fields' => [
[
'name' => 'width',
'title' => 'admin::app.admin.system.width',
'type' => 'text',
],
[
'name' => 'height',
'title' => 'admin::app.admin.system.height',
'type' => 'text',
]
],
], [
'key' => 'catalog.products.review',
'name' => 'admin::app.admin.system.review',
'sort' => 3,
'sort' => 7,
'fields' => [
[
'name' => 'guest_review',
@ -243,7 +291,7 @@ return [
], [
'key' => 'catalog.products.attribute',
'name' => 'admin::app.admin.system.attribute',
'sort' => 4,
'sort' => 8,
'fields' => [
[
'name' => 'image_attribute_upload_size',

View File

@ -49,9 +49,11 @@ class ChannelDataGrid extends DataGrid
public function prepareQueryBuilder()
{
$queryBuilder = $this->channelRepository->query()
->leftJoin('channel_translations', 'channel_translations.channel_id', '=', 'channels.id')
->addSelect('channels.id', 'channels.code', 'channel_translations.locale', 'channel_translations.name as translated_name', 'channels.hostname')
->where('channel_translations.locale', '=', $this->locale);
->leftJoin('channel_translations', function($leftJoin) {
$leftJoin->on('channel_translations.channel_id', '=', 'channels.id')
->where('channel_translations.locale', $this->locale);
})
->addSelect('channels.id', 'channels.code', 'channel_translations.locale', 'channel_translations.name as translated_name', 'channels.hostname');
$this->addFilter('id', 'channels.id');
$this->addFilter('code', 'channels.code');

View File

@ -15,7 +15,7 @@ class CustomerReviewDataGrid extends DataGrid
{
$queryBuilder = DB::table('product_reviews as pr')
->leftjoin('product_flat as pf', 'pr.product_id', '=', 'pf.product_id')
->select('pr.id as product_review_id', 'pr.title', 'pr.comment', 'pf.name as product_name', 'pr.status as product_review_status')
->select('pr.id as product_review_id', 'pr.title', 'pr.comment', 'pf.name as product_name', 'pr.status as product_review_status', 'pr.rating')
->where('channel', core()->getCurrentChannelCode())
->where('locale', app()->getLocale());
@ -55,6 +55,15 @@ class CustomerReviewDataGrid extends DataGrid
'filterable' => true,
]);
$this->addColumn([
'index' => 'rating',
'label' => trans('admin::app.customers.reviews.rating'),
'type' => 'number',
'searchable' => true,
'sortable' => true,
'filterable' => true,
]);
$this->addColumn([
'index' => 'product_name',
'label' => trans('admin::app.datagrid.product-name'),

View File

@ -0,0 +1,76 @@
<?php
namespace Webkul\Admin\DataGrids;
use Illuminate\Support\Facades\DB;
use Webkul\Ui\DataGrid\DataGrid;
class OrderTransactionsDataGrid extends DataGrid
{
protected $index = 'id';
protected $sortOrder = 'desc';
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('order_transactions')
->leftJoin('orders as ors', 'order_transactions.order_id', '=', 'ors.id')
->select('order_transactions.id as id', 'order_transactions.transaction_id as transaction_id', 'ors.increment_id as order_id', 'order_transactions.created_at as created_at');
$this->addFilter('id', 'order_transactions.id');
$this->addFilter('transaction_id', 'order_transactions.transaction_id');
$this->addFilter('order_id', 'ors.increment_id');
$this->addFilter('created_at', 'order_transactions.created_at');
$this->setQueryBuilder($queryBuilder);
}
public function addColumns()
{
$this->addColumn([
'index' => 'id',
'label' => trans('admin::app.datagrid.id'),
'type' => 'number',
'searchable' => false,
'sortable' => true,
'filterable' => true,
]);
$this->addColumn([
'index' => 'transaction_id',
'label' => trans('admin::app.datagrid.transaction-id'),
'type' => 'string',
'searchable' => false,
'sortable' => true,
'filterable' => true,
]);
$this->addColumn([
'index' => 'order_id',
'label' => trans('admin::app.datagrid.order-id'),
'type' => 'number',
'searchable' => true,
'sortable' => true,
'filterable' => true,
]);
$this->addColumn([
'index' => 'created_at',
'label' => trans('admin::app.datagrid.transaction-date'),
'type' => 'datetime',
'searchable' => true,
'sortable' => true,
'filterable' => true,
]);
}
public function prepareActions()
{
$this->addAction([
'title' => trans('admin::app.datagrid.view'),
'method' => 'GET',
'route' => 'admin.sales.transactions.view',
'icon' => 'icon eye-icon',
]);
}
}

View File

@ -52,7 +52,7 @@ class SliderDataGrid extends DataGrid
->where('ct.locale', app()->getLocale());
if ($this->locale !== 'all') {
$queryBuilder->where('sl.locale', $this->locale);
$queryBuilder->whereRaw("find_in_set(?, sl.locale)", [$this->locale]);
}
if ($this->channel !== 'all') {

View File

@ -0,0 +1,92 @@
<?php
namespace Webkul\Admin\Http\Controllers\Sales;
use Illuminate\Support\Facades\Event;
use Webkul\Admin\Http\Controllers\Controller;
use Webkul\Sales\Repositories\OrderTransactionRepository;
class TransactionController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
protected $_config;
/**
* OrderRepository object
*
* @var \Webkul\Sales\Repositories\OrderTransactionRepository
*/
protected $orderTransactionRepository;
/**
* Create a new controller instance.
*
* @param \Webkul\Sales\Repositories\OrderTransactionRepository $orderTransactionRepository
* @return void
*/
public function __construct(OrderTransactionRepository $orderTransactionRepository)
{
$this->middleware('admin');
$this->_config = request('_config');
$this->orderTransactionRepository = $orderTransactionRepository;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\View\View
*/
public function index()
{
return view($this->_config['view']);
}
/**
* Show the view for the specified resource.
*
* @param int $id
* @return \Illuminate\View\View
*/
public function view($id)
{
$transaction = $this->orderTransactionRepository->findOrFail($id);
$transData = json_decode(json_encode(json_decode($transaction['data'])), true);
$transactionDeatilsData = $this->convertIntoSingleDimArray($transData);
return view($this->_config['view'], compact('transaction', 'transactionDeatilsData'));
}
/**
* Convert Transaction Details Data into single Dim Array.
*
* @param array $data
* @return array
*/
public function convertIntoSingleDimArray($transData) {
static $detailsData = [];
foreach ($transData as $key => $data) {
if (is_array($data)) {
$this->convertIntoSingleDimArray($data);
} else {
$skipAttributes = ['sku', 'name', 'category', 'quantity'];
if (gettype($key) == 'integer' || in_array($key, $skipAttributes)) {
continue;
}
$detailsData[$key] = $data;
}
}
return $detailsData;
}
}

View File

@ -1,52 +0,0 @@
<?php
namespace Webkul\Admin\Http\Middleware;
use Webkul\Core\Repositories\LocaleRepository;
use Closure;
class Locale
{
/**
* @var LocaleRepository
*/
protected $locale;
/**
* @param \Webkul\Core\Repositories\LocaleRepository $locale
*/
public function __construct(LocaleRepository $locale)
{
$this->locale = $locale;
}
/**
* 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->locale->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

@ -1,6 +1,6 @@
<?php
Route::group(['middleware' => ['web', 'admin_locale']], function () {
Route::group(['middleware' => ['web']], function () {
Route::prefix(config('app.admin_url'))->group(function () {
Route::get('/', 'Webkul\Admin\Http\Controllers\Controller@redirectToLogin');
@ -250,6 +250,15 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () {
Route::get('/refunds/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@view')->defaults('_config', [
'view' => 'admin::sales.refunds.view',
])->name('admin.sales.refunds.view');
// Sales Transactions Routes
Route::get('/transactions', 'Webkul\Admin\Http\Controllers\Sales\TransactionController@index')->defaults('_config', [
'view' => 'admin::sales.transactions.index',
])->name('admin.sales.transactions.index');
Route::get('/transactions/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\TransactionController@view')->defaults('_config', [
'view' => 'admin::sales.transactions.view',
])->name('admin.sales.transactions.view');
});
// Catalog Routes

View File

@ -2,191 +2,35 @@
namespace Webkul\Admin\Listeners;
use Illuminate\Support\Facades\Mail;
use Webkul\Admin\Mail\NewAdminNotification;
use Webkul\Admin\Mail\NewOrderNotification;
use Webkul\Admin\Mail\NewRefundNotification;
use Webkul\Admin\Mail\NewInvoiceNotification;
use Webkul\Admin\Mail\CancelOrderNotification;
use Webkul\Admin\Mail\NewShipmentNotification;
use Webkul\Admin\Mail\OrderCommentNotification;
use Webkul\Admin\Mail\CancelOrderAdminNotification;
use Webkul\Admin\Mail\NewInventorySourceNotification;
use Webkul\Admin\Traits\Mails;
use Webkul\Paypal\Payment\SmartButton;
class Order
{
/**
* Send new order Mail to the customer and admin
*
* @param \Webkul\Sales\Contracts\Order $order
* @return void
*/
public function sendNewOrderMail($order)
use Mails;
public function refundOrder($refund)
{
$customerLocale = $this->getLocale($order);
$order = $refund->order;
try {
/* email to customer */
$configKey = 'emails.general.notifications.emails.general.notifications.new-order';
if (core()->getConfigData($configKey)) {
$this->prepareMail($customerLocale, new NewOrderNotification($order));
}
if ($order->payment->method === 'paypal_smart_button') {
/* getting smart button instance */
$smartButton = new SmartButton;
/* email to admin */
$configKey = 'emails.general.notifications.emails.general.notifications.new-admin';
if (core()->getConfigData($configKey)) {
$this->prepareMail(config('app.locale'), new NewAdminNotification($order));
}
} catch (\Exception $e) {
report($e);
/* getting paypal oder id */
$paypalOrderID = $order->payment->additional['orderID'];
/* getting capture id by paypal order id */
$captureID = $smartButton->getCaptureId($paypalOrderID);
/* now refunding order on the basis of capture id and refund data */
$smartButton->refundOrder($captureID, [
'amount' =>
[
'value' => $refund->grand_total,
'currency_code' => $refund->order_currency_code
]
]);
}
}
/**
* Send new invoice mail to the customer
*
* @param \Webkul\Sales\Contracts\Invoice $invoice
* @return void
*/
public function sendNewInvoiceMail($invoice)
{
$customerLocale = $this->getLocale($invoice);
try {
if ($invoice->email_sent) {
return;
}
/* email to customer */
$configKey = 'emails.general.notifications.emails.general.notifications.new-invoice';
if (core()->getConfigData($configKey)) {
$this->prepareMail($customerLocale, new NewInvoiceNotification($invoice));
}
} catch (\Exception $e) {
report($e);
}
}
/**
* Send new refund mail to the customer
*
* @param \Webkul\Sales\Contracts\Refund $refund
* @return void
*/
public function sendNewRefundMail($refund)
{
$customerLocale = $this->getLocale($refund);
try {
/* email to customer */
$configKey = 'emails.general.notifications.emails.general.notifications.new-refund';
if (core()->getConfigData($configKey)) {
$this->prepareMail($customerLocale, new NewRefundNotification($refund));
}
} catch (\Exception $e) {
report($e);
}
}
/**
* Send new shipment mail to the customer
*
* @param \Webkul\Sales\Contracts\Shipment $shipment
* @return void
*/
public function sendNewShipmentMail($shipment)
{
$customerLocale = $this->getLocale($shipment);
try {
if ($shipment->email_sent) {
return;
}
/* email to customer */
$configKey = 'emails.general.notifications.emails.general.notifications.new-shipment';
if (core()->getConfigData($configKey)) {
$this->prepareMail($customerLocale, new NewShipmentNotification($shipment));
}
/* email to admin */
$configKey = 'emails.general.notifications.emails.general.notifications.new-inventory-source';
if (core()->getConfigData($configKey)) {
$this->prepareMail(config('app.locale'), new NewInventorySourceNotification($shipment));
}
} catch (\Exception $e) {
report($e);
}
}
/**
* @param \Webkul\Sales\Contracts\Order $order
* @return void
*/
public function sendCancelOrderMail($order)
{
$customerLocale = $this->getLocale($order);
try {
/* email to customer */
$configKey = 'emails.general.notifications.emails.general.notifications.cancel-order';
if (core()->getConfigData($configKey)) {
$this->prepareMail($customerLocale, new CancelOrderNotification($order));
}
/* email to admin */
$configKey = 'emails.general.notifications.emails.general.notifications.new-admin';
if (core()->getConfigData($configKey)) {
$this->prepareMail(config('app.locale'), new CancelOrderAdminNotification($order));
}
} catch (\Exception $e) {
report($e);
}
}
/**
* @param \Webkul\Sales\Contracts\OrderComment $comment
* @return void
*/
public function sendOrderCommentMail($comment)
{
$customerLocale = $this->getLocale($comment);
if (! $comment->customer_notified) {
return;
}
try {
/* email to customer */
$this->prepareMail($customerLocale, new OrderCommentNotification($comment));
} catch (\Exception $e) {
report($e);
}
}
/**
* Get the locale of the customer if somehow item name changes then the english locale will pe provided.
*
* @param object \Webkul\Sales\Contracts\Order|\Webkul\Sales\Contracts\Invoice|\Webkul\Sales\Contracts\Refund|\Webkul\Sales\Contracts\Shipment|\Webkul\Sales\Contracts\OrderComment
* @return string
*/
private function getLocale($object)
{
if ($object instanceof \Webkul\Sales\Contracts\OrderComment) {
$object = $object->order;
}
$objectFirstItem = $object->items->first();
return isset($objectFirstItem->additional['locale']) ? $objectFirstItem->additional['locale'] : 'en';
}
/**
* Prepare Mail.
* @return void
*/
private function prepareMail($locale, $notification)
{
app()->setLocale($locale);
Mail::queue($notification);
}
}

View File

@ -3,8 +3,6 @@
namespace Webkul\Admin\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\Router;
use Webkul\Admin\Http\Middleware\Locale;
use Webkul\Core\Tree;
class AdminServiceProvider extends ServiceProvider
@ -14,7 +12,7 @@ class AdminServiceProvider extends ServiceProvider
*
* @return void
*/
public function boot(Router $router)
public function boot()
{
$this->loadRoutesFrom(__DIR__ . '/../Http/routes.php');
@ -31,8 +29,6 @@ class AdminServiceProvider extends ServiceProvider
$this->registerACL();
$router->aliasMiddleware('admin_locale', Locale::class);
$this->app->register(EventServiceProvider::class);
}

View File

@ -22,12 +22,14 @@ class EventServiceProvider extends ServiceProvider
Event::listen('sales.shipment.save.after', 'Webkul\Admin\Listeners\Order@sendNewShipmentMail');
Event::listen('sales.order.cancel.after','Webkul\Admin\Listeners\Order@sendCancelOrderMail');
Event::listen('sales.order.cancel.after', 'Webkul\Admin\Listeners\Order@sendCancelOrderMail');
Event::listen('sales.refund.save.after','Webkul\Admin\Listeners\Order@sendNewRefundMail');
Event::listen('sales.refund.save.after', 'Webkul\Admin\Listeners\Order@refundOrder');
Event::listen('sales.order.comment.create.after','Webkul\Admin\Listeners\Order@sendOrderCommentMail');
Event::listen('sales.refund.save.after', 'Webkul\Admin\Listeners\Order@sendNewRefundMail');
Event::listen('core.channel.update.after','Webkul\Admin\Listeners\ChannelSettingsChange@checkForMaintenaceMode');
Event::listen('sales.order.comment.create.after', 'Webkul\Admin\Listeners\Order@sendOrderCommentMail');
Event::listen('core.channel.update.after', 'Webkul\Admin\Listeners\ChannelSettingsChange@checkForMaintenaceMode');
}
}

View File

@ -17,6 +17,7 @@ Vue.use(VeeValidate, {
});
Vue.prototype.$http = axios
Vue.component('nav-slide-button', require('./components/navigation/nav-slide-button').default);
Vue.component('required-if', require('./components/validators/required-if').default);
window.eventBus = new Vue();

View File

@ -0,0 +1,55 @@
<template>
<span class="toggle-aside-nav" @click="toggle">
<i class="icon" :class="iconClass"></i>
</span>
</template>
<style scoped>
.toggle-aside-nav {
position: absolute;
top: 50px;
right: -12px;
}
</style>
<script>
export default {
props: [
'iconClass',
],
methods: {
toggle: function () {
if ($('.aside-nav').is(':visible')) {
this.hide();
} else {
this.show();
}
},
hide: function () {
let self = this;
$('.aside-nav').hide(function () {
$('.content-wrapper').css({
marginLeft: 'unset'
});
$('#nav-expand-button').show();
});
},
show: function () {
let self = this;
$('#nav-expand-button').hide();
$('.aside-nav').show(function () {
$('.content-wrapper').css({
marginLeft: '280px'
});
});
}
}
}
</script>

View File

@ -108,7 +108,7 @@ body {
border-right: 1px solid rgba(162, 162, 162, 0.2);
height: auto;
bottom: 0;
z-index: 2;
z-index: 1;
background-color: $white;
ul.menubar {
@ -341,6 +341,25 @@ body {
}
}
.variant-image {
.image-item {
height: 100px !important;
width: 100px !important;
background-size: 100px 100px !important;
}
.trash-icon {
position: absolute;
cursor: pointer;
margin-top: 25%;
}
}
.btn.add-image {
display: inline-block;
width: auto;
}
.rtl {
.ticket-list {
.control-group {

View File

@ -81,7 +81,8 @@ return [
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'discount' => 'خصم',
'cms' => 'CMS'
'cms' => 'CMS',
'transactions' => 'Transactions'
],
'acl' => [
@ -240,7 +241,9 @@ return [
'view' => 'رأي',
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'تحديث الحالة'
'update-status' => 'تحديث الحالة',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
],
'account' => [
@ -392,6 +395,7 @@ return [
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
'transactions' => 'Transactions'
],
'invoices' => [
@ -468,6 +472,20 @@ return [
'action' => 'عمل',
'view-title' => '#:refund_id إعادة مال',
'invalid-refund-amount-error' => 'يجب ألا يكون المبلغ المسترد صفرًا'
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
@ -844,7 +862,9 @@ return [
'update-success' => 'تم تحديث عنصر المزلق بنجاح',
'update-fail' => 'المنزلق لا يمكن تحديثه',
'delete-success' => 'لا يستطيع حذف الأخير عنصر',
'delete-fail' => 'تم حذف عنصر المزلق بنجاح'
'delete-fail' => 'تم حذف عنصر المزلق بنجاح',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -1462,7 +1482,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -81,6 +81,7 @@ return [
'tax-rates' => 'Steuersätze',
'discount' => 'Rabatt',
'cms' => 'CMS',
'transactions' => 'Transactions'
],
'acl' =>
[
@ -240,6 +241,8 @@ return [
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'Update-Status',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
],
'account' =>
[
@ -388,6 +391,7 @@ return [
'cancel-confirm-msg' => 'Sind Sie sicher, dass Sie diese Bestellung stornieren möchten?',
'refund-btn-title' => 'Rückerstattung',
'refunds' => 'Erstattungen',
'transactions' => 'Transactions'
],
'invoices' =>
[
@ -462,6 +466,20 @@ return [
'view-title' => 'Rückerstattung #:refund_id',
'invalid-refund-amount-error' => 'Der Rückerstattungsbetrag sollte nicht Null sein.',
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
'catalog' =>
[
@ -844,6 +862,8 @@ return [
'update-fail' => 'Slider kann nicht aktualisiert werden',
'delete-success' => 'Der letzte Slider kann nicht gelöscht werden',
'delete-fail' => 'Slider erfolgreich gelöscht',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' =>
[
@ -1438,7 +1458,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
],
],
];

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,8 @@
return [
'save' => 'Guardar',
'copy-of' => 'Copia de ',
'copy-of-slug' => 'copia-de-',
'create' => 'Crear',
'update' => 'Actualizar',
'delete' => 'Borrar',
@ -13,13 +15,12 @@ return [
'attribute' => 'Atributo',
'actions' => 'Acciones',
'id' => 'ID',
'action' => 'acción',
'action' => 'Acción',
'yes' => 'Sí',
'no' => 'No',
'true' => 'Verdadero',
'false' => 'Falso',
'apply' => 'Aplicar',
'action' => 'Acción',
'label' => 'Etiqueta',
'name' => 'Nombre',
'title' => 'Título',
@ -27,7 +28,7 @@ return [
'type' => 'Tipo',
'required' => 'Requerido',
'unique' => 'Único',
'locale-based' => 'Basado en lugar',
'locale-based' => 'Basado en idioma',
'channel-based' => 'Basado en canal',
'status' => 'Estado',
'select-option' => 'Seleccione opción',
@ -42,6 +43,7 @@ return [
],
'layouts' => [
'app-version' => 'Versión : :version',
'my-account' => 'Mi cuenta',
'logout' => 'Desconectar',
'visit-shop' => 'Visitar tienda',
@ -59,10 +61,10 @@ return [
'customers' => 'Clientes',
'groups' => 'Grupos',
'reviews' => 'Opiniones',
'newsletter-subscriptions' => 'Suscripciones a newsletter por correo',
'newsletter-subscriptions' => 'Suscripciones a los Boletines',
'configure' => 'Configurar',
'settings' => 'Ajustes',
'locales' => 'Lugares',
'locales' => 'Idiomas',
'currencies' => 'Monedas',
'exchange-rates' => 'Tasas de cambio',
'inventory-sources' => 'Fuentes de inventario',
@ -73,38 +75,40 @@ return [
'taxes' => 'Impuestos',
'tax-categories' => 'Categorías de impuestos',
'tax-rates' => 'Tasas de impuestos',
'marketing' => 'Marketing',
'marketing' => 'Márketing',
'promotions' => 'Promociones',
'email-marketing' => 'Email Marketing',
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'email-marketing' => 'Email Márketing',
'campaigns' => 'Campañas',
'email-templates' => 'Plantillas de Email',
'events' => 'Eventos',
'discount' => 'Descuento',
'cms' => 'CMS'
'cms' => 'CMS',
'transactions' => 'Transacciones'
],
'acl' => [
'dashboard' => 'Tablero',
'sales' => 'Ventas',
'cancel' => 'Cancel',
'cancel' => 'Cancelar',
'orders' => 'Pedidos',
'shipments' => 'Envíos',
'invoices' => 'Facturas',
'refunds' => 'Refunds',
'refunds' => 'Reembolsos',
'catalog' => 'Catálogo',
'products' => 'Productos',
'copy' => 'Copy',
'copy' => 'Copiar',
'categories' => 'Categorías',
'attributes' => 'Atributos',
'attribute-families' => 'Familias de atributos',
'customers' => 'Clientes',
'addresses' => 'Addresses',
'note' => 'Note',
'addresses' => 'Direcciones',
'note' => 'Nota',
'groups' => 'Grupos',
'reviews' => 'Opiniones',
'newsletter-subscriptions' => 'Suscripciones a newsletter por correo',
'newsletter-subscriptions' => 'Suscripciones a los Boletines',
'configure' => 'Configurar',
'settings' => 'Ajustes',
'locales' => 'Lugares',
'locales' => 'Idiomas',
'currencies' => 'Monedas',
'exchange-rates' => 'Tasas de cambio',
'inventory-sources' => 'Fuentes de inventario',
@ -115,16 +119,21 @@ return [
'taxes' => 'Impuestos',
'tax-categories' => 'Categorías de impuestos',
'tax-rates' => 'Tasas de impuestos',
'view' => 'View',
'view' => 'Vista',
'edit' => 'Editar',
'create' => 'Agregar',
'delete' => 'Borrar',
'mass-delete' => 'Mass Delete',
'mass-update' => 'Mass Update',
'marketing' => 'Marketing',
'mass-delete' => 'Eliminar Masivamente',
'mass-update' => 'Actualizar Masivamente',
'marketing' => 'Márketing',
'promotions' => 'Promociones',
'cart-rules' => 'Reglas del carrito',
'catalog-rules' => 'Reglas del catálogo',
'email-marketing' => 'Email Márketing',
'email-templates' => 'Plantillas de Email',
'campaigns' => 'Campañas',
'subscribers' => 'Suscriptores del Boletín',
'events' => 'Eventos'
],
'dashboard' => [
@ -163,15 +172,16 @@ return [
'code' => 'Código',
'admin-name' => 'Nombre',
'name' => 'Nombre',
'copy' => 'Copiar',
'direction' => 'Dirección',
'fullname' => 'Nombre completo',
'type' => 'Tipo',
'required' => 'Requerido',
'unique' => 'Único',
'per-locale' => 'Lugar ubicado',
'per-locale' => 'Idioma ubicado',
'per-channel' => 'Canal ubicado',
'position' => 'Posición',
'locale' => 'Lugar',
'locale' => 'Idioma',
'hostname' => 'Hostname',
'email' => 'Email',
'group' => 'Grupo',
@ -223,13 +233,14 @@ return [
'end' => 'Fin',
'active' => 'Activo',
'inactive' => 'Inactivo',
'draft' => 'Borrador',
'true' => 'Verdadero',
'false' => 'Falso',
'approved' => 'Aprobado',
'pending' => 'Pendiente',
'disapproved' => 'Rechazado',
'coupon-code' => 'Código de cupón',
'times-used' => 'Times Used',
'times-used' => 'Veces Usados',
'created-date' => 'Creado en',
'expiration-date' => 'Fecha expiración',
'edit' => 'Editar',
@ -237,7 +248,11 @@ return [
'view' => 'Ver',
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'Actualizar Estado'
'update-status' => 'Actualizar Estado',
'subject' => 'Asunto',
'date' => 'Fecha',
'transaction-id' => 'Transacción #',
'transaction-date' => 'Fecha de Transacción',
],
'account' => [
@ -362,12 +377,12 @@ return [
'SKU' => 'SKU',
'product-name' => 'Nombre del producto',
'qty' => 'Cant',
'artículo-status' => 'Estado del articulo',
'artículo-ordered' => 'Pedido (:qty_ordered)',
'artículo-invoice' => 'Facturado (:qty_invoiced)',
'artículo-shipped' => 'Enviado (:qty_shipped)',
'artículo-canceled' => 'Cancelado (:qty_canceled)',
'artículo-refunded' => 'Reembolsado (:qty_refunded)',
'item-status' => 'Estado del articulo',
'item-ordered' => 'Pedido (:qty_ordered)',
'item-invoice' => 'Facturado (:qty_invoiced)',
'item-shipped' => 'Enviado (:qty_shipped)',
'item-canceled' => 'Cancelado (:qty_canceled)',
'item-refunded' => 'Reembolsado (:qty_refunded)',
'price' => 'Precio',
'total' => 'Total',
'subtotal' => 'Subtotal',
@ -376,15 +391,21 @@ return [
'tax' => 'Impuesto',
'tax-percent' => 'Porcentaje impuesto',
'tax-amount' => 'Monto impuesto',
'discount-amount' => 'Monto descuento',
'discount-amount' => 'Monto descuento',
'discount-amount' => 'Monto de Descuento',
'grand-total' => 'Gran total',
'total-paid' => 'Total Pagado',
'total-refunded' => 'Total reembolsado',
'total-due' => 'Total adeudado',
'cancel-confirm-msg' => '¿Está seguro que desea cancelar este pedido?',
'refund-btn-title' => 'El monto del reembolso no debe ser cero',
'refunds' => 'Reembolsos'
'refund-btn-title' => 'Reembolso',
'refunds' => 'Reembolsos',
'comment-added-success' => 'Comentario agregado exitosamente.',
'comment' => 'Comentario',
'submit-comment' => 'Enviar Comentario',
'notify-customer' => 'Notificar al Cliente',
'customer-notified' => ':date | Cliente <b>Notificado</b>',
'customer-not-notified' => ':date | Cliente <b>No Notificado</b>',
'transactions' => 'Transacciones'
],
'invoices' => [
@ -408,7 +429,7 @@ return [
'ship-to' => 'Enviar a',
'print' => 'Imprimir',
'order-date' => 'Fecha del pedido',
'creation-error' => 'La creaciónd e facturas al pedido no está permitida.',
'creation-error' => 'La creación de facturas al pedido no está permitida.',
'product-error' => 'La factura no puede ser creada sin productos.'
],
@ -432,7 +453,7 @@ return [
'qty-available' => 'Cant disponible',
'inventory-source' => 'Fuente de inventario',
'carrier-title' => 'Nombre transportista',
'tracking-number' => 'Número de tracking',
'tracking-number' => 'Número de Seguimiento',
'view-title' => 'Envío #:shipment_id',
'creation-error' => 'El envío no puede ser creado para este pedido.',
'order-error' => 'La creación de envíos no está permitido.',
@ -443,7 +464,7 @@ return [
'title' => 'Reembolsos',
'id' => 'Id',
'add-title' => 'Crear reembolso',
'save-btn-title' => 'El monto del reembolso no debe ser cero',
'save-btn-title' => 'Reembolso',
'order-id' => 'Pedido #',
'qty-ordered' => 'Cant pedido',
'qty-to-refund' => 'Cant a reembolsar',
@ -461,6 +482,20 @@ return [
'view-title' => 'Reembolso #:refund_id',
'invalid-refund-amount-error' => 'El monto del reembolso no debe ser cero.'
],
'transactions' => [
'title' => 'Transacciones',
'id' => 'ID',
'transaction-id' => 'Transacción #',
'payment-method' => 'Método de Pago',
'action' => 'Accción',
'view-title' => 'Transacciónn #:transaction_id',
'transaction-data' => 'Fecha de Transacción',
'order-id' => 'Pedido #',
'status' => 'Estado',
'created-at' => 'Creado En',
'transaction-details' => 'Detalles de la Transacción'
]
],
@ -490,8 +525,6 @@ return [
'price' => 'Precio',
'weight' => 'Peso',
'status' => 'Estado',
'enabled' => 'Habilitado',
'disabled' => 'Deshabilitado',
'add-variant-title' => 'Agregar variante',
'variant-already-exist-message' => 'Una variante con las mismas opciones de atributos ya existe.',
'add-image-btn-title' => 'Agregar imagen',
@ -516,14 +549,13 @@ return [
'browse-file' => 'Buscar archivo',
'product-link' => 'Productos enlazados',
'cross-selling' => 'Venta cruzada',
'up-selling' => 'Up Selling',
'up-selling' => 'Vendiendo',
'related-products' => 'Productos relacionados',
'product-search-hint' => 'Inicie escribiendo un nombre de producto',
'no-result-found' => 'Productos con el mismo nombre no fueron encontrados.',
'searching' => 'Buscaring ...',
'grouped-products' => 'Grouped Productos',
'searching' => 'Buscando ...',
'grouped-products' => 'Productos Agrupados',
'search-products' => 'Buscar Productos',
'no-result-found' => 'Productos con el mismo nombre no fueron encontrados.',
'channel' => 'Canales',
'bundle-item' => 'Paquete de artículos',
'add-option-btn-title' => 'Agregar opción',
@ -536,12 +568,17 @@ return [
'multiselect' => 'Lista de selección múltiple',
'new-option' => 'Nueva opción',
'is-default' => 'Es predeterminada',
'remove-image-btn-title' => 'Remove Image',
'customer-group' => 'Grupo de Clientes',
'add-group-price' => 'Agregar Precio de Grupo de Clientes',
'all-group' => 'Todos los Grupos',
'fixed' => 'Reparado',
'discount' => 'Descuento',
'remove-image-btn-title' => 'Remover Imágen',
'videos' => 'Videos',
'video' => 'Video',
'add-video-btn-title' => 'Add Video',
'remove-video-btn-title' => 'Remove Video',
'not-support-video' => 'Your browser does not support the video tag.',
'add-video-btn-title' => 'Agregar Video',
'remove-video-btn-title' => 'Remover Video',
'not-support-video' => 'Su navegador no soporta la etiqueta video.',
],
'attributes' => [
@ -577,8 +614,7 @@ return [
'status' => 'Estado',
'yes' => 'Sí',
'no' => 'No',
'value_per_locale' => 'Valor por lugar',
'value_per_channel' => 'Valor por canal',
'value_per_locale' => 'Valor por idioma',
'value_per_channel' => 'Valor por canal',
'is_filterable' => 'Usar en navegación por capas',
'is_configurable' => 'Usar para crear producto configurable',
@ -676,9 +712,9 @@ return [
'save-btn-title' => 'Guardar tasa de impuesto',
'general' => 'Tasa de impuesto',
'identifier' => 'Identificador',
'is_zip' => 'Habilitar rango Zip',
'zip_from' => 'Zip desde',
'zip_to' => 'Zip hasta',
'is_zip' => 'Habilitar Rango de Código Postal',
'zip_from' => 'Código Postal Desde',
'zip_to' => 'Código Postal Hasta',
'state' => 'Departamento',
'select-state' => 'Seleccione un departamento.',
'country' => 'País',
@ -687,8 +723,7 @@ return [
'title' => 'Editar tasa de impuesto',
'edit-button-title' => 'Editar tasa'
],
'zip_code' => 'Código Zip',
'is_zip' => 'Habilitar rango Zip',
'zip_code' => 'Código Postal',
],
'sales' => [
@ -704,19 +739,18 @@ return [
'settings' => [
'locales' => [
'title' => 'Lugares',
'add-title' => 'Agregar lugar',
'edit-title' => 'Editar lugar',
'add-title' => 'Agregar lugar',
'save-btn-title' => 'Guardar lugar',
'title' => 'Idiomas',
'add-title' => 'Agregar idioma',
'edit-title' => 'Editar idioma',
'save-btn-title' => 'Guardar idioma',
'general' => 'General',
'code' => 'Código',
'name' => 'Nombre',
'direction' => 'Dirección',
'create-success' => 'Lugar creado con éxito.',
'update-success' => 'Lugar actualizado con éxito.',
'delete-success' => 'Lugar borrado con éxito.',
'last-delete-error' => 'Se requiere al menos un lugar.',
'create-success' => 'Idioma creado con éxito.',
'update-success' => 'Idioma actualizado con éxito.',
'delete-success' => 'Idioma borrado con éxito.',
'last-delete-error' => 'Se requiere al menos un idioma.',
],
'countries' => [
'title' => 'Países',
@ -796,9 +830,9 @@ return [
'name' => 'Nombre',
'description' => 'Descripción',
'hostname' => 'Hostname',
'currencies-and-locales' => 'Monedas y lugares',
'locales' => 'Lugares',
'default-locale' => 'Lugar predeterminado',
'currencies-and-locales' => 'Monedas e Idiomas',
'locales' => 'Idiomas',
'default-locale' => 'Idioma predeterminado',
'currencies' => 'Monedas',
'base-currency' => 'Moneda predeterminada',
'root-category' => 'Categoría raíz',
@ -817,9 +851,9 @@ return [
'seo-title' => 'Meta title',
'seo-description' => 'Meta description',
'seo-keywords' => 'Meta keywords',
'maintenance-mode' => 'Maintenance Mode',
'maintenance-mode-text' => 'Message',
'allowed-ips' => 'Allowed IPs'
'maintenance-mode' => 'Modo de Mantenimiento',
'maintenance-mode-text' => 'Mensaje',
'allowed-ips' => 'IP Permitidas'
],
'sliders' => [
@ -837,7 +871,9 @@ return [
'update-success' => 'Slider actualizado con éxito',
'update-fail' => 'El slider no pudo ser actualizado',
'delete-success' => 'No puede borrar el último slider',
'delete-fail' => 'Slider borrado con éxito'
'delete-fail' => 'Slider borrado con éxito',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -870,9 +906,9 @@ return [
'save-btn-title' => 'Guardar tasa de impuesto',
'general' => 'Tasa de impuesto',
'identifier' => 'Identificador',
'is_zip' => 'Habilitar rango Zip',
'zip_from' => 'Zip desde',
'zip_to' => 'Zip hasta',
'is_zip' => 'Habilitar Rango de Código Postal',
'zip_from' => 'Código Postal Desde',
'zip_to' => 'Código Postal Hasta',
'state' => 'Departamento',
'select-state' => 'Seleccione un departamento.',
'country' => 'País',
@ -881,8 +917,7 @@ return [
'title' => 'Editar tasa de impuesto',
'edit-button-title' => 'Editar tasa'
],
'zip_code' => 'Código Zip',
'is_zip' => 'Habilitar rango Zip',
'zip_code' => 'Código Postal',
'create-success' => 'Tasa de impuesto creada con éxito',
'create-error' => 'No se puede crear la tasa de impuesto',
'update-success' => 'Tasa de impuesto actualizada con éxito',
@ -917,6 +952,7 @@ return [
'address-list' => 'Lista de direcciones',
'order-list' => 'Lista de pedidos',
'address-id' => 'Dirección ID',
'company-name' => 'Nombre de la Empresa',
'address-1' => 'Dirección 1',
'city' => 'Ciudad',
'state-name' => 'Departamento',
@ -954,6 +990,7 @@ return [
'gender' => 'Género',
'email' => 'Email',
'date_of_birth' => 'Fecha de nacimiento',
'date_of_birth_placeholder' => 'aaaa-mm-dd',
'phone' => 'Teléfono',
'customer_group' => 'Grupo',
'save-btn-title' => 'Guardar cliente',
@ -964,7 +1001,6 @@ return [
'other' => 'Otro',
'male' => 'Masculino',
'female' => 'Femenino',
'phone' => 'Teléfono',
'group-default' => 'No puede borrar el grupo predeterminado.',
'edit-help-title' => 'Editar cliente',
'delete-help-title' => 'Borrar cliente',
@ -988,8 +1024,8 @@ return [
],
'subscribers' => [
'title' => 'Suscriptores',
'title-edit' => 'Editar suscriptor',
'title' => 'Suscriptores del Boletín',
'title-edit' => 'Editar Suscriptor del Boletín',
'email' => 'Email',
'is_subscribed' => 'Suscrito',
'edit-btn-title' => 'Actualizar suscriptor',
@ -1034,11 +1070,12 @@ return [
'choose-condition-to-add' => 'Elija una condición para agregar',
'cart-attribute' => 'Atributo de carrito',
'subtotal' => 'Subtotal',
'additional' => 'Información Adicional',
'total-item-qty' => 'Cant total artículos',
'total-weight' => 'Peso total',
'payment-method' => 'Método de pago',
'shipping-method' => 'Método de envío',
'shipping-postcode' => 'Código postal/Zip de envío',
'shipping-postcode' => 'Código Postal de envío',
'shipping-state' => 'Departamento de envío',
'shipping-country' => 'País de envío',
'cart-item-attribute' => 'Atributo del artículo del carrito',
@ -1137,63 +1174,63 @@ return [
'marketing' => [
'templates' => [
'title' => 'Email Templates',
'add-title' => 'Add Email Template',
'edit-title' => 'Edit Email Template',
'save-btn-title' => 'Save',
'title' => 'Plantilla de Email',
'add-title' => 'Agregar Plantilla de Email',
'edit-title' => 'Editar Plantilla de Email',
'save-btn-title' => 'Guardar',
'general' => 'General',
'name' => 'Name',
'status' => 'Status',
'active' => 'Active',
'inactive' => 'Inactive',
'draft' => 'Draft',
'content' => 'Content',
'create-success' => 'Email template created successfully.',
'update-success' => 'Email template updated successfully.',
'delete-success' => 'Email template deleted successfully',
'name' => 'Nombre',
'status' => 'Estado',
'active' => 'Activo',
'inactive' => 'Inactivo',
'draft' => 'Borrador',
'content' => 'Contenido',
'create-success' => 'Plantilla de Email creada correctamente.',
'update-success' => 'Plantilla de Email actualizada correctamente.',
'delete-success' => 'Plantilla de Email eliminada correctamente.',
],
'campaigns' => [
'title' => 'Campaigns',
'add-title' => 'Add Campaign',
'edit-title' => 'Edit Campaign',
'save-btn-title' => 'Save',
'title' => 'Campañas',
'add-title' => 'Agregar Campaña',
'edit-title' => 'Editar Campaña',
'save-btn-title' => 'Guardar',
'general' => 'General',
'name' => 'Name',
'status' => 'Status',
'active' => 'Active',
'inactive' => 'Inactive',
'subject' => 'Subject',
'email-template' => 'Email Template',
'audience' => 'Audience',
'channel' => 'Channel',
'customer-group' => 'Customer Group',
'schedule' => 'Schedule',
'schedule-type' => 'Schedule Type',
'once' => 'Once',
'events' => 'Events',
'schedule-date' => 'Schedule Date',
'name' => 'Nombre',
'status' => 'Estado',
'active' => 'Activo',
'inactive' => 'Inactivo',
'subject' => 'Asunto',
'email-template' => 'Plantilla de Email',
'audience' => 'Audiencia',
'channel' => 'Canal',
'customer-group' => 'Grupo de Clientes',
'schedule' => 'Programación',
'schedule-type' => 'Tipo de Programación',
'once' => 'Una vez',
'events' => 'Eventos',
'schedule-date' => 'Fecha Programada',
'spooling' => 'Spooling',
'event' => 'Event',
'birthday' => 'Birthday',
'create-success' => 'Campaign created successfully.',
'update-success' => 'Campaign updated successfully.',
'delete-success' => 'Campaign deleted successfully',
'event' => 'Evento',
'birthday' => 'Cumpleaños',
'create-success' => 'Campaña creada correctamente.',
'update-success' => 'Campaña actualizada correctamente.',
'delete-success' => 'Campaña eliminada correctamente.',
],
'events' => [
'title' => 'Events',
'add-title' => 'Add Event',
'edit-title' => 'Edit Event',
'save-btn-title' => 'Save',
'title' => 'Eventos',
'add-title' => 'Agregar Evento',
'edit-title' => 'Editar Evento',
'save-btn-title' => 'Guardar',
'general' => 'General',
'name' => 'Name',
'description' => 'Description',
'date' => 'Date',
'create-success' => 'Event created successfully.',
'update-success' => 'Event updated successfully.',
'delete-success' => 'Event deleted successfully.',
'edit-error' => 'Can not edit this event.'
'name' => 'Nombre',
'description' => 'Descripción',
'date' => 'Fecha',
'create-success' => 'Evento creado con éxito.',
'update-success' => 'Evento actualizado con éxito.',
'delete-success' => 'Evento borrado con éxito.',
'edit-error' => 'No se puede editar este evento.'
]
],
@ -1256,7 +1293,7 @@ return [
'content' => 'Contenido',
'url-key' => 'URL clave',
'channel' => 'Canales',
'locale' => 'Lugares',
'locale' => 'Idiomas',
'create-btn-title' => 'Guardar página',
'edit-title' => 'Editar Page',
'edit-btn-title' => 'Guardar página',
@ -1267,9 +1304,9 @@ return [
'update-failure' => 'La página no pudo ser actualizada',
'page-title' => 'Título de la página',
'layout' => 'Diseño',
'meta_keywords' => 'Meta Keywords',
'meta_description' => 'Meta Description',
'meta_title' => 'Meta Title',
'meta_keywords' => 'Meta Palabras Claves',
'meta_description' => 'Meta Descripción',
'meta_title' => 'Meta Título',
'delete-success' => 'Página CMS borrada con éxito',
'delete-failure' => 'Página CMS no pudo ser borrada',
'preview' => 'Previsualización',
@ -1282,6 +1319,9 @@ return [
'response' => [
'being-used' => 'Este recurso: :name está siendo usado en :source',
'product-copied' => 'El Producto ha sido copiado',
'error-while-copying' => 'Se produjo un error al intentar copiar el producto',
'product-can-not-be-copied' => 'Productos del tipo :type no se pueden copiar',
'cannot-delete-default' => 'No puede borrar el canal predeterminado',
'create-success' => ':name :name creado con éxito.',
'update-success' => ':name actualizado con éxito.',
@ -1326,14 +1366,17 @@ return [
],
'system' => [
'catalog' => 'Catálogo',
'homepage' => 'Homepage configuration',
'allow-no-of-new-product-homepage' => 'Allowed No of New Product in Homepage',
'allow-no-of-featured-product-homepage' => 'Allowed No of Featured Product in Homepage',
'allow-out-of-stock-items' => 'Allow out of stock items',
'homepage' => 'Configuración de Página de Inicio',
'allow-no-of-new-product-homepage' => 'No permitido Nuevo Producto en la Página de Inicio',
'allow-no-of-featured-product-homepage' => 'No Permitido Producto Destacado en Página de Inicio',
'allow-out-of-stock-items' => 'Permitir Artículos Agotados',
'products' => 'Productos',
'guest-checkout' => 'Compras como invitado',
'allow-guest-checkout' => 'Permitir compras como invitado',
'allow-guest-checkout-hint' => 'Aviso: Si eligió permitir, esta opción puede ser configurada específicamente para cada producto.',
'attribute' => 'Atributo',
'image-upload-size' => 'Tamaño de Carga de Imagen Permitido (en Kb)',
'file-upload-size' => 'Tamaño de Carga de Archivo Permitido (en Kb)',
'review' => 'Opiniones',
'allow-guest-review' => 'Permitir opiniones como invitado',
'inventory' => 'Inventario',
@ -1351,7 +1394,7 @@ return [
'origin' => 'Origen',
'country' => 'País',
'state' => 'Departamento',
'zip' => 'Zip',
'zip' => 'Código Postal',
'city' => 'Ciudad',
'street-address' => 'Dirección',
'title' => 'Título',
@ -1365,11 +1408,11 @@ return [
'money-transfer' => 'Transferencia',
'paypal-standard' => 'PayPal',
'business-account' => 'Cuenta de negocio',
'newsletter' => 'Suscripción a newsletter',
'newsletter-subscription' => 'Permitir suscripciones a newsletter',
'newsletter' => 'Boletín de Suscripción',
'newsletter-subscription' => 'Permitir Suscripciones al Boletín',
'email' => 'Verificación de email',
'email-verification' => 'Permitir verificación de email',
'sort_order' => 'Orden de clasificación',
'sort_order' => 'Orden de Clasificación',
'general' => 'General',
'footer' => 'Pie de página',
'content' => 'Contenido',
@ -1394,31 +1437,64 @@ return [
'order-number-prefix' => 'Prefijo para Pedido #',
'order-number-length' => 'Largo para Pedido #',
'order-number-suffix' => 'Sufijo para Pedido #',
'minimum-order' => 'Minimum Order Settings',
'minimum-order-amount' => 'Minimum Order Amount',
'order-number-generator-class' => 'Generado de Números de Pedido',
'minimum-order' => 'Configuración de Pedido Mínimo',
'minimum-order-amount' => 'Cantidad Mínima de Pedido',
'default' => 'Predeterminado',
'sandbox' => 'Sandbox',
'all-channels' => 'Todos',
'all-locales' => 'Todos',
'invoice-slip-design' => 'Diseño parte trasera factura',
'logo' => 'logo',
'all-channels' => 'Todos los Canales',
'all-locales' => 'Todos los Idiomas',
'all-customer-groups' => 'Todos los grupos de Clientes',
'invoice-slip-design' => 'Diseño de Comprobande de Factura',
'logo' => 'Logo',
'storefront' => 'Storefront',
'default-list-mode' => 'Modo de Lista Predeterminado',
'grid' => 'Cuadrícula',
'list' => 'Lista',
'products-per-page' => 'Productos Por Página',
'sort-by' => 'Ordenar Por',
'from-z-a' => 'Desde Z-A',
'from-a-z' => 'Desde A-Z',
'newest-first' => 'Más Nuevos Primero',
'oldest-first' => 'Más Viejos Primero',
'cheapest-first' => 'Más Barato Primero',
'expensive-first' => 'Más Caro Primero',
'comma-seperated' => 'Separado por Comas',
'favicon' => 'Favicon',
'seo' => 'SEO',
'rich-snippets' => 'Fragmentos Enriquecidos',
'enable' => 'Habilitar',
'show-weight' => 'Mostrar Peso',
'show-categories' => 'Mostrar Categorías',
'show-images' => 'Mostrar Imágenes',
'show-reviews' => 'Mostrar Reseñas',
'show-ratings' => 'Mostrar Calificaciones',
'show-offers' => 'Mostrar Ofertas',
'show-sku' => 'Mostrar SKU',
'categories' => 'Categorías',
'show-search-input-field' => 'Mostrar Campo de Entrada de Búsqueda',
'store-name' => 'Nombre de la tienda',
'vat-number' => 'Número de valor agregado',
'contact-number' => 'Número de contacto',
'bank-details' => 'Detalles del banco',
'mailing-address' => 'Send Check to',
'instructions' => 'Instructions',
'custom-scripts' => 'Custom Scripts',
'custom-css' => 'Custom CSS',
'custom-javascript' => 'Custom Javascript',
'mailing-address' => 'Dirección de Envío',
'instructions' => 'Instrucciones',
'custom-scripts' => 'Scripts Personalizados',
'custom-css' => 'CSS Personalizados',
'custom-javascript' => 'Javascript Personalizado',
'paypal-smart-button' => 'PayPal',
'client-id' => 'Client Id',
'client-id-info' => 'Use "sb" for testing.',
'client-secret' => 'Client Secret',
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'client-id' => 'Id del Cliente',
'client-id-info' => 'Utilice "sb" para realizar pruebas.',
'client-secret' => 'Secreto del Cliente',
'client-secret-info' => 'Agrega tu clave secreta aquí',
'accepted-currencies' => 'Monedas aceptadas',
'accepted-currencies-info' => 'Agregue el código de moneda separado por comas, por ej. USD,INR,...',
'buy-now-button-display' => 'Permitir que los clientes compren productos directamente',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -80,7 +80,8 @@ return [
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'discount' => 'تخفیف',
'cms' => 'CMS'
'cms' => 'CMS',
'transactions' => 'Transactions'
],
'acl' => [
@ -238,7 +239,9 @@ return [
'view' => 'چشم انداز',
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'وضعیت به روز رسانی'
'update-status' => 'وضعیت به روز رسانی',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
],
'account' => [
@ -390,6 +393,7 @@ return [
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
'transactions' => 'Transactions'
],
'invoices' => [
@ -466,6 +470,20 @@ return [
'view-title' => ' #:refund_id بازپرداخت',
'invalid-refund-amount-error' => 'مبلغ بازپرداخت باید صفر نباشد.'
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
@ -842,7 +860,9 @@ return [
'update-success' => 'اسلایدر با موفقیت به روز شد',
'update-fail' => 'امکان بروزرسانی اسلایدر وجود ندارد',
'delete-success' => 'آخرین اسلایدر حذف نمی شود',
'delete-fail' => 'اسلایدر با موفقیت حذف شد'
'delete-fail' => 'اسلایدر با موفقیت حذف شد',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -1456,7 +1476,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -80,7 +80,8 @@ return [
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'discount' => 'Sconti',
'cms' => 'CMS'
'cms' => 'CMS',
'transactions' => 'Transactions'
],
'acl' => [
@ -239,7 +240,9 @@ return [
'view' => 'Vedi',
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'Update Stato'
'update-status' => 'Update Stato',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
],
'account' => [
@ -392,7 +395,8 @@ return [
'submit-comment' => 'Invia Commento',
'notify-customer' => 'Notifica Cliente',
'customer-notified' => ':date | Cliente <b>Notificato</b>',
'customer-not-notified' => ':date | Cliente <b>Non Notificato</b>'
'customer-not-notified' => ':date | Cliente <b>Non Notificato</b>',
'transactions' => 'Transactions'
],
'invoices' => [
@ -468,6 +472,20 @@ return [
'view-title' => 'Rimborso #:refund_id',
'invalid-refund-amount-error' => 'La somma rimborsata dovrebbe essere diversa da zero.'
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
@ -846,7 +864,9 @@ return [
'update-success' => 'Slider aggiornato con successo',
'update-fail' => 'Non è stato possibile aggiornare lo Slider',
'delete-success' => 'Non è stato possibile eliminare l\'ultimo slider',
'delete-fail' => 'Slider eliminato con successo'
'delete-fail' => 'Slider eliminato con successo',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -1459,7 +1479,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -80,7 +80,8 @@ return [
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'discount' => 'Korting',
'cms' => 'CMS'
'cms' => 'CMS',
'transactions' => 'Transactions'
],
'acl' => [
@ -391,6 +392,7 @@ return [
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
'transactions' => 'Transactions'
],
'invoices' => [
@ -467,6 +469,20 @@ return [
'view-title' => 'Terugbetaling #:refund_id',
'invalid-refund-amount-error' => 'Het restitutiebedrag mag niet nul zijn.'
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
@ -843,7 +859,9 @@ return [
'update-success' => 'Schuifitem is bijgewerkt',
'update-fail' => 'Schuifregelaar kan niet worden bijgewerkt',
'delete-success' => 'Kan laatste llider-item niet verwijderen',
'delete-fail' => 'Schuifitem is verwijderd'
'delete-fail' => 'Schuifitem is verwijderd',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -1454,7 +1472,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -79,7 +79,8 @@ return [
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'discount' => 'Rabat',
'cms' => 'System CMS'
'cms' => 'System CMS',
'transactions' => 'Transactions'
],
'acl' => [
@ -237,7 +238,9 @@ return [
'view' => 'Widok',
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'Aktualizcja statusu'
'update-status' => 'Aktualizcja statusu',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
],
'account' => [
@ -390,7 +393,8 @@ return [
'submit-comment' => 'Prześlij komentarz',
'notify-customer' => 'Powiadom klienta',
'customer-notified' => ':date | Klient <b>Powiadomiony</b>',
'customer-not-notified' => ':date | Klient <b>Nie powiadomiony</b>'
'customer-not-notified' => ':date | Klient <b>Nie powiadomiony</b>',
'transactions' => 'Transactions'
],
'invoices' => [
@ -467,6 +471,20 @@ return [
'view-title' => 'Refundacja nr #:refund_id',
'invalid-refund-amount-error' => 'Kwota zwrotu powinna być różna od zera.'
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
@ -844,7 +862,9 @@ return [
'update-success' => 'Element suwaka pomyślnie zaktualizowany',
'update-fail' => 'Nie można zaktualizować suwaka',
'delete-success' => 'Nie można usunąć ostatniego elementu lidera',
'delete-fail' => 'Element suwaka został pomyślnie usunięty'
'delete-fail' => 'Element suwaka został pomyślnie usunięty',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -1443,7 +1463,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -80,7 +80,8 @@ return [
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'discount' => 'Desconto',
'cms' => 'CMS'
'cms' => 'CMS',
'transactions' => 'Transactions'
],
'acl' => [
@ -238,7 +239,9 @@ return [
'view' => 'Visão',
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'Atualizar o status'
'update-status' => 'Atualizar o status',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
],
'account' => [
@ -390,6 +393,7 @@ return [
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
'transactions' => 'Transactions'
],
'invoices' => [
@ -466,6 +470,20 @@ return [
'view-title' => 'Reembolso #:refund_id',
'invalid-refund-amount-error' => 'Refund amount should be non zero.'
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
@ -843,7 +861,9 @@ return [
'update-success' => 'Slider atualizado com sucesso',
'update-fail' => 'Slider não pôde ser atualizado',
'delete-success' => 'Não foi possível excluir o slider',
'delete-fail' => 'Slider excluído com sucesso'
'delete-fail' => 'Slider excluído com sucesso',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -1457,7 +1477,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -78,7 +78,8 @@ return [
'campaigns' => 'Campaigns',
'email-templates' => 'Email Templates',
'discount' => 'İndirim',
'cms' => 'CMS'
'cms' => 'CMS',
'transactions' => 'Transactions'
],
'acl' => [
@ -236,7 +237,9 @@ return [
'view' => 'Görüntüle',
'rtl' => 'RTL',
'ltr' => 'LTR',
'update-status' => 'Durum Güncelle'
'update-status' => 'Durum Güncelle',
'transaction-id' => 'Transaction Id',
'transaction-date' => 'Transaction Date',
],
'account' => [
@ -388,7 +391,8 @@ return [
'submit-comment' => 'Yorum Gönder',
'notify-customer' => 'Müşteriyi Bilgilendir',
'customer-notified' => ':date | Müşteri <b>Bilgilendirildi</b>',
'customer-not-notified' => ':date | Müşteri <b>Bilgilendirilmedi</b>'
'customer-not-notified' => ':date | Müşteri <b>Bilgilendirilmedi</b>',
'transactions' => 'Transactions'
],
'invoices' => [
@ -465,6 +469,20 @@ return [
'view-title' => 'İade #:refund_id',
'invalid-refund-amount-error' => 'Lütfen iade miktarını giriniz.'
],
'transactions' => [
'title' => 'Transactions',
'id' => 'Id',
'transaction-id' => 'Transaction Id',
'payment-method' => 'Payment method',
'action' => 'Action',
'view-title' => 'Transaction #:transaction_id',
'transaction-data' => 'Transaction Data',
'order-id' => 'Order Id',
'status' => 'Status',
'created-at' => 'Created At',
'transaction-details' => 'Transaction Details'
]
],
@ -835,7 +853,9 @@ return [
'update-success' => 'Slider başarıyla güncellendi.',
'update-fail' => 'Slider güncellenemez.',
'delete-success' => 'Slider başarıyla silindi.',
'delete-fail' => 'Slider silinirken hata oluştu.'
'delete-fail' => 'Slider silinirken hata oluştu.',
'expired-at' => 'Expire Date',
'sort-order' => 'Sort Order'
],
'tax-categories' => [
@ -1440,7 +1460,12 @@ return [
'client-secret-info' => 'Add your secret key here',
'accepted-currencies' => 'Accepted currencies',
'accepted-currencies-info' => 'Add currency code comma seperated e.g. USD,INR,...',
'buy-now-button-display' => 'Allow customers to directly buy products'
'buy-now-button-display' => 'Allow customers to directly buy products',
'width' => 'Width',
'height' => 'Height',
'cache-small-image' => 'Small Image',
'cache-medium-image' => 'Medium Image',
'cache-large-image' => 'Large Image',
]
]
];

View File

@ -63,7 +63,7 @@
<accordian :title="'{{ __('admin::app.account.current-password') }}'" :active="true">
<div slot="body">
<div class="control-group" :class="[errors.has('current_password') ? 'has-error' : '']">
<label for="current_password">{{ __('admin::app.account.current-password') }}</label>
<label for="current_password" class="required">{{ __('admin::app.account.current-password') }}</label>
<input type="password" v-validate="'required|min:6'" class="control" id="current_password" name="current_password" data-vv-as="&quot;{{ __('admin::app.account.current-password') }}&quot;"/>
<span class="control-error" v-if="errors.has('current_password')">@{{ errors.first('current_password') }}</span>
</div>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.catalog.attributes.index') }}'"></i>
{{ __('admin::app.catalog.attributes.add-title') }}
</h1>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.catalog.attributes.index') }}'"></i>
{{ __('admin::app.catalog.attributes.edit-title') }}
</h1>

View File

@ -12,7 +12,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.catalog.categories.index') }}'"></i>
{{ __('admin::app.catalog.categories.add-title') }}
</h1>
@ -125,7 +125,7 @@
{!! view_render_event('bagisto.admin.catalog.category.create_form_accordian.parent_category.controls.before') !!}
<tree-view value-field="id" name-field="parent_id" input-type="radio" items='@json($categories)'></tree-view>
<tree-view value-field="id" name-field="parent_id" input-type="radio" items='@json($categories)' fallback-locale="{{ config('app.fallback_locale') }}"></tree-view>
{!! view_render_event('bagisto.admin.catalog.category.create_form_accordian.parent_category.controls.after') !!}

View File

@ -13,7 +13,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.catalog.categories.index') }}'"></i>
{{ __('admin::app.catalog.categories.edit-title') }}
</h1>
@ -137,7 +137,7 @@
{!! view_render_event('bagisto.admin.catalog.category.edit_form_accordian.parent_category.controls.before', ['category' => $category]) !!}
<tree-view value-field="id" name-field="parent_id" input-type="radio" items='@json($categories)' value='@json($category->parent_id)'></tree-view>
<tree-view value-field="id" name-field="parent_id" input-type="radio" items='@json($categories)' value='@json($category->parent_id)' fallback-locale="{{ config('app.fallback_locale') }}"></tree-view>
{!! view_render_event('bagisto.admin.catalog.category.edit_form_accordian.parent_category.controls.before', ['category' => $category]) !!}

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.catalog.families.index') }}'"></i>
{{ __('admin::app.catalog.families.add-title') }}
</h1>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.catalog.families.index') }}'"></i>
{{ __('admin::app.catalog.families.edit-title') }}
</h1>

View File

@ -7,7 +7,7 @@
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.categories.controls.before', ['product' => $product]) !!}
<tree-view behavior="normal" value-field="id" name-field="categories" input-type="checkbox" items='@json($categories)' value='@json($product->categories->pluck("id"))'></tree-view>
<tree-view behavior="normal" value-field="id" name-field="categories" input-type="checkbox" items='@json($categories)' value='@json($product->categories->pluck("id"))' fallback-locale="{{ config('app.fallback_locale') }}"></tree-view>
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.categories.controls.after', ['product' => $product]) !!}

View File

@ -14,7 +14,7 @@
<select class="control" name="channels[]" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.catalog.products.channel') }}&quot;" multiple>
@foreach (app('Webkul\Core\Repositories\ChannelRepository')->all() as $channel)
<option value="{{ $channel->id }}" {{ in_array($channel->code, $productChannels) ? 'selected' : ''}}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
</select>

View File

@ -19,6 +19,16 @@
</style>
@stop
@php
$variantImages = [];
foreach ($product->variants as $variant) {
foreach ($variant->images as $image) {
$variantImages[$variant->id] = $image;
}
}
@endphp
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.variations.before', ['product' => $product]) !!}
<accordian :title="'{{ __('admin::app.catalog.products.variations') }}'" :active="true">
@ -96,6 +106,7 @@
<tr>
<th class="sku">{{ __('admin::app.catalog.products.sku') }}</th>
<th>{{ __('admin::app.catalog.products.name') }}</th>
<th>{{ __('admin::app.catalog.products.images') }}</th>
@foreach ($product->super_attributes as $attribute)
<th class="{{ $attribute->code }}"
@ -145,6 +156,26 @@
</div>
</td>
<td>
<div class="control-group" :class="[errors.has(variantInputName + '[images][' + index + ']') ? 'has-error' : '']">
<div v-for='(image, index) in items' class="image-wrapper variant-image">
<label class="image-item" v-bind:class="{ 'has-image': imageData[index] }">
<input type="hidden" :name="[variantInputName + '[images][' + image.id + ']']" v-if="! new_image[index]"/>
<input type="file" v-validate="'mimes:image/*'" :name="[variantInputName + '[images][' + index + ']']" accept="image/*" :ref="'imageInput' + index" multiple="multiple" @change="addImageView($event, index)" :id="image.id"/>
<img class="preview" :src="imageData[index]" v-if="imageData[index]">
</label>
<span class="icon trash-icon" @click="removeImage(image)"></span>
</div>
<label class="btn btn-lg btn-primary add-image" @click="createFileType">
{{ __('admin::app.catalog.products.add-image-btn-title') }}
</label>
</div>
</td>
<td v-for='(attribute, index) in superAttributes'>
<div class="control-group">
<input type="hidden" :name="[variantInputName + '[' + attribute.code + ']']"
@ -388,7 +419,12 @@
inventorySources: @json($inventorySources),
inventories: {},
totalQty: 0,
superAttributes: super_attributes
superAttributes: super_attributes,
items: [],
imageCount: 0,
images: {},
imageData: [],
new_image: [],
}
},
@ -401,6 +437,21 @@
})
},
mounted () {
var this_this = this;
this_this.variant.images.forEach(function(image) {
this_this.items.push(image)
this_this.imageCount++;
if (image.id && image.url) {
this_this.imageData.push(image.url);
} else if (image.id && image.file) {
this_this.readFile(image.file);
}
});
},
computed: {
variantInputName: function () {
if (this.variant.id)
@ -449,9 +500,54 @@
for (var key in this.inventories) {
this.totalQty += parseInt(this.inventories[key]);
}
}
}
},
createFileType: function() {
var this_this = this;
this.imageCount++;
this.items.push({'id': 'image_' + this.imageCount});
this.imageData[this.imageData.length] = '';
},
removeImage (image) {
let index = this.items.indexOf(image);
Vue.delete(this.items, index);
Vue.delete(this.imageData, index);
},
addImageView: function($event, index) {
var ref = "imageInput" + index;
var imageInput = this.$refs[ref][0];
if (imageInput.files && imageInput.files[0]) {
if (imageInput.files[0].type.includes('image/')) {
this.readFile(imageInput.files[0], index);
} else {
imageInput.value = "";
alert('Only images (.jpeg, .jpg, .png, ..) are allowed.');
}
}
},
readFile: function(image, index) {
var reader = new FileReader();
reader.onload = (e) => {
this.imageData.splice(index, 1, e.target.result);
}
reader.readAsDataURL(image);
this.new_image[index] = 1;
},
}
});
</script>
@endpush

View File

@ -26,7 +26,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.catalog.products.index') }}'"></i>
{{ __('admin::app.catalog.products.add-title') }}
</h1>

View File

@ -6,8 +6,16 @@
@section('content')
<div class="content">
<?php $locale = request()->get('locale') ?: app()->getLocale(); ?>
<?php $channel = request()->get('channel') ?: core()->getDefaultChannelCode(); ?>
@php
$locale = request()->get('locale') ?: app()->getLocale();
$channel = request()->get('channel') ?: core()->getDefaultChannelCode();
$channelLocales = app('Webkul\Core\Repositories\ChannelRepository')->findOneByField('code', $channel)->locales;
if (! $channelLocales->contains('code', $locale)) {
$locale = config('app.fallback_locale');
}
@endphp
{!! view_render_event('bagisto.admin.catalog.product.edit.before', ['product' => $product]) !!}
@ -18,7 +26,7 @@
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link"
onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
onclick="window.location = '{{ route('admin.catalog.products.index') }}'"></i>
{{ __('admin::app.catalog.products.edit-title') }}
</h1>
@ -29,7 +37,7 @@
<option
value="{{ $channelModel->code }}" {{ ($channelModel->code) == $channel ? 'selected' : '' }}>
{{ $channelModel->name }}
{{ core()->getChannelName($channelModel) }}
</option>
@endforeach
@ -38,7 +46,7 @@
<div class="control-group">
<select class="control" id="locale-switcher" name="locale">
@foreach (app('Webkul\Core\Repositories\ChannelRepository')->findOneByField('code', $channel)->locales as $localeModel)
@foreach ($channelLocales as $localeModel)
<option
value="{{ $localeModel->code }}" {{ ($localeModel->code) == $locale ? 'selected' : '' }}>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.cms.index') }}'"></i>
{{ __('admin::app.cms.pages.add-title') }}
</h1>
@ -48,7 +48,7 @@
<select type="text" class="control" name="channels[]" v-validate="'required'" value="{{ old('channel[]') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.channel') }}&quot;" multiple="multiple">
@foreach($channels->all() as $channel)
<option value="{{ $channel->id }}">{{ $channel->name }}</option>
<option value="{{ $channel->id }}">{{ core()->getChannelName($channel) }}</option>
@endforeach
</select>

View File

@ -13,7 +13,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.cms.index') }}'"></i>
{{ __('admin::app.cms.pages.edit-title') }}
</h1>
@ -66,7 +66,7 @@
<select type="text" class="control" name="channels[]" v-validate="'required'" value="{{ old('channel[]') }}" data-vv-as="&quot;{{ __('admin::app.cms.pages.channel') }}&quot;" multiple="multiple">
@foreach(app('Webkul\Core\Repositories\ChannelRepository')->all() as $channel)
<option value="{{ $channel->id }}" {{ in_array($channel->id, $selectedOptionIds) ? 'selected' : '' }}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
</select>

View File

@ -6,8 +6,16 @@
@section('content')
<div class="content">
<?php $locale = request()->get('locale') ?: app()->getLocale(); ?>
<?php $channel = request()->get('channel') ?: core()->getDefaultChannelCode(); ?>
@php
$locale = request()->get('locale') ?: app()->getLocale();
$channel = request()->get('channel') ?: core()->getDefaultChannelCode();
$channelLocales = app('Webkul\Core\Repositories\ChannelRepository')->findOneByField('code', $channel)->locales;
if (! $channelLocales->contains('code', $locale)) {
$locale = config('app.fallback_locale');
}
@endphp
<form method="POST" action="" @submit.prevent="onSubmit" enctype="multipart/form-data">
@ -23,7 +31,7 @@
@foreach (core()->getAllChannels() as $channelModel)
<option value="{{ $channelModel->code }}" {{ ($channelModel->code) == $channel ? 'selected' : '' }}>
{{ $channelModel->name }}
{{ core()->getChannelName($channelModel) }}
</option>
@endforeach
@ -32,7 +40,7 @@
<div class="control-group">
<select class="control" id="locale-switcher" name="locale">
@foreach (core()->getAllLocales() as $localeModel)
@foreach ($channelLocales as $localeModel)
<option value="{{ $localeModel->code }}" {{ ($localeModel->code) == $locale ? 'selected' : '' }}>
{{ $localeModel->name }}

View File

@ -14,7 +14,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.addresses.index', ['id' => $customer->id]) }}'"></i>
{{ __('admin::app.customers.addresses.create-title') }}
</h1>

View File

@ -10,7 +10,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.index') }}'"></i>
{{ __('address::app.admin.addresses.title-orders', ['customer_name' => $customer->first_name . ' ' . $customer->last_name]) }}
</h1>

View File

@ -9,7 +9,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.index') }}'"></i>
{{ __('admin::app.users.users.confirm-delete-title') }}
</h1>
</div>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.index') }}'"></i>
{{ __('admin::app.customers.customers.title') }}

View File

@ -9,7 +9,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.index') }}'"></i>
{{ $customer->first_name . " " . $customer->last_name }}
</h1>
</div>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.groups.index') }}'"></i>
{{ __('admin::app.customers.groups.add-title') }}
</h1>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.groups.index') }}'"></i>
{{ __('admin::app.customers.groups.edit-title') }}
</h1>

View File

@ -10,7 +10,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.index') }}'"></i>
{{ __('admin::app.customers.note.title') }}
</h1>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.review.index') }}'"></i>
{{ __('admin::app.customers.reviews.edit-title') }}
</h1>
@ -70,6 +70,20 @@
<textarea class="control" disabled> {{ $review->comment }}</textarea>
</div>
@if (count($review->images) > 0)
<div class="control-group">
<label for="images" >{{ __('admin::app.catalog.categories.image') }}</label>
<div class="image-wrapper">
@foreach ($review->images as $image)
<label class="image-item">
<img class="preview" src="{{ $image->url }}">
</label>
@endforeach
</div>
</div>
@endif
</div>
</accordian>

View File

@ -208,7 +208,7 @@
<div class="product image">
<?php $productBaseImage = productimage()->getProductBaseImage($item->product); ?>
<img class="item-image" src="{{ $productBaseImage['small_image_url'] }}" />
<img class="item-image" src="{{ $productBaseImage['small_image_url'] ?? asset('vendor/webkul/ui/assets/images/product/small-product-placeholder.webp') }}" />
</div>
<div class="description do-not-cross-arrow">

View File

@ -13,6 +13,10 @@
@foreach ($records as $record)
<tr>
@foreach($record as $column => $value)
@php
$value = preg_replace('/[^A-Za-z0-9@#$%^&*()_!+\-]/', '', $value);
@endphp
<td>{{ $value }} </td>
@endforeach
</tr>

View File

@ -2,7 +2,7 @@
@section('content-wrapper')
<div class="inner-section">
@include ('admin::layouts.nav-aside')
<div class="content-wrapper">
@ -12,6 +12,6 @@
@yield('content')
</div>
</div>
@stop

View File

@ -1,4 +1,8 @@
<div class="aside-nav">
{{-- button for collapsing aside nav --}}
<nav-slide-button icon-class="accordian-left-icon"></nav-slide-button>
<ul>
@if (request()->route()->getName() != 'admin.configuration.index')
<?php $keys = explode('.', $menu->currentKey); ?>
@ -30,8 +34,4 @@
@endforeach
@endif
</ul>
<!-- <div class="close-nav-aside">
<i class="icon angle-left-icon close-icon"></i>
</div> -->
</div>

View File

@ -1,13 +1,19 @@
<div class="navbar-left">
{{-- button for expanding nav bar --}}
<nav-slide-button id="nav-expand-button" icon-class="accordian-right-icon" style="display: none;"></nav-slide-button>
{{-- left menu bar --}}
<ul class="menubar">
@foreach ($menu->items as $menuItem)
<li class="menu-item {{ $menu->getActive($menuItem) }}">
<a href="{{ count($menuItem['children']) ? current($menuItem['children'])['url'] : $menuItem['url'] }}">
<span class="icon {{ $menuItem['icon-class'] }}"></span>
<span>{{ trans($menuItem['name']) }}</span>
</a>
</li>
@endforeach
</ul>
</div>

View File

@ -16,42 +16,6 @@
<span class="avatar">
</span>
<?php $locale = request()->get('admin_locale') ?: app()->getLocale();?>
<div class="profile-info">
<div class="dropdown-toggle">
<div style="display: inline-block; vertical-align: middle;">
<span class="name">
{{ __('admin::app.datagrid.locale') }}
</span>
@foreach (core()->getAllLocales() as $localeModel)
@if ($localeModel->code == $locale)
<span class="role">
{{ $localeModel->name }}
</span>
@endif
@endforeach
</div>
<i class="icon arrow-down-icon active"></i>
</div>
<div class="dropdown-list bottom-right">
<div class="control-group">
<select class="control" onChange="window.location.href = this.value" style="margin-left: 30px;">
@foreach (core()->getAllLocales() as $localeModel)
<option value="{{ '?admin_locale=' . $localeModel->code }}" {{ ($localeModel->code) == $locale ? 'selected' : '' }}>
{{ $localeModel->name }}
</option>
@endforeach
</select>
</div>
</div>
</div>
<div class="profile-info">
<div class="dropdown-toggle">
<div style="display: inline-block; vertical-align: middle;">

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customer.review.index') }}'"></i>
{{ __('admin::app.marketing.campaigns.add-title') }}
</h1>
@ -93,7 +93,7 @@
<select v-validate="'required'" class="control" id="channel_id" name="channel_id" data-vv-as="&quot;{{ __('admin::app.marketing.campaigns.channel') }}&quot;">
@foreach (app('Webkul\Core\Repositories\ChannelRepository')->all() as $channel)
<option value="{{ $channel->id }}" {{ old('channel_id') == $channel->id ? 'selected' : '' }}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
</select>
@ -114,7 +114,7 @@
</div>
</accordian>
{!! view_render_event('bagisto.admin.marketing.templates.create.after') !!}
</div>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.campaigns.index') }}'"></i>
{{ __('admin::app.marketing.campaigns.edit-title') }}
</h1>
@ -97,7 +97,7 @@
<select v-validate="'required'" class="control" id="channel_id" name="channel_id" data-vv-as="&quot;{{ __('admin::app.marketing.campaigns.channel') }}&quot;">
@foreach (app('Webkul\Core\Repositories\ChannelRepository')->all() as $channel)
<option value="{{ $channel->id }}" {{ $selectedOption == $channel->id ? 'selected' : '' }}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
</select>
@ -119,7 +119,7 @@
</div>
</accordian>
{!! view_render_event('bagisto.admin.marketing.templates.create.after') !!}
</div>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.events.index') }}'"></i>
{{ __('admin::app.marketing.events.add-title') }}
</h1>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.events.index') }}'"></i>
{{ __('admin::app.marketing.events.edit-title') }}
</h1>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.customers.subscribers.index') }}'"></i>
{{ __('admin::app.customers.subscribers.title-edit') }}
</h1>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.email-templates.index') }}'"></i>
{{ __('admin::app.marketing.templates.add-title') }}
</h1>
@ -61,7 +61,7 @@
</div>
</div>
</accordian>
{!! view_render_event('bagisto.admin.marketing.templates.create.after') !!}
</div>

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.email-templates.index') }}'"></i>
{{ __('admin::app.marketing.templates.edit-title') }}
</h1>
@ -62,7 +62,7 @@
</div>
</div>
</accordian>
{!! view_render_event('bagisto.admin.marketing.templates.create.after') !!}
</div>

View File

@ -22,7 +22,7 @@
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link"
onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
onclick="window.location = '{{ route('admin.cart-rules.index') }}'"></i>
{{ __('admin::app.promotions.cart-rules.add-title') }}
</h1>
@ -71,7 +71,7 @@
@foreach(core()->getAllChannels() as $channel)
<option value="{{ $channel->id }}" {{ old('channels') && in_array($channel->id, old('channels')) ? 'selected' : '' }}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
@ -306,7 +306,7 @@
<input type="hidden" :name="['conditions[' + index + '][attribute_type]']" v-model="matchedAttribute.type">
<div v-if="matchedAttribute.key == 'product|category_ids' || matchedAttribute.key == 'product|category_ids' || matchedAttribute.key == 'product|parent::category_ids'">
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :behavior="'no'"></tree-view>
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :behavior="'no'" fallback-locale="{{ config('app.fallback_locale') }}"></tree-view>
</div>
<div v-else>

View File

@ -27,7 +27,7 @@
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link"
onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
onclick="window.location = '{{ route('admin.cart-rules.index') }}'"></i>
{{ __('admin::app.promotions.cart-rules.edit-title') }}
</h1>
@ -78,7 +78,7 @@
@foreach(core()->getAllChannels() as $channel)
<option value="{{ $channel->id }}" {{ in_array($channel->id, $selectedOptionIds) ? 'selected' : '' }}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
@ -343,7 +343,7 @@
<input type="hidden" :name="['conditions[' + index + '][attribute_type]']" v-model="matchedAttribute.type">
<div v-if="matchedAttribute.key == 'product|children::category_ids' || matchedAttribute.key == 'product|category_ids' || matchedAttribute.key == 'product|parent::category_ids'">
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :value='condition.value' :behavior="'no'"></tree-view>
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :value='condition.value' :behavior="'no'" fallback-locale="{{ config('app.fallback_locale') }}"></tree-view>
</div>
<div v-else>
@ -783,7 +783,7 @@
},
showModal(id) {
this.$root.$set(this.$root.modalIds, id, true);
this.$root.$set(this.$root.modalIds, id, true);
},
}
});

View File

@ -22,7 +22,7 @@
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link"
onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
onclick="window.location = '{{ route('admin.catalog-rules.index') }}'"></i>
{{ __('admin::app.promotions.catalog-rules.add-title') }}
</h1>
@ -71,7 +71,7 @@
@foreach(core()->getAllChannels() as $channel)
<option value="{{ $channel->id }}" {{ old('channels') && in_array($channel->id, old('channels')) ? 'selected' : '' }}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
@ -230,7 +230,7 @@
<input type="hidden" :name="['conditions[' + index + '][attribute_type]']" v-model="matchedAttribute.type">
<div v-if="matchedAttribute.key == 'product|category_ids'">
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :behavior="'no'"></tree-view>
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :behavior="'no'" fallback-locale="{{ config('app.fallback_locale') }}"></tree-view>
</div>
<div v-else>

View File

@ -22,7 +22,7 @@
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link"
onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
onclick="window.location = '{{ route('admin.catalog-rules.index') }}'"></i>
{{ __('admin::app.promotions.catalog-rules.edit-title') }}
</h1>
@ -73,7 +73,7 @@
@foreach(core()->getAllChannels() as $channel)
<option value="{{ $channel->id }}" {{ in_array($channel->id, $selectedOptionIds) ? 'selected' : '' }}>
{{ $channel->name }}
{{ core()->getChannelName($channel) }}
</option>
@endforeach
@ -239,7 +239,7 @@
<input type="hidden" :name="['conditions[' + index + '][attribute_type]']" v-model="matchedAttribute.type">
<div v-if="matchedAttribute.key == 'product|category_ids'">
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :value='condition.value' :behavior="'no'"></tree-view>
<tree-view value-field="id" id-field="id" :name-field="'conditions[' + index + '][value]'" input-type="checkbox" :items='matchedAttribute.options' :value='condition.value' :behavior="'no'" fallback-locale="{{ config('app.fallback_locale') }}"></tree-view>
</div>
<div v-else>
@ -515,7 +515,7 @@
});
if (matchedAttribute[0]['type'] == 'multiselect' || matchedAttribute[0]['type'] == 'checkbox') {
this.condition.operator = '{}';
// this.condition.operator = '{}';
this.condition.value = this.condition.value == '' && this.condition.value != undefined
? []

View File

@ -12,7 +12,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.sales.invoices.index') }}'"></i>
{{ __('admin::app.sales.invoices.add-title') }}
</h1>

View File

@ -1,12 +1,32 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
{{-- meta tags --}}
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
{{-- lang supports inclusion --}}
<style type="text/css">
@font-face {
font-family: 'Hind';
src: url({{ asset('vendor/webkul/ui/assets/fonts/Hind/Hind-Regular.ttf') }}) format('truetype');
}
@font-face {
font-family: 'Noto Sans';
src: url({{ asset('vendor/webkul/ui/assets/fonts/Noto/NotoSans-Regular.ttf') }}) format('truetype');
}
</style>
@php
/* main font will be set on locale based */
$mainFontFamily = app()->getLocale() === 'ar' ? 'DejaVu Sans' : 'Noto Sans';
@endphp
{{-- main css --}}
<style type="text/css">
* {
font-family: DejaVu Sans;
font-family: '{{ $mainFontFamily }}';
}
body, th, td, h5 {
@ -306,7 +326,6 @@
</table>
</div>
</div>
</body>
</html>

View File

@ -14,7 +14,7 @@
<h1>
{!! view_render_event('sales.invoice.title.before', ['order' => $order]) !!}
<i class="icon angle-left-icon back-link" onclick="window.location = history.length > 1 ? document.referrer : '{{ route('admin.dashboard.index') }}'"></i>
<i class="icon angle-left-icon back-link" onclick="window.location = '{{ route('admin.sales.invoices.index') }}'"></i>
{{ __('admin::app.sales.invoices.view-title', ['invoice_id' => $invoice->id]) }}

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