Merge pull request #28 from bagisto/master

This commit is contained in:
Glenn Hermans 2020-07-29 21:59:29 +02:00 committed by GitHub
commit c2c57a34ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
574 changed files with 28812 additions and 7872 deletions

View File

@ -1,13 +1,13 @@
APP_NAME=Bagisto
APP_ENV=local
APP_VERSION=1.1.0
APP_VERSION=1.1.2
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_TIMEZONE=
APP_TIMEZONE=Asia/Kolkata
APP_LOCALE=en
LOG_CHANNEL=stack
APP_CURRENCY=
APP_CURRENCY=USD
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
@ -47,3 +47,23 @@ PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
FACEBOOK_CALLBACK_URL=https://yourhost.com/customer/social-login/facebook/callback
TWITTER_CLIENT_ID=
TWITTER_CLIENT_SECRET=
TWITTER_CALLBACK_URL=https://yourhost.com/customer/social-login/twitter/callback
GOGGLE_CLIENT_ID=
GOGGLE_CLIENT_SECRET=
GOGGLE_CALLBACK_URL=https://yourhost.com/customer/social-login/google/callback
LINKEDIN_CLIENT_ID=
LINKEDIN_CLIENT_SECRET=
LINKEDIN_CALLBACK_URL=https://yourhost.com/customer/social-login/linkedin/callback
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
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.1.0
APP_VERSION=1.1.2
APP_KEY=base64:G4KY3tUsTaY9ONo1n/QyJvVLQZdJDgbIkSJswFK01HE=
APP_DEBUG=true
APP_URL=http://localhost

4
.gitignore vendored
View File

@ -1,5 +1,4 @@
/docker-compose-collection
/bin
/node_modules
/public/hot
/public/storage
@ -22,7 +21,6 @@ yarn.lock
package-lock.json
yarn.lock
.php_cs.cache
storage/
storage/*.key
/docker-compose-collection/
/resources/themes/velocity/*
/resources/themes/velocity/*

View File

@ -2,7 +2,523 @@
#### This changelog consists the bug & security fixes and new features being included in the releases listed below.
## **v1.1.0 (20th of March 2020)** - *Release*
## **v1.1.3 (19th of June 2020)** - *Release*
* [feature] - Customer group price for products implemented
* [feature] - Image search feature added with tensorflow.js
* [feature] - Migrated to Laravel 7
* [feature] - Search engine optimization with rich snippet
* #343 [fixed] - Translation strings are missing from awful amount of controllers when returning responses with flash. And optimise translation strings for faster static translations.
* #824 [fixed] - Framework is not supporting I.E 11 browser.
* #838 [fixed] - Packages as composer dependency
* #985 [fixed] - Dynamically insert products
* #1258 [fixed] - If payment is done through paypal then invoice should generate automatically and status of Order should be processing.
* #1362 [fixed] - Site logo and Category Image are broken
* #1370 [fixed] - install fails at the last step
* #1522 [fixed] - Quick Links broken
* #1656 [fixed] - Validation error in Phone Field while Adding Address
* #1981 [fixed] - If customer update his address at time of checkout and save this address then address doesn't get save and also on checkout page old address displays.
* #2009 [fixed] - Using AWS S3 for storage
* #2060 [fixed] - auto generate coupon accordion not getting hidden while selecting no specific coupons
* #2159 [fixed] - Taking more time to load product details in shopping cart.
* #2415 [fixed] - Add TO CART button should replace by “BOOk NOW” button for booking product.
* #2590 [fixed] - hi everyone i'm wondering if customers after register could give a referral code ??
* #2702 [fixed] - Getting broken image for products and category.
* #2720 [fixed] - Error during migration on php artisan migrate
* #2725 [fixed] - Variants should not be created if cofigurable product created failed
* #2762 [fixed] - Seeder: SQL Error: Duplicate entry for '1' key 'PRIMARY'
* #2766 [fixed] - Needs User friendly UI for the event booking in product page
* #2789 [fixed] - Product channel and locale dropdowns in the admin dashboard not working
* #2795 [fixed] - Cart error merging if you authenticate having items with low stock
* #2800 [fixed] - Add the ability to change Attribute Family for Products
* #2804 [fixed] - There should be order review section instead of complete section on checkout page
* #2805 [fixed] - the sku should be all in caps
* #2844 [fixed] - showing product image of each color in configurable product
* #2863 [fixed] - Search Product Name and Description
* #2868 [fixed] - Cart (customer) address not persisted during the checkout
* #2874 [fixed] - Order, payment process and payment metadata
* #2888 [fixed] - Always Default locale should be selected when add new product for each channels
* #2889 [fixed] - timezone drop down field is not visible in web installer
* #2893 [fixed] - When creating a shipment, display items invoiced
* #2931 [fixed] - Customer pays order in PayPal but there is no record in bagisto
* #2936 [fixed] - change the admin route for another
* #2942 [fixed] - Randomize New and Featured Products
* #2949 [fixed] - failed to migrate with new database using installer
* #2950 [fixed] - multiple error message on installer
* #2964 [fixed] - Exception when buying non stockable item via API
* #2969 [fixed] - Cancel icon is not visible in velocity theme for customer order detail
* #2972 [fixed] - can add to homescreen on mobile device in velocity theme
* #2974 [fixed] - Thumbnails are not generating on mobile ifproduct has more than 4 photos
* #2886 [fixed] - Configuration option for Compare
* #2985 [fixed] - Product category is not saving
* #2987 [fixed] - mult address
* #2990 [fixed] - Facebook Pixel integration for Laravel
* #2991 [fixed] - Filters not showing in small devices
* #2994 [fixed] - Shipping method not getting updated after changing the zip code.
* #2995 [fixed] - filter is not showing when search product from search bar
* #2996 [fixed] - Incomplete products JSON when type is grouped or bundled
* #2997 [fixed] - Category show sidebar
* #3000 [fixed] - arabic product in home page Not lined up in one format
* #3001 [fixed] - Getting Error Exception when view order details
* #3004 [fixed] - Category Deactivation not working
* #3005 [fixed] - One page checkout creating new address in profile every time.
* #3009 [fixed] - Featured product slider and new product slider is not working
* #3011 [fixed] - The product is in cart or not
* #3014 [fixed] - Support for Responsive Admin Panel
* #3018 [fixed] - Icons are not showing on imac
* #3020 [fixed] - Images can not add on velocity theme
* #3021 [fixed] - Deactivating the last category of level1 renders only level2 etc. from deactivated category
* #3022 [fixed] - storage/ should not be included in .gitignore
* #3024 [fixed] - Blank order comment shouldn't added
* #3025 [fixed] - save address return error 500
* #3026 [fixed] - Date validation error when editing Booking Products
* #3029 [fixed] - velocity theme not fully responsive
* #3032 [fixed] - [Critical] Onecheckout preventing to continue to shipping method after selecting address
* #3035 [fixed] - Please update pwa for bagisto
* #3036 [fixed] - Shipping address options not shown
* #3037 [fixed] - error mysql 8.0.20 bagisto v 1.1.2
* #3038 [fixed] - Trying to get property 'code' of non-object
* #3040 [fixed] - Api logout not working..
* #3044 [fixed] - Getting exception when click on view shopping cart if adding group product in cart that contains variants of configurable product.
* #3047 [fixed] - The qty of configurable product is 0 when merging cart
* #3048 [fixed] - "nwidart/laravel-modules": "^3.2", is the wrong version for laravel 6.*
* #3050 [fixed] - Can't override models
* #3051 [fixed] - error while migrate bagisto manually from console command
* #3053 [fixed] - [Velocity] Checkout: Shipping/Billing Address Name, email does not get updated
* #3054 [fixed] - customer is getting exception while cancel order
* #3061 [fixed] - CORS errors
* #3067 [fixed] - PHP Notice: date_default_timezone_set(): Timezone ID 'Asia/JakartaAsia/Kolkata' is invalid
* #3068 [fixed] - Inactive inventory source are get select in channel and products
* #3070 [fixed] - Edit Attribute -> Add Option or Swatch Item Error 404 for Indonesia(id) country code
* #3073 [fixed] - HTML entities are not being decoded when editing attribute options
* #3076 [fixed] - checkout disable when add new shipping address
* #3077 [fixed] - How to change validation messages to spanish not working
* #3079 [fixed] - Tracking Number in My Account
* #3087 [fixed] - after installation, first product registration does not open detailed page, I only opened from the second product
* #3089 [fixed] - not getting price after changing configurable options
* #3090 [fixed] - error mysql8
* #3095 [fixed] - pending orders detail page is blank when viewing in arabic locale
* #3096 [fixed] - error when add product in compare list from the search product page
* #3097 [fixed] - getting console error when remove cart item
* #3113 [fixed] - catalog storefront configuration for per product page is not working
* #3115 [fixed] - minify the velocity.js for gtmetrix
* #3118 [fixed] - Home page doesn't display categories and language bar doesn't work.
* #3120 [fixed] - admin panel multi locale
* #3135 [fixed] - How can I cad comment box in checkout form.
* #3136 [fixed] - configurable product variant name gets removed from the catalog list
* #3140 [fixed] - API for more than one locale !
* #3144 [fixed] - error if selecting only one currency
* #3146 [fixed] - how to configure aws smtp server on bagisto
* #3150 [fixed] - Attribute not showing on the creating new configurable product page
* #3153 [fixed] - Free Shipping and Flat Rate Shipping not desable
* #3158 [fixed] - Column not found: 1054 Unknown column 'symbol' in 'field l
* #3160 [fixed] - Disabled products are not removed from bundles
* #3161 [fixed] - Trying to access array offset on value of type null
* #3164 [fixed] - getting exception when add/edit configurable product
* #3171 [fixed] - fixed amount is applied on product for customer group price instead of apply in %
* #3172 [fixed] - description or name is missing for comparable items if customer login
* #3183 [fixed] - ErrorException
* #3184 [fixed] - Site showing blank page on 404
* #3186 [fixed] - replace payment method text with an image on the checkout page
* #3190 [fixed] - Bagisto v1.1.2 velocity responsive theme issue on iPhone and iPads
* #3191 [fixed] - Bagisto v1.1.2 velocity responsive theme issue on iPhone and iPads
* #3197 [fixed] - Call to undefined function str_limit() when view product in velocity theme
* #3199 [fixed] - Getting exception when click on product.
* #3202 [fixed] - Getting exception in creating grouped product.
* #3203 [fixed] - Getting translation issue in price field of downloadable product.
* #3204 [fixed] - Getting exception when changing currency from search page.
* #3205 [fixed] - Able to create the product without selecting required toggles button.
* #3208 [fixed] - Customer group price functionality is not working.
* #3207 [fixed] - Issue in variant product of configurable, only one variant name display at a time and on refreshing it changes.
* #3214 [fixed] - Getting exception on forgot password link.
* #3215 [fixed] - when updating an attribute to 'use_in_flat', bagisto should update the product_flat table with the values of those products
* #3218 [fixed] - virtual product not shipping step..
* #3219 [fixed] - fix the date/time format in booking products
* #3222 [fixed] - UI issue in event ticket booking special price date field
* #3232 [fixed] - homepage is showing 404 error page in both theme
* #3234 [fixed] - UI Issue for cart, wishlist, compare icon number indicator in RTL
* #3236 [fixed] - selected category gets removed from the search in RTL
* #3235 [fixed] - need space b/w sign in & sign up box in mini login window for RTL
* #3237 [fixed] - Options of attribute not display as per its position
* #3238 [fixed] - Trait 'Illuminate\Foundation\Auth\SendsPasswordResetEmails' not found
* #3240 [fixed] - Payment methods in onepage checkout are not visible completely in RTL
* #3241 [fixed] - login fields(email,passwords) are in the center when in RTL
* #3246 [fixed] - fix icon layout in edit booking product page for RTL
* #3248 [fixed] - fix css for cancel icon on success alert RTL
* #3249 [fixed] - icons are overlapped in comparison page for RTL
* #3250 [fixed] - find product by image in search attempt to an error if app_url isn't define
* #3254 [fixed] - exception on changing locale to Italian
* #3255 [fixed] - Appointment booking slot duration missing in UI for RTL
* #3265 [fixed] - recently view product heading is overlapped in RTL
* #3270 [fixed] - fix icon design on catalog rule when select special price as condition
* #3272 [fixed] - getting exception when booking product type is not same as cart item for same product id
* #3273 [fixed] - fix calendar icon present at dashboard in RTL
* #3274 [fixed] - Installer Blank Page After Migration
* #3286 [fixed] - fix calendar icon css at admin dashboard
* #3289 [fixed] - Main product is not showing in catalog grid if configurable product hasn't been created completely.
* #3297 [fixed] - getting exception when save booking product from edit page
* #3298 [fixed] - Header content category always redirect to 404 error page
## **v1.1.2 (24th of March 2020)** - *Release*
* [feature] - Now customer can cancel order.
* [feature] - Auto and manual currency exchange rates update feature added.
* #797 [fixed] - Add new module
* #2453 [fixed] - Velocity theme is not loading on fresh instance
* #2691 [fixed] - Shipping and Payment methods automatically selected on Checkout oage
* #2752 [fixed] - Error when you create or update a new catalog under root
* #2793 [fixed] - Stock Check Incorrect for Configurable Items
* #2826 [fixed] - Not able to view cart icon
* #2869 [fixed] - Updating "Velocity meta data" throws QueryException
* #2871 [fixed] - Refund throws "Undefined index: shipping" error
* #2875 [fixed] - Deleting brands that have been assigned to products causes checkout error
* #2884 [fixed] - Undefined Index slot: when add to cart rental booking
* #2890 [fixed] - cart rule condition (price in cart) always set to equal or less than when select greater than/less than
* #2895 [fixed] - The type hint of view in this blade file is 'address' - there is no tag in any provider which loads view with this type hint.
* #2896 [fixed] - There are two fields with having same value of name attribute one is hidden and other is of its desired type - is this redundant code or its solving any purpose?
* #2897 [fixed] - Inventory status field should be passed through validation for boolean in its backend controller.
* #2898 [fixed] - error when viewing a category and then wanting to change the language of the page in mobile view
* #2899 [fixed] - showing the configured products as radio button
* #2900 [fixed] - getting different variant of a configurable product in front end
* #2901 [fixed] - Error when creating a category
* #2908 [fixed] - A class is missing from the Velocity ProductRepositiry file
* #2914 [fixed] - Filter not showing on mobile, also sorting not working on mobile
* #2915 [fixed] - filters are missing on mobile view.
* #2919 [fixed] - Header Content not working on other languages
* #2925 [fixed] - exception for php version 7.4
* #2938 [fixed] - Extend Model Class
* #2939 [fixed] - get product description for API without html tags
* #2940 [fixed] - creating categories have error
* #2943 [fixed] - Scroll images is not working
* #2945 [fixed] - API product detail return empty array
* #2954 [fixed] - The merging cart function does not work when already added all items of product into customer cart
## **v1.1.0 (24th of March 2020)** - *Release*
* #797 [fixed] - Add new module
* #826 [fixed] - Impossible to create the root directory "".
* #2152 [fixed] - Product images are not showing
* #2329 [fixed] - Getting exception on frontend after updating meta data.
* #2354 [fixed] - possible integrate this payment
* #2543 [fixed] - Sliders Text should be translatable
* #2558 [fixed] - Sliders Text should be translatable
* #2619 [fixed] - Issue when category slug & product slug are same
* #2684 [fixed] - API checkout/cart returns null for guest user
* #2691 [fixed] - Shipping and Payment methods automatically selected on Checkout oage
* #2706 [fixed] - Getting exception on editing category for pt_BR locale in php 7.4
* #2708 [fixed] - Able to create booking product from back date.
* #2713 [fixed] - fix the invoice header in pdf
* #2726 [fixed] - is shop.js the vue framework ??
* #2752 [fixed] - Error when you create or update a new catalog under root
* #2763 [fixed] - error to add rental booking into cart
* #2764 [fixed] - fix UI when select back_date of booking product,the calendar icon is set on another place
* #2765 [fixed] - Email settings configuration values are not write in .env file
* #2768 [fixed] - Getting exception in cart when remove one ticket from event booking from backend
* #2769 [fixed] - Can't delete Exchange Rates data
* #2774 [fixed] - How to add new icon in bagisto admin panel?
* #2775 [fixed] - compare icon is missing in each product for default theme
* #2776 [fixed] - compare option in side bar menu at customer panel should be available
* #2778 [fixed] - Issue in customer profile dropdown.
* #2779 [fixed] - Issue on checkout page, email should ask first as in default theme.
* #2780 [fixed] - Sidebar layout issue.
* #2781 [fixed] - Mobile menu is not showing correct sub-menu
* #2784 [fixed] - One booking for many days slot time issue
* #2785 [fixed] - missing address details in checkout page
* #2786 [fixed] - Getting error message on adding product to compare product from search page.
* #2788 [fixed] - guest_checkout is missing from edit product
* #2790 [fixed] - Minicart disable when use new languages only velocity theme
* #2792 [fixed] - Weight Validation Inconsistencies
* #2793 [fixed] - Stock Check Incorrect for Configurable Items
* #2794 [fixed] - When allow backorder is enabled, display a message available for order rather than in stock.
* #2796 [fixed] - Try to create category in windows 10 getting exception
* #2801 [fixed] - Address with more than 2 lines is not added correctly to the cart_address table
* #2807 [fixed] - Illegal mix of collations
* #2808 [fixed] - Correct the spelling on registration page.
* #2810 [fixed] - UI issue on compare similar item page.
* #2811 [fixed] - how to change checkout proccess
* #2812 [fixed] - getting timezone error while setup
* #2813 [fixed] - Ui issue if there is only one product in compare page.
* #2814 [fixed] - variant product's name aren't update when select their options in Front
* #2818 [fixed] - Not able to view menu in velocity theme on storefront
* #2821 [fixed] - Address Line is Null in Emails
* #2825 [fixed] - PHP Notice:
* #2827 [fixed] - default local not changing in storefront in velocity theme
* #2828 [fixed] - currency change error on velocity theme
* #2829 [fixed] - changing home page content in velocity and npm
* #2832 [fixed] - Illegal mix of collations
* #2834 [fixed] - Layout issue in compare page in pt_BR locale
* #2837 [fixed] - subscription bar content source code is not visible in text editor
* #2840 [fixed] - Velocity theme is not available on fresh install
* #2845 [fixed] - Implement custom RegistrationController
* #2846 [fixed] - does not show next step
* #2847 [fixed] - Class 'Faker\Factory' not found
* #2849 [fixed] - Can not add my stylesheet to Velocity theme
* #2850 [fixed] - admin crash on save configration
* #2851 [fixed] - Fix date picker icon layout at dashboard
* #2856 [fixed] - Issue with Sort by functionality, when open any category it by defaults show Newest First but after changing sort by when again select newest first it shows different product.
* #2865 [fixed] - Save order taking so long time 30s
* #2866 [fixed] - ayout issue when customer save addresses form
* #2871 [fixed] - Refund throws "Undefined index: shipping" error
* #2876 [fixed] - Place order is disable at checkout when select shipping address
## **v1.1.0 (24th of March 2020)** - *Release*
* [feature] Added new booking type product.
@ -10,6 +526,8 @@
* [feature] Impletment compare product feature.
* #2525 [fixed] - Add more settings to the installers
* #2541 [fixed] - Showing product's price with the price including tax
* #2552 [fixed] - error mysql 8
@ -72,14 +590,20 @@
* #2606 [fixed] - custom attributes are not Visible on Product View Page on Front-end
* #2607 [fixed] - Getting exception on editing category for pt_BR locale in php 7.4
* #2608 [fixed] - Getting exception on creating category.
* #2609 [fixed] - product removed from comparison page when update product by name
* #2611 [fixed] - installer error
* #2612 [fixed] - available slots are not showing for current date even if slot time is not expired
* #2613 [fixed] - Propaganistas/Laravel-Intl is abandoned
* #2614 [fixed] - table booking slot time is expired still exist in cart
* #2619 [fixed] - Issue when category slug & product slug are same
* #2621 [fixed] - i create a site and it is up kind of noting works
@ -150,7 +674,9 @@
* #2667 [fixed] - By default wishlist option is selected in cart
* #2669 [fixed] - Booking product should be removed from the cart when selected slot time expired
* #2670 [fixed] - Booking product should be removed from the cart when selected slot time expired
* #2669 [fixed] - Browser compatibility issue
* #2671 [fixed] - Error on moving booking product to wishlist
@ -164,6 +690,26 @@
* #2693 [fixed] - Booking product page - add to cart button js error
* #2704 [fixed] - product's assigned category can't be removed
* #2707 [fixed] - Getting exception when generate invoice in appointment booking
* #2715 [fixed] - Error message should throw if "To" time is less than "From".
* #2716 [fixed] - After saving the default booking time product selected time for date range changes to 00:00:00 ,because of which not able to book appointment on frontend.
* #2717 [fixed] - Getting error message on adding rental product in cart if rental booking is not available for that day.
* #2722 [fixed] - warning showing when update event booking cart quantity from the product page
* #2723 [fixed] - Compare product icon on header showing counts of compare product but there are no product in compare list.
* #2724 [fixed] - table bookings quantity should update in existing booking added in cart for same slot/date
* #2726 [fixed] - is shop.js the vue framework ??
* #2732 [fixed] - missing product's quick view in category page
## **v1.0.0 (24th of February 2020)** - *Release*

View File

@ -6,6 +6,7 @@
<a href="https://packagist.org/packages/bagisto/bagisto"><img src="https://poser.pugx.org/bagisto/bagisto/d/total.svg" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/bagisto/bagisto"><img src="https://poser.pugx.org/bagisto/bagisto/v/stable.svg" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/bagisto/bagisto"><img src="https://poser.pugx.org/bagisto/bagisto/license.svg" alt="License"></a>
<a href="https://github.com/bagisto/bagisto/actions"><img src="https://github.com/bagisto/bagisto/workflows/CI/badge.svg" alt="Backers on Open Collective"></a>
<a href="#backers"><img src="https://opencollective.com/bagisto/backers/badge.svg" alt="Backers on Open Collective"></a>
<a href="#sponsors"><img src="https://opencollective.com/bagisto/sponsors/badge.svg" alt="Sponsors on Open Collective"></a>
</p>
@ -97,7 +98,7 @@ http(s)://example.com/public
##### Execute these commands below, in order
~~~
1. composer create-project bagisto/bagisto
1. composer create-project bagisto/bagisto-standard
~~~
~~~

6
app/Console/Kernel.php Executable file → Normal file
View File

@ -24,8 +24,7 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command('booking:cron')->dailyAt('3:00');
}
/**
@ -36,7 +35,8 @@ class Kernel extends ConsoleKernel
protected function commands()
{
$this->load(__DIR__.'/Commands');
$this->load(__DIR__.'/../../packages/Webkul/Core/src/Console/Commands');
require base_path('routes/console.php');
}
}
}

View File

@ -2,7 +2,7 @@
namespace App\Exceptions;
use Exception;
use Throwable;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
@ -29,10 +29,10 @@ class Handler extends ExceptionHandler
/**
* Report or log an exception.
*
* @param \Exception $exception
* @param \Throwable $exception
* @return void
*/
public function report(Exception $exception)
public function report(Throwable $exception)
{
parent::report($exception);
}
@ -41,10 +41,10 @@ class Handler extends ExceptionHandler
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @param \Throwable $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
public function render($request, Throwable $exception)
{
return parent::render($request, $exception);
}

View File

@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware
* @var array
*/
protected $except = [
//
'paypal/standard/ipn'
];
}

View File

@ -9,7 +9,7 @@
"license": "MIT",
"type": "project",
"require": {
"php": "^7.2.0",
"php": "^7.2.5",
"ext-curl": "*",
"ext-intl": "*",
"ext-mbstring": "*",
@ -17,36 +17,42 @@
"ext-pdo": "*",
"ext-pdo_mysql": "*",
"ext-tokenizer": "*",
"algolia/algoliasearch-client-php": "^2.2",
"astrotomic/laravel-translatable": "^11.0.0",
"barryvdh/laravel-dompdf": "0.8.5",
"babenkoivan/elastic-scout-driver": "^1.1",
"barryvdh/laravel-debugbar": "^3.1",
"barryvdh/laravel-dompdf": "0.8.6",
"doctrine/dbal": "2.9.2",
"fideloper/proxy": "^4.0",
"fideloper/proxy": "^4.2",
"flynsarmy/db-blade-compiler": "^5.5",
"guzzlehttp/guzzle": "~6.0",
"fzaninotto/faker": "^1.9.1",
"guzzlehttp/guzzle": "~6.3",
"intervention/image": "^2.4",
"intervention/imagecache": "^2.3",
"kalnoy/nestedset": "5.0.0",
"kalnoy/nestedset": "5.0.1",
"konekt/concord": "^1.2",
"laravel/framework": "^6.0",
"laravel/helpers": "^1.1",
"laravel/tinker": "^1.0",
"maatwebsite/excel": "3.1.18",
"nwidart/laravel-modules": "^3.2",
"laravel/framework": "^7.0",
"laravel/scout": "^8.0",
"laravel/socialite": "^4.4",
"laravel/tinker": "^2.0",
"laravel/ui": "^2.0",
"maatwebsite/excel": "3.1.19",
"prettus/l5-repository": "^2.6",
"tymon/jwt-auth": "^1.0.0"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.1",
"codeception/codeception": "4.1.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.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0",
"barryvdh/laravel-debugbar": "^3.1",
"fzaninotto/faker": "^1.4"
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.3.1",
"nunomaduro/collision": "^4.1",
"phpunit/phpunit": "^8.5"
},
"replace": {
@ -101,13 +107,17 @@
"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\\BookingProduct\\": "packages/Webkul/BookingProduct/src",
"Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
"Tests\\Acceptance\\": "tests/acceptance/",
"Tests\\Functional\\": "tests/functional/",
"Tests\\Unit\\": "tests/unit/",
"Tests\\Trigger\\": "tests/trigger/"
}
},

3429
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -153,7 +153,7 @@ return [
/*
Application Version
*/
'version' => env('APP_VERSION', '1.1.0'),
'version' => env('APP_VERSION'),
/**
* Blacklisting attributes while debugging
@ -268,6 +268,7 @@ return [
Webkul\CMS\Providers\CMSServiceProvider::class,
Webkul\Velocity\Providers\VelocityServiceProvider::class,
Webkul\BookingProduct\Providers\BookingProductServiceProvider::class,
Webkul\SocialLogin\Providers\SocialLoginServiceProvider::class,
],
/*

View File

@ -24,5 +24,6 @@ return [
\Webkul\CartRule\Providers\ModuleServiceProvider::class,
\Webkul\CMS\Providers\ModuleServiceProvider::class,
\Webkul\Velocity\Providers\ModuleServiceProvider::class,
\Webkul\SocialLogin\Providers\ModuleServiceProvider::class,
]
];

View File

@ -111,7 +111,7 @@ return [
'views' => true, // Views with their data
'route' => true, // Current route information
'auth' => false, // Display Laravel authentication status
'gate' => true, // Display Laravel Gate checks
'gate' => true, // Display Laravel Gate checks
'session' => true, // Display session data
'symfony_request' => true, // Only one can be enabled..
'mail' => true, // Catch mail messages
@ -122,7 +122,7 @@ return [
'files' => false, // Show the included files
'config' => false, // Display config settings
'cache' => false, // Display cache events
'models' => false, // Display models
'models' => true, // Display models
],
/*

View File

@ -0,0 +1,7 @@
<?php
return [
'hosts' => [
env('ELASTIC_HOST', 'localhost:9200'),
]
];

View File

@ -0,0 +1,5 @@
<?php
return [
'refresh_documents' => env('ELASTIC_SCOUT_DRIVER_REFRESH_DOCUMENTS', false)
];

View File

@ -179,7 +179,8 @@ return [
| in conjunction with queued imports and exports.
|
*/
'remote_disk' => null,
'remote_disk' => null,
'remote_prefix' => null,
],
];

91
config/scout.php Normal file
View File

@ -0,0 +1,91 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Search Engine
|--------------------------------------------------------------------------
|
| This option controls the default search connection that gets used while
| using Laravel Scout. This connection is used when syncing all models
| to the search service. You should adjust this based on your needs.
|
| Supported: "algolia", "null"
|
*/
'driver' => env('SCOUT_DRIVER', null),
/*
|--------------------------------------------------------------------------
| Index Prefix
|--------------------------------------------------------------------------
|
| Here you may specify a prefix that will be applied to all search index
| names used by Scout. This prefix may be useful if you have multiple
| "tenants" or applications sharing the same search infrastructure.
|
*/
'prefix' => env('SCOUT_PREFIX', ''),
/*
|--------------------------------------------------------------------------
| Queue Data Syncing
|--------------------------------------------------------------------------
|
| This option allows you to control if the operations that sync your data
| with your search engines are queued. When this is set to "true" then
| all automatic data syncing will get queued for better performance.
|
*/
'queue' => env('SCOUT_QUEUE', true),
/*
|--------------------------------------------------------------------------
| Chunk Sizes
|--------------------------------------------------------------------------
|
| These options allow you to control the maximum chunk size when you are
| mass importing data into the search engine. This allows you to fine
| tune each of these chunk sizes based on the power of the servers.
|
*/
'chunk' => [
'searchable' => 500,
'unsearchable' => 500,
],
/*
|--------------------------------------------------------------------------
| Soft Deletes
|--------------------------------------------------------------------------
|
| This option allows to control whether to keep soft deleted records in
| the search indexes. Maintaining soft deleted records can be useful
| if your application still needs to search for the records later.
|
*/
'soft_delete' => false,
/*
|--------------------------------------------------------------------------
| Algolia Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your Algolia settings. Algolia is a cloud hosted
| search engine which works great with Scout out of the box. Just plug
| in your application ID and admin API key to get started searching.
|
*/
'algolia' => [
'id' => env('ALGOLIA_APP_ID', ''),
'secret' => env('ALGOLIA_SECRET', ''),
],
];

View File

@ -30,17 +30,51 @@ return [
],
'exchange-api' => [
'default' => 'fixer',
'default' => 'exchange_rates',
'fixer' => [
'paid_account' => false,
'key' => env('fixer_api_key'),
'class' => 'Webkul\Core\Helpers\Exchange\FixerExchange'
]
],
'exchange_rates' => [
'class' => 'Webkul\Core\Helpers\Exchange\ExchangeRates'
],
],
'stripe' => [
'model' => App\User::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
]
],
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CALLBACK_URL'),
],
'twitter' => [
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => env('TWITTER_CALLBACK_URL'),
],
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_CALLBACK_URL'),
],
'linkedin' => [
'client_id' => env('LINKEDIN_CLIENT_ID'),
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
'redirect' => env('LINKEDIN_CALLBACK_URL'),
],
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_CALLBACK_URL'),
],
];

View File

@ -164,7 +164,7 @@ return [
|
*/
'secure' => env('SESSION_SECURE_COOKIE', false),
'secure' => env('SESSION_SECURE_COOKIE', null),
/*
|--------------------------------------------------------------------------

View File

@ -17,6 +17,21 @@ return [
// App\Console\Commands\ExampleCommand::class,
],
/*
|--------------------------------------------------------------------------
| Alias Whitelist
|--------------------------------------------------------------------------
|
| Tinker will not automatically alias classes in your vendor namespaces
| but you may explicitly allow a subset of classes to get aliased by
| adding the names of each of those classes to the following list.
|
*/
'alias' => [
//
],
/*
|--------------------------------------------------------------------------
| Alias Blacklist

View File

@ -1,6 +1,16 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Blade File Tracer
|--------------------------------------------------------------------------
|
| Shows blade file path in front
|
*/
'tracer' => false,
/*
|--------------------------------------------------------------------------

View File

@ -25,8 +25,9 @@
"vue-template-compiler": "^2.6.11"
},
"dependencies": {
"opencollective": "^1.0.3",
"opencollective-postinstall": "^2.0.1",
"opencollective": "^1.0.3"
"vee-validate": "^3.3.0"
},
"collective": {
"type": "opencollective",

View File

@ -2,7 +2,10 @@
namespace Webkul\API\Http\Controllers\Shop;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Log;
use Webkul\Checkout\Repositories\CartRepository;
use Webkul\Checkout\Repositories\CartItemRepository;
use Webkul\API\Http\Resources\Checkout\Cart as CartResource;
@ -42,9 +45,9 @@ class CartController extends Controller
/**
* Controller instance
*
* @param \Webkul\Checkout\Repositories\CartRepository $cartRepository
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
* @param \Webkul\Checkout\Repositories\WishlistRepository $wishlistRepository
* @param \Webkul\Checkout\Repositories\CartRepository $cartRepository
* @param \Webkul\Checkout\Repositories\CartItemRepository $cartItemRepository
* @param \Webkul\Checkout\Repositories\WishlistRepository $wishlistRepository
*/
public function __construct(
CartRepository $cartRepository,
@ -69,7 +72,7 @@ class CartController extends Controller
/**
* Get customer cart
*
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function get()
{
@ -86,10 +89,11 @@ class CartController extends Controller
/**
* Store a newly created resource in storage.
*
* @param int $id
* @return \Illuminate\Http\Response
* @param int $id
*
* @return \Illuminate\Http\JsonResponse
*/
public function store($id)
public function store($id): ?JsonResponse
{
if (request()->get('is_buy_now')) {
Event::dispatch('shop.item.buy-now', $id);
@ -97,36 +101,46 @@ class CartController extends Controller
Event::dispatch('checkout.cart.item.add.before', $id);
$result = Cart::addProduct($id, request()->except('_token'));
try {
$result = Cart::addProduct($id, request()->except('_token'));
if (! $result) {
$message = session()->get('warning') ?? session()->get('error');
if (is_array($result) && isset($result['warning'])) {
return response()->json([
'error' => $result['warning'],
], 400);
}
if ($customer = auth($this->guard)->user()) {
$this->wishlistRepository->deleteWhere(['product_id' => $id, 'customer_id' => $customer->id]);
}
Event::dispatch('checkout.cart.item.add.after', $result);
Cart::collectTotals();
$cart = Cart::getCart();
return response()->json([
'error' => session()->get('warning'),
], 400);
'message' => __('shop::app.checkout.cart.item.success'),
'data' => $cart ? new CartResource($cart) : null,
]);
} catch (Exception $e) {
Log::error('API CartController: ' . $e->getMessage(),
['product_id' => $id, 'cart_id' => cart()->getCart() ?? 0]);
return response()->json([
'error' => [
'message' => $e->getMessage(),
'code' => $e->getCode()
]
]);
}
if ($customer = auth($this->guard)->user()) {
$this->wishlistRepository->deleteWhere(['product_id' => $id, 'customer_id' => $customer->id]);
}
Event::dispatch('checkout.cart.item.add.after', $result);
Cart::collectTotals();
$cart = Cart::getCart();
return response()->json([
'message' => __('shop::app.checkout.cart.item.success'),
'data' => $cart ? new CartResource($cart) : null,
]);
}
/**
* Update the specified resource in storage.
*
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function update()
{
@ -161,7 +175,7 @@ class CartController extends Controller
/**
* Remove the specified resource from storage.
*
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function destroy()
{
@ -182,8 +196,9 @@ class CartController extends Controller
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
* @param int $id
*
* @return \Illuminate\Http\JsonResponse
*/
public function destroyItem($id)
{
@ -206,7 +221,9 @@ class CartController extends Controller
/**
* Function to move a already added product to wishlist will run only on customer authentication.
*
* @param \Webkul\Checkout\Repositories\CartItemRepository $id
* @param \Webkul\Checkout\Repositories\CartItemRepository $id
*
* @return \Illuminate\Http\JsonResponse
*/
public function moveToWishlist($id)
{

View File

@ -14,6 +14,8 @@ use Webkul\Checkout\Http\Requests\CustomerAddressForm;
use Webkul\Sales\Repositories\OrderRepository;
use Illuminate\Support\Str;
use Cart;
use Exception;
use Webkul\Shop\Http\Controllers\OnepageController;
class CheckoutController extends Controller
{
@ -197,26 +199,10 @@ class CheckoutController extends Controller
/**
* Validate order before creation
*
* @return mixed
* @throws Exception
*/
public function validateOrder()
public function validateOrder(): void
{
$cart = Cart::getCart();
if (! $cart->shipping_address) {
throw new \Exception(trans('Please check shipping address.'));
}
if (! $cart->billing_address) {
throw new \Exception(trans('Please check billing address.'));
}
if (! $cart->selected_shipping_rate) {
throw new \Exception(trans('Please specify shipping method.'));
}
if (! $cart->payment) {
throw new \Exception(trans('Please specify payment method.'));
}
app(OnepageController::class)->validateOrder();
}
}

View File

@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Password;
class ForgotPasswordController extends Controller
{
use SendsPasswordResetEmails;
/**
* Store a newly created resource in storage.
*

View File

@ -16,6 +16,9 @@ class CustomerAddress extends JsonResource
{
return [
'id' => $this->id,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'company_name' => $this->company_name,
'address1' => explode(PHP_EOL, $this->address1),
'country' => $this->country,
'country_name' => core()->country_name($this->country),
@ -27,4 +30,4 @@ class CustomerAddress extends JsonResource
'updated_at' => $this->updated_at,
];
}
}
}

View File

@ -100,10 +100,11 @@ class Order extends JsonResource
'channel' => $this->when($this->channel_id, new ChannelResource($this->channel)),
'shipping_address' => new OrderAddress($this->shipping_address),
'billing_address' => new OrderAddress($this->billing_address),
'updated_at' => $this->updated_at,
'items' => OrderItem::collection($this->items),
'invoices' => Invoice::collection($this->invoices),
'shipments' => Shipment::collection($this->shipments),
'downloadable_links' => $this->downloadable_link_purchased,
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
];
}

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=c7c2ef0a298910b82304",
"/css/admin.css": "/css/admin.css?id=f2c6fe51889bca1fb79d"
"/js/admin.js": "/js/admin.js?id=a14c779523092ac32b88",
"/css/admin.css": "/css/admin.css?id=56c882a611bdf3c058cb"
}

View File

@ -416,6 +416,26 @@ return [
'name' => 'admin::app.acl.delete',
'route' => 'admin.cart-rules.delete',
'sort' => 3,
], [
'key' => 'promotions.catalog-rules',
'name' => 'admin::app.acl.catalog-rules',
'route' => 'admin.catalog-rules.index',
'sort' => 1,
], [
'key' => 'promotions.catalog-rules.create',
'name' => 'admin::app.acl.create',
'route' => 'admin.catalog-rules.index',
'sort' => 1,
], [
'key' => 'promotions.catalog-rules.edit',
'name' => 'admin::app.acl.edit',
'route' => 'admin.catalog-rules.edit',
'sort' => 2,
], [
'key' => 'promotions.catalog-rules.delete',
'name' => 'admin::app.acl.delete',
'route' => 'admin.catalog-rules.delete',
'sort' => 3,
],
];

View File

@ -53,13 +53,13 @@ return [
'key' => 'catalog.categories',
'name' => 'admin::app.layouts.categories',
'route' => 'admin.catalog.categories.index',
'sort' => 3,
'sort' => 2,
'icon-class' => '',
], [
'key' => 'catalog.attributes',
'name' => 'admin::app.layouts.attributes',
'route' => 'admin.catalog.attributes.index',
'sort' => 2,
'sort' => 3,
'icon-class' => '',
], [
'key' => 'catalog.families',

View File

@ -99,6 +99,12 @@ return [
'type' => 'image',
'channel_based' => true,
'validation' => 'mimes:jpeg,bmp,png,jpg',
], [
'name' => 'favicon',
'title' => 'admin::app.admin.system.favicon',
'type' => 'image',
'channel_based' => true,
'validation' => 'mimes:jpeg,bmp,png,jpg',
],
],
], [
@ -120,10 +126,63 @@ return [
'type' => 'boolean',
],
],
], [
'key' => 'catalog.products.storefront',
'name' => 'admin::app.admin.system.storefront',
'sort' => 2,
'fields' => [
[
'name' => 'mode',
'title' => 'admin::app.admin.system.default-list-mode',
'type' => 'select',
'options' => [
[
'title' => 'admin::app.admin.system.grid',
'value' => 'grid',
], [
'title' => 'admin::app.admin.system.list',
'value' => 'list',
],
],
'channel_based' => true,
], [
'name' => 'products_per_page',
'title' => 'admin::app.admin.system.products-per-page',
'type' => 'text',
'info' => 'admin::app.admin.system.comma-seperated',
'channel_based' => true,
], [
'name' => 'sort_by',
'title' => 'admin::app.admin.system.sort-by',
'type' => 'select',
'options' => [
[
'title' => 'admin::app.admin.system.from-z-a',
'value' => 'name-desc',
], [
'title' => 'admin::app.admin.system.from-a-z',
'value' => 'name-asc',
], [
'title' => 'admin::app.admin.system.newest-first',
'value' => 'created_at-desc',
], [
'title' => 'admin::app.admin.system.oldest-first',
'value' => 'created_at-asc',
], [
'title' => 'admin::app.admin.system.cheapest-first',
'value' => 'price-asc',
], [
'title' => 'admin::app.admin.system.expensive-first',
'value' => 'price-desc',
],
],
'channel_based' => true,
]
],
], [
'key' => 'catalog.products.review',
'name' => 'admin::app.admin.system.review',
'sort' => 2,
'sort' => 3,
'fields' => [
[
'name' => 'guest_review',
@ -147,10 +206,68 @@ return [
'channel_based' => true,
],
],
], [
'key' => 'catalog.rich_snippets',
'name' => 'admin::app.admin.system.rich-snippets',
'sort' => 3,
], [
'key' => 'catalog.rich_snippets.products',
'name' => 'admin::app.admin.system.products',
'sort' => 1,
'fields' => [
[
'name' => 'enable',
'title' => 'admin::app.admin.system.enable',
'type' => 'boolean',
], [
'name' => 'show_sku',
'title' => 'admin::app.admin.system.show-sku',
'type' => 'boolean',
], [
'name' => 'show_weight',
'title' => 'admin::app.admin.system.show-weight',
'type' => 'boolean',
], [
'name' => 'show_categories',
'title' => 'admin::app.admin.system.show-categories',
'type' => 'boolean',
], [
'name' => 'show_images',
'title' => 'admin::app.admin.system.show-images',
'type' => 'boolean',
], [
'name' => 'show_reviews',
'title' => 'admin::app.admin.system.show-reviews',
'type' => 'boolean',
], [
'name' => 'show_ratings',
'title' => 'admin::app.admin.system.show-ratings',
'type' => 'boolean',
], [
'name' => 'show_offers',
'title' => 'admin::app.admin.system.show-offers',
'type' => 'boolean',
],
],
], [
'key' => 'catalog.rich_snippets.categories',
'name' => 'admin::app.admin.system.categories',
'sort' => 1,
'fields' => [
[
'name' => 'enable',
'title' => 'admin::app.admin.system.enable',
'type' => 'boolean',
], [
'name' => 'show_search_input_field',
'title' => 'admin::app.admin.system.show-search-input-field',
'type' => 'boolean',
]
]
], [
'key' => 'customer',
'name' => 'admin::app.admin.system.customer',
'sort' => 3,
'sort' => 4,
], [
'key' => 'customer.settings',
'name' => 'admin::app.admin.system.settings',
@ -193,7 +310,7 @@ return [
], [
'key' => 'emails',
'name' => 'admin::app.admin.emails.email',
'sort' => 1,
'sort' => 5,
], [
'key' => 'emails.general',
'name' => 'admin::app.admin.emails.notification_label',

View File

@ -3,6 +3,7 @@
namespace Webkul\Admin\DataGrids;
use Illuminate\Support\Facades\DB;
use Webkul\Customer\Models\CustomerAddress;
use Webkul\Ui\DataGrid\DataGrid;
use Webkul\Customer\Repositories\CustomerRepository;
@ -13,6 +14,7 @@ class AddressDataGrid extends DataGrid
*/
public $index = 'address_id';
/**
* @var string
*/
@ -42,10 +44,11 @@ class AddressDataGrid extends DataGrid
{
$customer = $this->customerRepository->find(request('id'));
$queryBuilder = DB::table('customer_addresses as ca')
$queryBuilder = DB::table('addresses as ca')
->leftJoin('countries', 'ca.country', '=', 'countries.code')
->leftJoin('customers as c', 'ca.customer_id', '=', 'c.id')
->addSelect('ca.id as address_id', 'ca.company_name', 'ca.address1', 'ca.country', DB::raw('' . DB::getTablePrefix() . 'countries.name as country_name'), 'ca.state', 'ca.city', 'ca.postcode', 'ca.phone', 'ca.default_address')
->where('ca.address_type', CustomerAddress::ADDRESS_TYPE)
->where('c.id', $customer->id);
$queryBuilder = $queryBuilder->leftJoin('country_states', function($qb) {
@ -56,13 +59,12 @@ class AddressDataGrid extends DataGrid
$queryBuilder->groupBy('ca.id')
->addSelect(DB::raw(DB::getTablePrefix() . 'country_states.default_name as state_name'));
$this->addFilter('address_id', 'ca.id');
$this->addFilter('company_name', 'ca.company_name');
$this->addFilter('address1', 'ca.address1');
$this->addFilter('postcode', 'ca.postcode');
$this->addFilter('city', 'ca.city');
$this->addFilter('state_name', DB::raw(DB::getTablePrefix() . 'country_states.default_name'));
$this->addFilter('country_name', DB::raw(DB::getTablePrefix() . 'countries.name'));
$this->addFilter('postcode', 'ca.postcode');
$this->addFilter('default_address', 'ca.default_address');
$this->setQueryBuilder($queryBuilder);
@ -71,9 +73,9 @@ class AddressDataGrid extends DataGrid
public function addColumns()
{
$this->addColumn([
'index' => 'address_id',
'label' => trans('admin::app.customers.addresses.address-id'),
'type' => 'number',
'index' => 'company_name',
'label' => trans('admin::app.customers.addresses.company-name'),
'type' => 'string',
'searchable' => true,
'sortable' => true,
'filterable' => true,
@ -88,6 +90,15 @@ class AddressDataGrid extends DataGrid
'filterable' => true,
]);
$this->addColumn([
'index' => 'postcode',
'label' => trans('admin::app.customers.addresses.postcode'),
'type' => 'string',
'searchable' => true,
'sortable' => true,
'filterable' => true,
]);
$this->addColumn([
'index' => 'city',
'label' => trans('admin::app.customers.addresses.city'),
@ -115,15 +126,6 @@ class AddressDataGrid extends DataGrid
'filterable' => true,
]);
$this->addColumn([
'index' => 'postcode',
'label' => trans('admin::app.customers.addresses.postcode'),
'type' => 'string',
'searchable' => true,
'sortable' => true,
'filterable' => true,
]);
$this->addColumn([
'index' => 'default_address',
'label' => trans('admin::app.customers.addresses.default-address'),
@ -168,4 +170,4 @@ class AddressDataGrid extends DataGrid
'method' => 'DELETE',
]);
}
}
}

View File

@ -2,8 +2,8 @@
namespace Webkul\Admin\DataGrids;
use Illuminate\Support\Facades\DB;
use Webkul\Ui\DataGrid\DataGrid;
use Illuminate\Support\Facades\DB;
class CartRuleDataGrid extends DataGrid
{
@ -11,18 +11,51 @@ class CartRuleDataGrid extends DataGrid
protected $sortOrder = 'desc';
protected $customer_group = 'all';
protected $channel = 'all';
public function __construct()
{
parent::__construct();
$this->customer_group = request()->get('customer_group') ?? 'all';
$this->channel = request()->get('channel') ?? 'all';
}
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('cart_rules')
->leftJoin('cart_rule_coupons', function($leftJoin) {
->leftJoin('cart_rule_coupons', function ($leftJoin) {
$leftJoin->on('cart_rule_coupons.cart_rule_id', '=', 'cart_rules.id')
->where('cart_rule_coupons.is_primary', 1);
->where('cart_rule_coupons.is_primary', 1);
})
->addSelect('cart_rules.id', 'name', 'cart_rule_coupons.code as coupon_code', 'status', 'starts_from', 'ends_till', 'sort_order');
->addSelect('cart_rules.id', 'name', 'cart_rule_coupons.code as coupon_code',
'status', 'starts_from', 'ends_till', 'sort_order');
$this->addFilter('id', 'cart_rules.id');
$this->addFilter('coupon_code', 'cart_rule_coupons.code');
if ($this->customer_group !== 'all') {
$queryBuilder->leftJoin(
'cart_rule_customer_groups',
'cart_rule_customer_groups.cart_rule_id',
'=',
'cart_rules.id'
);
$queryBuilder->where('cart_rule_customer_groups.customer_group_id', $this->customer_group);
}
if ($this->channel !== 'all') {
$queryBuilder->leftJoin(
'cart_rule_channels',
'cart_rule_channels.cart_rule_id',
'=',
'cart_rules.id');
$queryBuilder->where('cart_rule_channels.channel_id', $this->channel);
}
$this->setQueryBuilder($queryBuilder);
}
@ -80,7 +113,7 @@ class CartRuleDataGrid extends DataGrid
'searchable' => true,
'sortable' => true,
'filterable' => true,
'wrapper' => function($value) {
'wrapper' => function ($value) {
if ($value->status == 1) {
return trans('admin::app.datagrid.active');
} else {
@ -108,11 +141,19 @@ class CartRuleDataGrid extends DataGrid
'icon' => 'icon pencil-lg-icon',
]);
$this->addAction([
'title' => trans('admin::app.datagrid.copy'),
'method' => 'GET',
'route' => 'admin.cart-rules.copy',
'icon' => 'icon note-icon',
]);
$this->addAction([
'title' => trans('admin::app.datagrid.delete'),
'method' => 'POST',
'route' => 'admin.cart-rules.delete',
'icon' => 'icon trash-icon',
]);
}
}

View File

@ -117,9 +117,9 @@ class CustomerReviewDataGrid extends DataGrid
'action' => route('admin.customer.review.massupdate'),
'method' => 'PUT',
'options' => [
'Pending' => 0,
'Approve' => 1,
'Disapprove' => 2,
trans('admin::app.customers.reviews.pending') => 0,
trans('admin::app.customers.reviews.approved') => 1,
trans('admin::app.customers.reviews.disapproved') => 2,
],
]);
}

View File

@ -3,6 +3,7 @@
namespace Webkul\Admin\DataGrids;
use Illuminate\Support\Facades\DB;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Ui\DataGrid\DataGrid;
class OrderDataGrid extends DataGrid
@ -14,13 +15,13 @@ class OrderDataGrid extends DataGrid
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('orders')
->leftJoin('order_address as order_address_shipping', function($leftJoin) {
->leftJoin('addresses as order_address_shipping', function($leftJoin) {
$leftJoin->on('order_address_shipping.order_id', '=', 'orders.id')
->where('order_address_shipping.address_type', 'shipping');
->where('order_address_shipping.address_type', OrderAddress::ADDRESS_TYPE_SHIPPING);
})
->leftJoin('order_address as order_address_billing', function($leftJoin) {
->leftJoin('addresses as order_address_billing', function($leftJoin) {
$leftJoin->on('order_address_billing.order_id', '=', 'orders.id')
->where('order_address_billing.address_type', 'billing');
->where('order_address_billing.address_type', OrderAddress::ADDRESS_TYPE_BILLING);
})
->addSelect('orders.id','orders.increment_id', 'orders.base_sub_total', 'orders.base_grand_total', 'orders.created_at', 'channel_name', 'status')
->addSelect(DB::raw('CONCAT(' . DB::getTablePrefix() . 'order_address_billing.first_name, " ", ' . DB::getTablePrefix() . 'order_address_billing.last_name) as billed_to'))

View File

@ -3,6 +3,7 @@
namespace Webkul\Admin\DataGrids;
use Illuminate\Support\Facades\DB;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Ui\DataGrid\DataGrid;
class OrderRefundDataGrid extends DataGrid
@ -16,9 +17,9 @@ class OrderRefundDataGrid extends DataGrid
$queryBuilder = DB::table('refunds')
->select('refunds.id', 'orders.increment_id', 'refunds.state', 'refunds.base_grand_total', 'refunds.created_at')
->leftJoin('orders', 'refunds.order_id', '=', 'orders.id')
->leftJoin('order_address as order_address_billing', function($leftJoin) {
->leftJoin('addresses as order_address_billing', function($leftJoin) {
$leftJoin->on('order_address_billing.order_id', '=', 'orders.id')
->where('order_address_billing.address_type', 'billing');
->where('order_address_billing.address_type', OrderAddress::ADDRESS_TYPE_BILLING);
})
->addSelect(DB::raw('CONCAT(' . DB::getTablePrefix() . 'order_address_billing.first_name, " ", ' . DB::getTablePrefix() . 'order_address_billing.last_name) as billed_to'));

View File

@ -3,6 +3,7 @@
namespace Webkul\Admin\DataGrids;
use Illuminate\Support\Facades\DB;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Ui\DataGrid\DataGrid;
class OrderShipmentsDataGrid extends DataGrid
@ -14,9 +15,9 @@ class OrderShipmentsDataGrid extends DataGrid
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('shipments')
->leftJoin('order_address as order_address_shipping', function($leftJoin) {
->leftJoin('addresses as order_address_shipping', function($leftJoin) {
$leftJoin->on('order_address_shipping.order_id', '=', 'shipments.order_id')
->where('order_address_shipping.address_type', 'shipping');
->where('order_address_shipping.address_type', OrderAddress::ADDRESS_TYPE_SHIPPING);
})
->leftJoin('orders as ors', 'shipments.order_id', '=', 'ors.id')
->leftJoin('inventory_sources as is', 'shipments.inventory_source_id', '=', 'is.id')

View File

@ -22,7 +22,7 @@ class ProductDataGrid extends DataGrid
parent::__construct();
$this->locale = request()->get('locale') ?? 'all';
$this->channel = request()->get('channel') ?? 'all';
}
@ -45,14 +45,16 @@ class ProductDataGrid extends DataGrid
if ($this->locale !== 'all') {
$queryBuilder->where('locale', $this->locale);
} else {
$queryBuilder->whereNotNull('product_flat.name');
}
if ($this->channel !== 'all') {
$queryBuilder->where('channel', $this->channel);
}
if ($currentLocale = app()->getLocale()) {
$queryBuilder->where('product_flat.locale', $currentLocale);
}
$queryBuilder->groupBy('product_flat.product_id');
$this->addFilter('product_id', 'product_flat.product_id');
@ -119,7 +121,7 @@ class ProductDataGrid extends DataGrid
'sortable' => true,
'searchable' => false,
'filterable' => true,
'wrapper' => function($value) {
'wrapper' => function ($value) {
if ($value->status == 1) {
return trans('admin::app.datagrid.active');
} else {
@ -144,7 +146,7 @@ class ProductDataGrid extends DataGrid
'sortable' => true,
'searchable' => false,
'filterable' => false,
'wrapper' => function($value) {
'wrapper' => function ($value) {
if (is_null($value->quantity)) {
return 0;
} else {
@ -161,7 +163,7 @@ class ProductDataGrid extends DataGrid
'method' => 'GET',
'route' => 'admin.catalog.products.edit',
'icon' => 'icon pencil-lg-icon',
'condition' => function() {
'condition' => function () {
return true;
},
]);

View File

@ -11,11 +11,31 @@ class SliderDataGrid extends DataGrid
protected $sortOrder = 'desc';
protected $locale = 'all';
protected $channel = 'all';
public function __construct()
{
parent::__construct();
$this->locale = request()->get('locale') ?? 'all';
$this->channel = request()->get('channel') ?? 'all';
}
public function prepareQueryBuilder()
{
$queryBuilder = DB::table('sliders as sl')
->addSelect('sl.id as slider_id', 'sl.title', 'ch.name')
->leftJoin('channels as ch', 'sl.channel_id', '=', 'ch.id');
->addSelect('sl.id as slider_id', 'sl.title', 'sl.locale', 'ch.name', 'ch.code')
->leftJoin('channels as ch', 'sl.channel_id', '=', 'ch.id');
if ($this->locale !== 'all') {
$queryBuilder->where('locale', $this->locale);
}
if ($this->channel !== 'all') {
$queryBuilder->where('ch.code', $this->channel);
}
$this->addFilter('slider_id', 'sl.id');
$this->addFilter('channel_name', 'ch.name');
@ -51,6 +71,15 @@ class SliderDataGrid extends DataGrid
'sortable' => true,
'filterable' => true,
]);
$this->addColumn([
'index' => 'locale',
'label' => trans('admin::app.datagrid.locale'),
'type' => 'string',
'searchable' => true,
'sortable' => true,
'filterable' => true
]);
}
public function prepareActions()

View File

@ -10,6 +10,7 @@ use Webkul\User\Database\Seeders\DatabaseSeeder as UserSeeder;
use Webkul\Customer\Database\Seeders\DatabaseSeeder as CustomerSeeder;
use Webkul\Inventory\Database\Seeders\DatabaseSeeder as InventorySeeder;
use Webkul\CMS\Database\Seeders\DatabaseSeeder as CMSSeeder;
use Webkul\SocialLogin\Database\Seeders\DatabaseSeeder as SocialLoginSeeder;
class DatabaseSeeder extends Seeder
{
@ -27,5 +28,6 @@ class DatabaseSeeder extends Seeder
$this->call(UserSeeder::class);
$this->call(CustomerSeeder::class);
$this->call(CMSSeeder::class);
$this->call(SocialLoginSeeder::class);
}
}
}

View File

@ -2,10 +2,14 @@
namespace Webkul\Admin\Http\Controllers\Customer;
use Illuminate\Support\Facades\Event;
use Webkul\Admin\Http\Controllers\Controller;
use Webkul\Customer\Repositories\CustomerRepository;
use Webkul\Customer\Repositories\CustomerAddressRepository;
use Webkul\Customer\Repositories\CustomerGroupRepository;
use Webkul\Core\Repositories\ChannelRepository;
use Webkul\Admin\Mail\NewCustomerNotification;
use Mail;
@ -25,6 +29,13 @@ class CustomerController extends Controller
*/
protected $customerRepository;
/**
* CustomerAddress Repository object
*
* @var \Webkul\Customer\Repositories\CustomerAddressRepository
*/
protected $customerAddressRepository;
/**
* CustomerGroupRepository object
*
@ -43,26 +54,26 @@ class CustomerController extends Controller
* Create a new controller instance.
*
* @param \Webkul\Customer\Repositories\CustomerRepository $customerRepository
* @param \Webkul\Customer\Repositories\CustomerAddressRepository $customerAddressRepository
* @param \Webkul\Customer\Repositories\CustomerGroupRepository $customerGroupRepository
* @param \Webkul\Core\Repositories\ChannelRepository $channelRepository
*/
public function __construct(
CustomerRepository $customerRepository,
CustomerAddressRepository $customerAddressRepository,
CustomerGroupRepository $customerGroupRepository,
ChannelRepository $channelRepository
)
{
$this->_config = request('_config');
$this->middleware('admin');
$this->customerRepository = $customerRepository;
$this->customerGroupRepository = $customerGroupRepository;
$this->channelRepository = $channelRepository;
}
)
{
$this->_config = request('_config');
$this->middleware('admin');
$this->customerRepository = $customerRepository;
$this->customerAddressRepository = $customerAddressRepository;
$this->customerGroupRepository = $customerGroupRepository;
$this->channelRepository = $channelRepository;
}
/**
* Display a listing of the resource.
@ -111,8 +122,12 @@ class CustomerController extends Controller
$data['is_verified'] = 1;
Event::dispatch('customer.registration.before');
$customer = $this->customerRepository->create($data);
Event::dispatch('customer.registration.after', $customer);
try {
$configKey = 'emails.general.notifications.emails.general.notifications.customer';
if (core()->getConfigData($configKey)) {
@ -136,12 +151,11 @@ class CustomerController extends Controller
public function edit($id)
{
$customer = $this->customerRepository->findOrFail($id);
$address = $this->customerAddressRepository->find($id);
$customerGroup = $this->customerGroupRepository->findWhere([['code', '<>', 'guest']]);
$channelName = $this->channelRepository->all();
return view($this->_config['view'], compact('customer', 'customerGroup', 'channelName'));
return view($this->_config['view'], compact('customer', 'address', 'customerGroup', 'channelName'));
}
/**
@ -164,7 +178,11 @@ class CustomerController extends Controller
$data['status'] = ! isset($data['status']) ? 0 : 1;
$this->customerRepository->update($data, $id);
Event::dispatch('customer.update.before');
$customer = $this->customerRepository->update($data, $id);
Event::dispatch('customer.update.after', $customer);
session()->flash('success', trans('admin::app.response.update-success', ['name' => 'Customer']));

View File

@ -241,6 +241,8 @@ class DashboardController extends Controller
->addSelect('id', 'customer_id', 'customer_email', 'customer_first_name', 'customer_last_name')
->where('orders.created_at', '>=', $this->startDate)
->where('orders.created_at', '<=', $this->endDate)
->where('orders.status', '<>', 'closed')
->where('orders.status', '<>', 'canceled')
->groupBy('customer_email')
->orderBy('total_base_grand_total', 'DESC')
->limit(5)

View File

@ -2,8 +2,10 @@
namespace Webkul\Admin\Http\Controllers\Sales;
use Illuminate\Support\Facades\Event;
use Webkul\Admin\Http\Controllers\Controller;
use Webkul\Sales\Repositories\OrderRepository;
use \Webkul\Sales\Repositories\OrderCommentRepository;
class OrderController extends Controller
{
@ -21,19 +23,32 @@ class OrderController extends Controller
*/
protected $orderRepository;
/**
* OrderCommentRepository object
*
* @var \Webkul\Sales\Repositories\OrderCommentRepository
*/
protected $orderCommentRepository;
/**
* Create a new controller instance.
*
* @param \Webkul\Sales\Repositories\OrderRepository $orderRepository
* @param \Webkul\Sales\Repositories\OrderCommentRepository $orderCommentRepository
* @return void
*/
public function __construct(OrderRepository $orderRepository)
public function __construct(
OrderRepository $orderRepository,
OrderCommentRepository $orderCommentRepository
)
{
$this->middleware('admin');
$this->_config = request('_config');
$this->orderRepository = $orderRepository;
$this->orderCommentRepository = $orderCommentRepository;
}
/**
@ -77,4 +92,29 @@ class OrderController extends Controller
return redirect()->back();
}
/**
* Add comment to the order
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function comment($id)
{
$data = array_merge(request()->all(), [
'order_id' => $id,
]);
$data['customer_notified'] = isset($data['customer_notified']) ? 1 : 0;
Event::dispatch('sales.order.comment.create.before', $data);
$comment = $this->orderCommentRepository->create($data);
Event::dispatch('sales.order.comment.create.after', $comment);
session()->flash('success', trans('admin::app.sales.orders.comment-added-success'));
return redirect()->back();
}
}

View File

@ -107,6 +107,10 @@ class RefundController extends Controller
$data = request()->all();
if (! $data['refund']['shipping']) {
$data['refund']['shipping'] = 0;
}
$totals = $this->refundRepository->getOrderItemsRefundSummary($data['refund']['items'], $orderId);
$maxRefundAmount = $totals['grand_total']['price'] - $order->refunds()->sum('base_adjustment_refund');

View File

@ -108,8 +108,6 @@ class ShipmentController extends Controller
}
$this->validate(request(), [
'shipment.carrier_title' => 'required',
'shipment.track_number' => 'required',
'shipment.source' => 'required',
'shipment.items.*.*' => 'required|numeric|min:0',
]);

View File

@ -7,69 +7,69 @@ Route::group(['middleware' => ['web']], function () {
// Login Routes
Route::get('/login', 'Webkul\User\Http\Controllers\SessionController@create')->defaults('_config', [
'view' => 'admin::users.sessions.create'
'view' => 'admin::users.sessions.create',
])->name('admin.session.create');
//login post route to admin auth controller
Route::post('/login', 'Webkul\User\Http\Controllers\SessionController@store')->defaults('_config', [
'redirect' => 'admin.dashboard.index'
'redirect' => 'admin.dashboard.index',
])->name('admin.session.store');
// Forget Password Routes
Route::get('/forget-password', 'Webkul\User\Http\Controllers\ForgetPasswordController@create')->defaults('_config', [
'view' => 'admin::users.forget-password.create'
'view' => 'admin::users.forget-password.create',
])->name('admin.forget-password.create');
Route::post('/forget-password', 'Webkul\User\Http\Controllers\ForgetPasswordController@store')->name('admin.forget-password.store');
// Reset Password Routes
Route::get('/reset-password/{token}', 'Webkul\User\Http\Controllers\ResetPasswordController@create')->defaults('_config', [
'view' => 'admin::users.reset-password.create'
'view' => 'admin::users.reset-password.create',
])->name('admin.reset-password.create');
Route::post('/reset-password', 'Webkul\User\Http\Controllers\ResetPasswordController@store')->defaults('_config', [
'redirect' => 'admin.dashboard.index'
'redirect' => 'admin.dashboard.index',
])->name('admin.reset-password.store');
// Admin Routes
Route::group(['middleware' => ['admin']], function () {
Route::get('/logout', 'Webkul\User\Http\Controllers\SessionController@destroy')->defaults('_config', [
'redirect' => 'admin.session.create'
'redirect' => 'admin.session.create',
])->name('admin.session.destroy');
// Dashboard Route
Route::get('dashboard', 'Webkul\Admin\Http\Controllers\DashboardController@index')->defaults('_config', [
'view' => 'admin::dashboard.index'
'view' => 'admin::dashboard.index',
])->name('admin.dashboard.index');
//Customer Management Routes
Route::get('customers', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@index')->defaults('_config', [
'view' => 'admin::customers.index'
'view' => 'admin::customers.index',
])->name('admin.customer.index');
Route::get('customers/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@create')->defaults('_config',[
'view' => 'admin::customers.create'
Route::get('customers/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@create')->defaults('_config', [
'view' => 'admin::customers.create',
])->name('admin.customer.create');
Route::post('customers/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@store')->defaults('_config',[
'redirect' => 'admin.customer.index'
Route::post('customers/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@store')->defaults('_config', [
'redirect' => 'admin.customer.index',
])->name('admin.customer.store');
Route::get('customers/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@edit')->defaults('_config',[
'view' => 'admin::customers.edit'
Route::get('customers/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@edit')->defaults('_config', [
'view' => 'admin::customers.edit',
])->name('admin.customer.edit');
Route::get('customers/note/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@createNote')->defaults('_config',[
'view' => 'admin::customers.note'
Route::get('customers/note/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@createNote')->defaults('_config', [
'view' => 'admin::customers.note',
])->name('admin.customer.note.create');
Route::put('customers/note/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@storeNote')->defaults('_config',[
'redirect' => 'admin.customer.index'
Route::put('customers/note/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@storeNote')->defaults('_config', [
'redirect' => 'admin.customer.index',
])->name('admin.customer.note.store');
Route::put('customers/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@update')->defaults('_config', [
'redirect' => 'admin.customer.index'
'redirect' => 'admin.customer.index',
])->name('admin.customer.update');
Route::post('customers/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@destroy')->name('admin.customer.delete');
@ -78,95 +78,95 @@ Route::group(['middleware' => ['web']], function () {
Route::post('customers/masssupdate', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@massUpdate')->name('admin.customer.mass-update');
Route::get('reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config',[
'view' => 'admin::customers.reviews.index'
Route::get('reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config', [
'view' => 'admin::customers.reviews.index',
])->name('admin.customer.review.index');
//Customer's addresses routes
Route::get('customers/{id}/addresses', 'Webkul\Admin\Http\Controllers\Customer\AddressController@index')->defaults('_config', [
'view' => 'admin::customers.addresses.index'
'view' => 'admin::customers.addresses.index',
])->name('admin.customer.addresses.index');
Route::get('customers/{id}/addresses/create', 'Webkul\Admin\Http\Controllers\Customer\AddressController@create')->defaults('_config',[
'view' => 'admin::customers.addresses.create'
Route::get('customers/{id}/addresses/create', 'Webkul\Admin\Http\Controllers\Customer\AddressController@create')->defaults('_config', [
'view' => 'admin::customers.addresses.create',
])->name('admin.customer.addresses.create');
Route::post('customers/{id}/addresses/create', 'Webkul\Admin\Http\Controllers\Customer\AddressController@store')->defaults('_config',[
'redirect' => 'admin.customer.addresses.index'
Route::post('customers/{id}/addresses/create', 'Webkul\Admin\Http\Controllers\Customer\AddressController@store')->defaults('_config', [
'redirect' => 'admin.customer.addresses.index',
])->name('admin.customer.addresses.store');
Route::get('customers/addresses/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\AddressController@edit')->defaults('_config',[
'view' => 'admin::customers.addresses.edit'
Route::get('customers/addresses/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\AddressController@edit')->defaults('_config', [
'view' => 'admin::customers.addresses.edit',
])->name('admin.customer.addresses.edit');
Route::put('customers/addresses/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\AddressController@update')->defaults('_config', [
'redirect' => 'admin.customer.addresses.index'
'redirect' => 'admin.customer.addresses.index',
])->name('admin.customer.addresses.update');
Route::post('customers/addresses/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\AddressController@destroy')->defaults('_config', [
'redirect' => 'admin.customer.addresses.index'
'redirect' => 'admin.customer.addresses.index',
])->name('admin.customer.addresses.delete');
//mass destroy
Route::post('customers/{id}/addresses', 'Webkul\Admin\Http\Controllers\Customer\AddressController@massDestroy')->defaults('_config', [
'redirect' => 'admin.customer.addresses.index'
'redirect' => 'admin.customer.addresses.index',
])->name('admin.customer.addresses.massdelete');
// Configuration routes
Route::get('configuration/{slug?}/{slug2?}', 'Webkul\Admin\Http\Controllers\ConfigurationController@index')->defaults('_config', [
'view' => 'admin::configuration.index'
'view' => 'admin::configuration.index',
])->name('admin.configuration.index');
Route::post('configuration/{slug?}/{slug2?}', 'Webkul\Admin\Http\Controllers\ConfigurationController@store')->defaults('_config', [
'redirect' => 'admin.configuration.index'
'redirect' => 'admin.configuration.index',
])->name('admin.configuration.index.store');
Route::get('configuration/{slug?}/{slug2?}/{path}', 'Webkul\Admin\Http\Controllers\ConfigurationController@download')->defaults('_config', [
'redirect' => 'admin.configuration.index'
'redirect' => 'admin.configuration.index',
])->name('admin.configuration.download');
// Reviews Routes
Route::get('reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@edit')->defaults('_config',[
'view' => 'admin::customers.reviews.edit'
Route::get('reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@edit')->defaults('_config', [
'view' => 'admin::customers.reviews.edit',
])->name('admin.customer.review.edit');
Route::put('reviews/edit/{id}', 'Webkul\Product\Http\Controllers\ReviewController@update')->defaults('_config', [
'redirect' => 'admin.customer.review.index'
'redirect' => 'admin.customer.review.index',
])->name('admin.customer.review.update');
Route::post('reviews/delete/{id}', 'Webkul\Product\Http\Controllers\ReviewController@destroy')->defaults('_config', [
'redirect' => 'admin.customer.review.index'
'redirect' => 'admin.customer.review.index',
])->name('admin.customer.review.delete');
//mass destroy
Route::post('reviews/massdestroy', 'Webkul\Product\Http\Controllers\ReviewController@massDestroy')->defaults('_config', [
'redirect' => 'admin.customer.review.index'
'redirect' => 'admin.customer.review.index',
])->name('admin.customer.review.massdelete');
//mass update
Route::post('reviews/massupdate', 'Webkul\Product\Http\Controllers\ReviewController@massUpdate')->defaults('_config', [
'redirect' => 'admin.customer.review.index'
'redirect' => 'admin.customer.review.index',
])->name('admin.customer.review.massupdate');
// Customer Groups Routes
Route::get('groups', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@index')->defaults('_config',[
'view' => 'admin::customers.groups.index'
Route::get('groups', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@index')->defaults('_config', [
'view' => 'admin::customers.groups.index',
])->name('admin.groups.index');
Route::get('groups/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@create')->defaults('_config',[
'view' => 'admin::customers.groups.create'
Route::get('groups/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@create')->defaults('_config', [
'view' => 'admin::customers.groups.create',
])->name('admin.groups.create');
Route::post('groups/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@store')->defaults('_config',[
'redirect' => 'admin.groups.index'
Route::post('groups/create', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@store')->defaults('_config', [
'redirect' => 'admin.groups.index',
])->name('admin.groups.store');
Route::get('groups/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@edit')->defaults('_config',[
'view' => 'admin::customers.groups.edit'
Route::get('groups/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@edit')->defaults('_config', [
'view' => 'admin::customers.groups.edit',
])->name('admin.groups.edit');
Route::put('groups/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@update')->defaults('_config',[
'redirect' => 'admin.groups.index'
Route::put('groups/edit/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@update')->defaults('_config', [
'redirect' => 'admin.groups.index',
])->name('admin.groups.update');
Route::post('groups/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerGroupController@destroy')->name('admin.groups.delete');
@ -176,77 +176,79 @@ Route::group(['middleware' => ['web']], function () {
Route::prefix('sales')->group(function () {
// Sales Order Routes
Route::get('/orders', 'Webkul\Admin\Http\Controllers\Sales\OrderController@index')->defaults('_config', [
'view' => 'admin::sales.orders.index'
'view' => 'admin::sales.orders.index',
])->name('admin.sales.orders.index');
Route::get('/orders/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\OrderController@view')->defaults('_config', [
'view' => 'admin::sales.orders.view'
'view' => 'admin::sales.orders.view',
])->name('admin.sales.orders.view');
Route::get('/orders/cancel/{id}', 'Webkul\Admin\Http\Controllers\Sales\OrderController@cancel')->defaults('_config', [
'view' => 'admin::sales.orders.cancel'
'view' => 'admin::sales.orders.cancel',
])->name('admin.sales.orders.cancel');
Route::post('/orders/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\OrderController@comment')->name('admin.sales.orders.comment');
// Sales Invoices Routes
Route::get('/invoices', 'Webkul\Admin\Http\Controllers\Sales\InvoiceController@index')->defaults('_config', [
'view' => 'admin::sales.invoices.index'
'view' => 'admin::sales.invoices.index',
])->name('admin.sales.invoices.index');
Route::get('/invoices/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\InvoiceController@create')->defaults('_config', [
'view' => 'admin::sales.invoices.create'
'view' => 'admin::sales.invoices.create',
])->name('admin.sales.invoices.create');
Route::post('/invoices/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\InvoiceController@store')->defaults('_config', [
'redirect' => 'admin.sales.orders.view'
'redirect' => 'admin.sales.orders.view',
])->name('admin.sales.invoices.store');
Route::get('/invoices/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\InvoiceController@view')->defaults('_config', [
'view' => 'admin::sales.invoices.view'
'view' => 'admin::sales.invoices.view',
])->name('admin.sales.invoices.view');
Route::get('/invoices/print/{id}', 'Webkul\Admin\Http\Controllers\Sales\InvoiceController@print')->defaults('_config', [
'view' => 'admin::sales.invoices.print'
'view' => 'admin::sales.invoices.print',
])->name('admin.sales.invoices.print');
// Sales Shipments Routes
Route::get('/shipments', 'Webkul\Admin\Http\Controllers\Sales\ShipmentController@index')->defaults('_config', [
'view' => 'admin::sales.shipments.index'
'view' => 'admin::sales.shipments.index',
])->name('admin.sales.shipments.index');
Route::get('/shipments/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\ShipmentController@create')->defaults('_config', [
'view' => 'admin::sales.shipments.create'
'view' => 'admin::sales.shipments.create',
])->name('admin.sales.shipments.create');
Route::post('/shipments/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\ShipmentController@store')->defaults('_config', [
'redirect' => 'admin.sales.orders.view'
'redirect' => 'admin.sales.orders.view',
])->name('admin.sales.shipments.store');
Route::get('/shipments/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\ShipmentController@view')->defaults('_config', [
'view' => 'admin::sales.shipments.view'
'view' => 'admin::sales.shipments.view',
])->name('admin.sales.shipments.view');
// Sales Redunds Routes
Route::get('/refunds', 'Webkul\Admin\Http\Controllers\Sales\RefundController@index')->defaults('_config', [
'view' => 'admin::sales.refunds.index'
'view' => 'admin::sales.refunds.index',
])->name('admin.sales.refunds.index');
Route::get('/refunds/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@create')->defaults('_config', [
'view' => 'admin::sales.refunds.create'
'view' => 'admin::sales.refunds.create',
])->name('admin.sales.refunds.create');
Route::post('/refunds/create/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@store')->defaults('_config', [
'redirect' => 'admin.sales.orders.view'
'redirect' => 'admin.sales.orders.view',
])->name('admin.sales.refunds.store');
Route::post('/refunds/update-qty/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@updateQty')->defaults('_config', [
'redirect' => 'admin.sales.orders.view'
'redirect' => 'admin.sales.orders.view',
])->name('admin.sales.refunds.update_qty');
Route::get('/refunds/view/{id}', 'Webkul\Admin\Http\Controllers\Sales\RefundController@view')->defaults('_config', [
'view' => 'admin::sales.refunds.view'
'view' => 'admin::sales.refunds.view',
])->name('admin.sales.refunds.view');
});
@ -256,23 +258,23 @@ Route::group(['middleware' => ['web']], function () {
// Catalog Product Routes
Route::get('/products', 'Webkul\Product\Http\Controllers\ProductController@index')->defaults('_config', [
'view' => 'admin::catalog.products.index'
'view' => 'admin::catalog.products.index',
])->name('admin.catalog.products.index');
Route::get('/products/create', 'Webkul\Product\Http\Controllers\ProductController@create')->defaults('_config', [
'view' => 'admin::catalog.products.create'
'view' => 'admin::catalog.products.create',
])->name('admin.catalog.products.create');
Route::post('/products/create', 'Webkul\Product\Http\Controllers\ProductController@store')->defaults('_config', [
'redirect' => 'admin.catalog.products.edit'
'redirect' => 'admin.catalog.products.edit',
])->name('admin.catalog.products.store');
Route::get('/products/edit/{id}', 'Webkul\Product\Http\Controllers\ProductController@edit')->defaults('_config', [
'view' => 'admin::catalog.products.edit'
'view' => 'admin::catalog.products.edit',
])->name('admin.catalog.products.edit');
Route::put('/products/edit/{id}', 'Webkul\Product\Http\Controllers\ProductController@update')->defaults('_config', [
'redirect' => 'admin.catalog.products.index'
'redirect' => 'admin.catalog.products.index',
])->name('admin.catalog.products.update');
Route::post('/products/upload-file/{id}', 'Webkul\Product\Http\Controllers\ProductController@uploadLink')->name('admin.catalog.products.upload_link');
@ -287,44 +289,44 @@ Route::group(['middleware' => ['web']], function () {
//product massdelete
Route::post('products/massdelete', 'Webkul\Product\Http\Controllers\ProductController@massDestroy')->defaults('_config', [
'redirect' => 'admin.catalog.products.index'
'redirect' => 'admin.catalog.products.index',
])->name('admin.catalog.products.massdelete');
//product massupdate
Route::post('products/massupdate', 'Webkul\Product\Http\Controllers\ProductController@massUpdate')->defaults('_config', [
'redirect' => 'admin.catalog.products.index'
'redirect' => 'admin.catalog.products.index',
])->name('admin.catalog.products.massupdate');
//product search for linked products
Route::get('products/search', 'Webkul\Product\Http\Controllers\ProductController@productLinkSearch')->defaults('_config', [
'view' => 'admin::catalog.products.edit'
'view' => 'admin::catalog.products.edit',
])->name('admin.catalog.products.productlinksearch');
Route::get('products/search-simple-products', 'Webkul\Product\Http\Controllers\ProductController@searchSimpleProducts')->name('admin.catalog.products.search_simple_product');
Route::get('/products/{id}/{attribute_id}', 'Webkul\Product\Http\Controllers\ProductController@download')->defaults('_config', [
'view' => 'admin.catalog.products.edit'
'view' => 'admin.catalog.products.edit',
])->name('admin.catalog.products.file.download');
// Catalog Category Routes
Route::get('/categories', 'Webkul\Category\Http\Controllers\CategoryController@index')->defaults('_config', [
'view' => 'admin::catalog.categories.index'
'view' => 'admin::catalog.categories.index',
])->name('admin.catalog.categories.index');
Route::get('/categories/create', 'Webkul\Category\Http\Controllers\CategoryController@create')->defaults('_config', [
'view' => 'admin::catalog.categories.create'
'view' => 'admin::catalog.categories.create',
])->name('admin.catalog.categories.create');
Route::post('/categories/create', 'Webkul\Category\Http\Controllers\CategoryController@store')->defaults('_config', [
'redirect' => 'admin.catalog.categories.index'
'redirect' => 'admin.catalog.categories.index',
])->name('admin.catalog.categories.store');
Route::get('/categories/edit/{id}', 'Webkul\Category\Http\Controllers\CategoryController@edit')->defaults('_config', [
'view' => 'admin::catalog.categories.edit'
'view' => 'admin::catalog.categories.edit',
])->name('admin.catalog.categories.edit');
Route::put('/categories/edit/{id}', 'Webkul\Category\Http\Controllers\CategoryController@update')->defaults('_config', [
'redirect' => 'admin.catalog.categories.index'
'redirect' => 'admin.catalog.categories.index',
])->name('admin.catalog.categories.update');
Route::post('/categories/delete/{id}', 'Webkul\Category\Http\Controllers\CategoryController@destroy')->name('admin.catalog.categories.delete');
@ -332,23 +334,23 @@ Route::group(['middleware' => ['web']], function () {
// Catalog Attribute Routes
Route::get('/attributes', 'Webkul\Attribute\Http\Controllers\AttributeController@index')->defaults('_config', [
'view' => 'admin::catalog.attributes.index'
'view' => 'admin::catalog.attributes.index',
])->name('admin.catalog.attributes.index');
Route::get('/attributes/create', 'Webkul\Attribute\Http\Controllers\AttributeController@create')->defaults('_config', [
'view' => 'admin::catalog.attributes.create'
'view' => 'admin::catalog.attributes.create',
])->name('admin.catalog.attributes.create');
Route::post('/attributes/create', 'Webkul\Attribute\Http\Controllers\AttributeController@store')->defaults('_config', [
'redirect' => 'admin.catalog.attributes.index'
'redirect' => 'admin.catalog.attributes.index',
])->name('admin.catalog.attributes.store');
Route::get('/attributes/edit/{id}', 'Webkul\Attribute\Http\Controllers\AttributeController@edit')->defaults('_config', [
'view' => 'admin::catalog.attributes.edit'
'view' => 'admin::catalog.attributes.edit',
])->name('admin.catalog.attributes.edit');
Route::put('/attributes/edit/{id}', 'Webkul\Attribute\Http\Controllers\AttributeController@update')->defaults('_config', [
'redirect' => 'admin.catalog.attributes.index'
'redirect' => 'admin.catalog.attributes.index',
])->name('admin.catalog.attributes.update');
Route::post('/attributes/delete/{id}', 'Webkul\Attribute\Http\Controllers\AttributeController@destroy')->name('admin.catalog.attributes.delete');
@ -357,23 +359,23 @@ Route::group(['middleware' => ['web']], function () {
// Catalog Family Routes
Route::get('/families', 'Webkul\Attribute\Http\Controllers\AttributeFamilyController@index')->defaults('_config', [
'view' => 'admin::catalog.families.index'
'view' => 'admin::catalog.families.index',
])->name('admin.catalog.families.index');
Route::get('/families/create', 'Webkul\Attribute\Http\Controllers\AttributeFamilyController@create')->defaults('_config', [
'view' => 'admin::catalog.families.create'
'view' => 'admin::catalog.families.create',
])->name('admin.catalog.families.create');
Route::post('/families/create', 'Webkul\Attribute\Http\Controllers\AttributeFamilyController@store')->defaults('_config', [
'redirect' => 'admin.catalog.families.index'
'redirect' => 'admin.catalog.families.index',
])->name('admin.catalog.families.store');
Route::get('/families/edit/{id}', 'Webkul\Attribute\Http\Controllers\AttributeFamilyController@edit')->defaults('_config', [
'view' => 'admin::catalog.families.edit'
'view' => 'admin::catalog.families.edit',
])->name('admin.catalog.families.edit');
Route::put('/families/edit/{id}', 'Webkul\Attribute\Http\Controllers\AttributeFamilyController@update')->defaults('_config', [
'redirect' => 'admin.catalog.families.index'
'redirect' => 'admin.catalog.families.index',
])->name('admin.catalog.families.update');
Route::post('/families/delete/{id}', 'Webkul\Attribute\Http\Controllers\AttributeFamilyController@destroy')->name('admin.catalog.families.delete');
@ -382,59 +384,59 @@ Route::group(['middleware' => ['web']], function () {
// User Routes
//datagrid for backend users
Route::get('/users', 'Webkul\User\Http\Controllers\UserController@index')->defaults('_config', [
'view' => 'admin::users.users.index'
'view' => 'admin::users.users.index',
])->name('admin.users.index');
//create backend user get
Route::get('/users/create', 'Webkul\User\Http\Controllers\UserController@create')->defaults('_config', [
'view' => 'admin::users.users.create'
'view' => 'admin::users.users.create',
])->name('admin.users.create');
//create backend user post
Route::post('/users/create', 'Webkul\User\Http\Controllers\UserController@store')->defaults('_config', [
'redirect' => 'admin.users.index'
'redirect' => 'admin.users.index',
])->name('admin.users.store');
//delete backend user view
Route::get('/users/edit/{id}', 'Webkul\User\Http\Controllers\UserController@edit')->defaults('_config', [
'view' => 'admin::users.users.edit'
'view' => 'admin::users.users.edit',
])->name('admin.users.edit');
//edit backend user submit
Route::put('/users/edit/{id}', 'Webkul\User\Http\Controllers\UserController@update')->defaults('_config', [
'redirect' => 'admin.users.index'
'redirect' => 'admin.users.index',
])->name('admin.users.update');
//delete backend user
Route::post('/users/delete/{id}', 'Webkul\User\Http\Controllers\UserController@destroy')->name('admin.users.delete');
Route::get('/users/confirm/{id}', 'Webkul\User\Http\Controllers\UserController@confirm')->defaults('_config', [
'view' => 'admin::customers.confirm-password'
'view' => 'admin::customers.confirm-password',
])->name('super.users.confirm');
Route::post('/users/confirm/{id}', 'Webkul\User\Http\Controllers\UserController@destroySelf')->defaults('_config', [
'redirect' => 'admin.users.index'
'redirect' => 'admin.users.index',
])->name('admin.users.destroy');
// User Role Routes
Route::get('/roles', 'Webkul\User\Http\Controllers\RoleController@index')->defaults('_config', [
'view' => 'admin::users.roles.index'
'view' => 'admin::users.roles.index',
])->name('admin.roles.index');
Route::get('/roles/create', 'Webkul\User\Http\Controllers\RoleController@create')->defaults('_config', [
'view' => 'admin::users.roles.create'
'view' => 'admin::users.roles.create',
])->name('admin.roles.create');
Route::post('/roles/create', 'Webkul\User\Http\Controllers\RoleController@store')->defaults('_config', [
'redirect' => 'admin.roles.index'
'redirect' => 'admin.roles.index',
])->name('admin.roles.store');
Route::get('/roles/edit/{id}', 'Webkul\User\Http\Controllers\RoleController@edit')->defaults('_config', [
'view' => 'admin::users.roles.edit'
'view' => 'admin::users.roles.edit',
])->name('admin.roles.edit');
Route::put('/roles/edit/{id}', 'Webkul\User\Http\Controllers\RoleController@update')->defaults('_config', [
'redirect' => 'admin.roles.index'
'redirect' => 'admin.roles.index',
])->name('admin.roles.update');
Route::post('/roles/delete/{id}', 'Webkul\User\Http\Controllers\RoleController@destroy')->name('admin.roles.delete');
@ -442,23 +444,23 @@ Route::group(['middleware' => ['web']], function () {
// Locale Routes
Route::get('/locales', 'Webkul\Core\Http\Controllers\LocaleController@index')->defaults('_config', [
'view' => 'admin::settings.locales.index'
'view' => 'admin::settings.locales.index',
])->name('admin.locales.index');
Route::get('/locales/create', 'Webkul\Core\Http\Controllers\LocaleController@create')->defaults('_config', [
'view' => 'admin::settings.locales.create'
'view' => 'admin::settings.locales.create',
])->name('admin.locales.create');
Route::post('/locales/create', 'Webkul\Core\Http\Controllers\LocaleController@store')->defaults('_config', [
'redirect' => 'admin.locales.index'
'redirect' => 'admin.locales.index',
])->name('admin.locales.store');
Route::get('/locales/edit/{id}', 'Webkul\Core\Http\Controllers\LocaleController@edit')->defaults('_config', [
'view' => 'admin::settings.locales.edit'
'view' => 'admin::settings.locales.edit',
])->name('admin.locales.edit');
Route::put('/locales/edit/{id}', 'Webkul\Core\Http\Controllers\LocaleController@update')->defaults('_config', [
'redirect' => 'admin.locales.index'
'redirect' => 'admin.locales.index',
])->name('admin.locales.update');
Route::post('/locales/delete/{id}', 'Webkul\Core\Http\Controllers\LocaleController@destroy')->name('admin.locales.delete');
@ -466,23 +468,23 @@ Route::group(['middleware' => ['web']], function () {
// Currency Routes
Route::get('/currencies', 'Webkul\Core\Http\Controllers\CurrencyController@index')->defaults('_config', [
'view' => 'admin::settings.currencies.index'
'view' => 'admin::settings.currencies.index',
])->name('admin.currencies.index');
Route::get('/currencies/create', 'Webkul\Core\Http\Controllers\CurrencyController@create')->defaults('_config', [
'view' => 'admin::settings.currencies.create'
'view' => 'admin::settings.currencies.create',
])->name('admin.currencies.create');
Route::post('/currencies/create', 'Webkul\Core\Http\Controllers\CurrencyController@store')->defaults('_config', [
'redirect' => 'admin.currencies.index'
'redirect' => 'admin.currencies.index',
])->name('admin.currencies.store');
Route::get('/currencies/edit/{id}', 'Webkul\Core\Http\Controllers\CurrencyController@edit')->defaults('_config', [
'view' => 'admin::settings.currencies.edit'
'view' => 'admin::settings.currencies.edit',
])->name('admin.currencies.edit');
Route::put('/currencies/edit/{id}', 'Webkul\Core\Http\Controllers\CurrencyController@update')->defaults('_config', [
'redirect' => 'admin.currencies.index'
'redirect' => 'admin.currencies.index',
])->name('admin.currencies.update');
Route::post('/currencies/delete/{id}', 'Webkul\Core\Http\Controllers\CurrencyController@destroy')->name('admin.currencies.delete');
@ -492,25 +494,25 @@ Route::group(['middleware' => ['web']], function () {
// Exchange Rates Routes
Route::get('/exchange_rates', 'Webkul\Core\Http\Controllers\ExchangeRateController@index')->defaults('_config', [
'view' => 'admin::settings.exchange_rates.index'
'view' => 'admin::settings.exchange_rates.index',
])->name('admin.exchange_rates.index');
Route::get('/exchange_rates/create', 'Webkul\Core\Http\Controllers\ExchangeRateController@create')->defaults('_config', [
'view' => 'admin::settings.exchange_rates.create'
'view' => 'admin::settings.exchange_rates.create',
])->name('admin.exchange_rates.create');
Route::post('/exchange_rates/create', 'Webkul\Core\Http\Controllers\ExchangeRateController@store')->defaults('_config', [
'redirect' => 'admin.exchange_rates.index'
'redirect' => 'admin.exchange_rates.index',
])->name('admin.exchange_rates.store');
Route::get('/exchange_rates/edit/{id}', 'Webkul\Core\Http\Controllers\ExchangeRateController@edit')->defaults('_config', [
'view' => 'admin::settings.exchange_rates.edit'
'view' => 'admin::settings.exchange_rates.edit',
])->name('admin.exchange_rates.edit');
Route::get('/exchange_rates/update-rates/{service}', 'Webkul\Core\Http\Controllers\ExchangeRateController@updateRates')->name('admin.exchange_rates.update-rates');
Route::get('/exchange_rates/update-rates', 'Webkul\Core\Http\Controllers\ExchangeRateController@updateRates')->name('admin.exchange_rates.update_rates');
Route::put('/exchange_rates/edit/{id}', 'Webkul\Core\Http\Controllers\ExchangeRateController@update')->defaults('_config', [
'redirect' => 'admin.exchange_rates.index'
'redirect' => 'admin.exchange_rates.index',
])->name('admin.exchange_rates.update');
Route::post('/exchange_rates/delete/{id}', 'Webkul\Core\Http\Controllers\ExchangeRateController@destroy')->name('admin.exchange_rates.delete');
@ -518,46 +520,46 @@ Route::group(['middleware' => ['web']], function () {
// Inventory Source Routes
Route::get('/inventory_sources', 'Webkul\Inventory\Http\Controllers\InventorySourceController@index')->defaults('_config', [
'view' => 'admin::settings.inventory_sources.index'
'view' => 'admin::settings.inventory_sources.index',
])->name('admin.inventory_sources.index');
Route::get('/inventory_sources/create', 'Webkul\Inventory\Http\Controllers\InventorySourceController@create')->defaults('_config', [
'view' => 'admin::settings.inventory_sources.create'
'view' => 'admin::settings.inventory_sources.create',
])->name('admin.inventory_sources.create');
Route::post('/inventory_sources/create', 'Webkul\Inventory\Http\Controllers\InventorySourceController@store')->defaults('_config', [
'redirect' => 'admin.inventory_sources.index'
'redirect' => 'admin.inventory_sources.index',
])->name('admin.inventory_sources.store');
Route::get('/inventory_sources/edit/{id}', 'Webkul\Inventory\Http\Controllers\InventorySourceController@edit')->defaults('_config', [
'view' => 'admin::settings.inventory_sources.edit'
'view' => 'admin::settings.inventory_sources.edit',
])->name('admin.inventory_sources.edit');
Route::put('/inventory_sources/edit/{id}', 'Webkul\Inventory\Http\Controllers\InventorySourceController@update')->defaults('_config', [
'redirect' => 'admin.inventory_sources.index'
'redirect' => 'admin.inventory_sources.index',
])->name('admin.inventory_sources.update');
Route::post('/inventory_sources/delete/{id}', 'Webkul\Inventory\Http\Controllers\InventorySourceController@destroy')->name('admin.inventory_sources.delete');
// Channel Routes
Route::get('/channels', 'Webkul\Core\Http\Controllers\ChannelController@index')->defaults('_config', [
'view' => 'admin::settings.channels.index'
'view' => 'admin::settings.channels.index',
])->name('admin.channels.index');
Route::get('/channels/create', 'Webkul\Core\Http\Controllers\ChannelController@create')->defaults('_config', [
'view' => 'admin::settings.channels.create'
'view' => 'admin::settings.channels.create',
])->name('admin.channels.create');
Route::post('/channels/create', 'Webkul\Core\Http\Controllers\ChannelController@store')->defaults('_config', [
'redirect' => 'admin.channels.index'
'redirect' => 'admin.channels.index',
])->name('admin.channels.store');
Route::get('/channels/edit/{id}', 'Webkul\Core\Http\Controllers\ChannelController@edit')->defaults('_config', [
'view' => 'admin::settings.channels.edit'
'view' => 'admin::settings.channels.edit',
])->name('admin.channels.edit');
Route::put('/channels/edit/{id}', 'Webkul\Core\Http\Controllers\ChannelController@update')->defaults('_config', [
'redirect' => 'admin.channels.index'
'redirect' => 'admin.channels.index',
])->name('admin.channels.update');
Route::post('/channels/delete/{id}', 'Webkul\Core\Http\Controllers\ChannelController@destroy')->name('admin.channels.delete');
@ -565,51 +567,51 @@ Route::group(['middleware' => ['web']], function () {
// Admin Profile route
Route::get('/account', 'Webkul\User\Http\Controllers\AccountController@edit')->defaults('_config', [
'view' => 'admin::account.edit'
'view' => 'admin::account.edit',
])->name('admin.account.edit');
Route::put('/account', 'Webkul\User\Http\Controllers\AccountController@update')->name('admin.account.update');
// Admin Store Front Settings Route
Route::get('/subscribers','Webkul\Core\Http\Controllers\SubscriptionController@index')->defaults('_config',[
'view' => 'admin::customers.subscribers.index'
Route::get('/subscribers', 'Webkul\Core\Http\Controllers\SubscriptionController@index')->defaults('_config', [
'view' => 'admin::customers.subscribers.index',
])->name('admin.customers.subscribers.index');
//destroy a newsletter subscription item
Route::post('subscribers/delete/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@destroy')->name('admin.customers.subscribers.delete');
Route::get('subscribers/edit/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@edit')->defaults('_config', [
'view' => 'admin::customers.subscribers.edit'
'view' => 'admin::customers.subscribers.edit',
])->name('admin.customers.subscribers.edit');
Route::put('subscribers/update/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@update')->defaults('_config', [
'redirect' => 'admin.customers.subscribers.index'
'redirect' => 'admin.customers.subscribers.index',
])->name('admin.customers.subscribers.update');
//slider index
Route::get('/slider','Webkul\Core\Http\Controllers\SliderController@index')->defaults('_config',[
'view' => 'admin::settings.sliders.index'
Route::get('/slider', 'Webkul\Core\Http\Controllers\SliderController@index')->defaults('_config', [
'view' => 'admin::settings.sliders.index',
])->name('admin.sliders.index');
//slider create show
Route::get('slider/create','Webkul\Core\Http\Controllers\SliderController@create')->defaults('_config',[
'view' => 'admin::settings.sliders.create'
Route::get('slider/create', 'Webkul\Core\Http\Controllers\SliderController@create')->defaults('_config', [
'view' => 'admin::settings.sliders.create',
])->name('admin.sliders.create');
//slider create show
Route::post('slider/create','Webkul\Core\Http\Controllers\SliderController@store')->defaults('_config',[
'redirect' => 'admin.sliders.index'
Route::post('slider/create', 'Webkul\Core\Http\Controllers\SliderController@store')->defaults('_config', [
'redirect' => 'admin.sliders.index',
])->name('admin.sliders.store');
//slider edit show
Route::get('slider/edit/{id}','Webkul\Core\Http\Controllers\SliderController@edit')->defaults('_config',[
'view' => 'admin::settings.sliders.edit'
Route::get('slider/edit/{id}', 'Webkul\Core\Http\Controllers\SliderController@edit')->defaults('_config', [
'view' => 'admin::settings.sliders.edit',
])->name('admin.sliders.edit');
//slider edit update
Route::post('slider/edit/{id}','Webkul\Core\Http\Controllers\SliderController@update')->defaults('_config',[
'redirect' => 'admin.sliders.index'
Route::post('slider/edit/{id}', 'Webkul\Core\Http\Controllers\SliderController@update')->defaults('_config', [
'redirect' => 'admin.sliders.index',
])->name('admin.sliders.update');
//destroy a slider item
@ -617,25 +619,25 @@ Route::group(['middleware' => ['web']], function () {
//tax routes
Route::get('/tax-categories', 'Webkul\Tax\Http\Controllers\TaxController@index')->defaults('_config', [
'view' => 'admin::tax.tax-categories.index'
'view' => 'admin::tax.tax-categories.index',
])->name('admin.tax-categories.index');
// tax category routes
Route::get('/tax-categories/create', 'Webkul\Tax\Http\Controllers\TaxCategoryController@show')->defaults('_config', [
'view' => 'admin::tax.tax-categories.create'
'view' => 'admin::tax.tax-categories.create',
])->name('admin.tax-categories.show');
Route::post('/tax-categories/create', 'Webkul\Tax\Http\Controllers\TaxCategoryController@create')->defaults('_config', [
'redirect' => 'admin.tax-categories.index'
'redirect' => 'admin.tax-categories.index',
])->name('admin.tax-categories.create');
Route::get('/tax-categories/edit/{id}', 'Webkul\Tax\Http\Controllers\TaxCategoryController@edit')->defaults('_config', [
'view' => 'admin::tax.tax-categories.edit'
'view' => 'admin::tax.tax-categories.edit',
])->name('admin.tax-categories.edit');
Route::put('/tax-categories/edit/{id}', 'Webkul\Tax\Http\Controllers\TaxCategoryController@update')->defaults('_config', [
'redirect' => 'admin.tax-categories.index'
'redirect' => 'admin.tax-categories.index',
])->name('admin.tax-categories.update');
Route::post('/tax-categories/delete/{id}', 'Webkul\Tax\Http\Controllers\TaxCategoryController@destroy')->name('admin.tax-categories.delete');
@ -644,29 +646,29 @@ Route::group(['middleware' => ['web']], function () {
//tax rate
Route::get('tax-rates', 'Webkul\Tax\Http\Controllers\TaxRateController@index')->defaults('_config', [
'view' => 'admin::tax.tax-rates.index'
'view' => 'admin::tax.tax-rates.index',
])->name('admin.tax-rates.index');
Route::get('tax-rates/create', 'Webkul\Tax\Http\Controllers\TaxRateController@show')->defaults('_config', [
'view' => 'admin::tax.tax-rates.create'
'view' => 'admin::tax.tax-rates.create',
])->name('admin.tax-rates.show');
Route::post('tax-rates/create', 'Webkul\Tax\Http\Controllers\TaxRateController@create')->defaults('_config', [
'redirect' => 'admin.tax-rates.index'
'redirect' => 'admin.tax-rates.index',
])->name('admin.tax-rates.create');
Route::get('tax-rates/edit/{id}', 'Webkul\Tax\Http\Controllers\TaxRateController@edit')->defaults('_config', [
'view' => 'admin::tax.tax-rates.edit'
'view' => 'admin::tax.tax-rates.edit',
])->name('admin.tax-rates.store');
Route::put('tax-rates/update/{id}', 'Webkul\Tax\Http\Controllers\TaxRateController@update')->defaults('_config', [
'redirect' => 'admin.tax-rates.index'
'redirect' => 'admin.tax-rates.index',
])->name('admin.tax-rates.update');
Route::post('/tax-rates/delete/{id}', 'Webkul\Tax\Http\Controllers\TaxRateController@destroy')->name('admin.tax-rates.delete');
Route::post('/tax-rates/import', 'Webkul\Tax\Http\Controllers\TaxRateController@import')->defaults('_config', [
'redirect' => 'admin.tax-rates.index'
'redirect' => 'admin.tax-rates.index',
])->name('admin.tax-rates.import');
//tax rate ends
@ -675,23 +677,27 @@ Route::group(['middleware' => ['web']], function () {
Route::prefix('promotions')->group(function () {
Route::get('cart-rules', 'Webkul\CartRule\Http\Controllers\CartRuleController@index')->defaults('_config', [
'view' => 'admin::promotions.cart-rules.index'
'view' => 'admin::promotions.cart-rules.index',
])->name('admin.cart-rules.index');
Route::get('cart-rules/create', 'Webkul\CartRule\Http\Controllers\CartRuleController@create')->defaults('_config', [
'view' => 'admin::promotions.cart-rules.create'
'view' => 'admin::promotions.cart-rules.create',
])->name('admin.cart-rules.create');
Route::post('cart-rules/create', 'Webkul\CartRule\Http\Controllers\CartRuleController@store')->defaults('_config', [
'redirect' => 'admin.cart-rules.index'
'redirect' => 'admin.cart-rules.index',
])->name('admin.cart-rules.store');
Route::get('cart-rules/copy/{id}', 'Webkul\CartRule\Http\Controllers\CartRuleController@copy')->defaults('_config', [
'view' => 'admin::promotions.cart-rules.edit',
])->name('admin.cart-rules.copy');
Route::get('cart-rules/edit/{id}', 'Webkul\CartRule\Http\Controllers\CartRuleController@edit')->defaults('_config', [
'view' => 'admin::promotions.cart-rules.edit'
'view' => 'admin::promotions.cart-rules.edit',
])->name('admin.cart-rules.edit');
Route::post('cart-rules/edit/{id}', 'Webkul\CartRule\Http\Controllers\CartRuleController@update')->defaults('_config', [
'redirect' => 'admin.cart-rules.index'
'redirect' => 'admin.cart-rules.index',
])->name('admin.cart-rules.update');
Route::post('cart-rules/delete/{id}', 'Webkul\CartRule\Http\Controllers\CartRuleController@destroy')->name('admin.cart-rules.delete');
@ -703,23 +709,23 @@ Route::group(['middleware' => ['web']], function () {
//Catalog rules
Route::get('catalog-rules', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@index')->defaults('_config', [
'view' => 'admin::promotions.catalog-rules.index'
'view' => 'admin::promotions.catalog-rules.index',
])->name('admin.catalog-rules.index');
Route::get('catalog-rules/create', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@create')->defaults('_config', [
'view' => 'admin::promotions.catalog-rules.create'
'view' => 'admin::promotions.catalog-rules.create',
])->name('admin.catalog-rules.create');
Route::post('catalog-rules/create', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@store')->defaults('_config', [
'redirect' => 'admin.catalog-rules.index'
'redirect' => 'admin.catalog-rules.index',
])->name('admin.catalog-rules.store');
Route::get('catalog-rules/edit/{id}', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@edit')->defaults('_config', [
'view' => 'admin::promotions.catalog-rules.edit'
'view' => 'admin::promotions.catalog-rules.edit',
])->name('admin.catalog-rules.edit');
Route::post('catalog-rules/edit/{id}', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@update')->defaults('_config', [
'redirect' => 'admin.catalog-rules.index'
'redirect' => 'admin.catalog-rules.index',
])->name('admin.catalog-rules.update');
Route::post('catalog-rules/delete/{id}', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@destroy')->name('admin.catalog-rules.delete');
@ -727,32 +733,32 @@ Route::group(['middleware' => ['web']], function () {
Route::prefix('cms')->group(function () {
Route::get('/', 'Webkul\CMS\Http\Controllers\Admin\PageController@index')->defaults('_config', [
'view' => 'admin::cms.index'
'view' => 'admin::cms.index',
])->name('admin.cms.index');
Route::get('create', 'Webkul\CMS\Http\Controllers\Admin\PageController@create')->defaults('_config', [
'view' => 'admin::cms.create'
'view' => 'admin::cms.create',
])->name('admin.cms.create');
Route::post('create', 'Webkul\CMS\Http\Controllers\Admin\PageController@store')->defaults('_config', [
'redirect' => 'admin.cms.index'
'redirect' => 'admin.cms.index',
])->name('admin.cms.store');
Route::get('edit/{id}', 'Webkul\CMS\Http\Controllers\Admin\PageController@edit')->defaults('_config', [
'view' => 'admin::cms.edit'
'view' => 'admin::cms.edit',
])->name('admin.cms.edit');
Route::post('edit/{id}', 'Webkul\CMS\Http\Controllers\Admin\PageController@update')->defaults('_config', [
'redirect' => 'admin.cms.index'
'redirect' => 'admin.cms.index',
])->name('admin.cms.update');
Route::post('/delete/{id}', 'Webkul\CMS\Http\Controllers\Admin\PageController@delete')->defaults('_config', [
'redirect' => 'admin.cms.index'
'redirect' => 'admin.cms.index',
])->name('admin.cms.delete');
Route::post('/massdelete', 'Webkul\CMS\Http\Controllers\Admin\PageController@massDelete')->defaults('_config', [
'redirect' => 'admin.cms.index'
'redirect' => 'admin.cms.index',
])->name('admin.cms.mass-delete');
// Route::post('/delete/{id}', 'Webkul\CMS\Http\Controllers\Admin\PageController@delete')->defaults('_config', [

View File

@ -10,27 +10,28 @@ use Webkul\Admin\Mail\NewShipmentNotification;
use Webkul\Admin\Mail\NewInventorySourceNotification;
use Webkul\Admin\Mail\CancelOrderNotification;
use Webkul\Admin\Mail\NewRefundNotification;
use Webkul\Admin\Mail\OrderCommentNotification;
class Order
{
/**
* Send new order Mail to the customer and admin
*
*
* @param \Webkul\Sales\Contracts\Order $order
* @return void
*/
public function sendNewOrderMail($order)
{
try {
/* email to customer */
$configKey = 'emails.general.notifications.emails.general.notifications.new-order';
if (core()->getConfigData($configKey)) {
if (core()->getConfigData($configKey))
Mail::queue(new NewOrderNotification($order));
}
/* email to admin */
$configKey = 'emails.general.notifications.emails.general.notifications.new-admin';
if (core()->getConfigData($configKey)) {
app()->setLocale(env('APP_LOCALE'));
Mail::queue(new NewAdminNotification($order));
}
} catch (\Exception $e) {
@ -40,7 +41,7 @@ class Order
/**
* Send new invoice mail to the customer
*
*
* @param \Webkul\Sales\Contracts\Invoice $invoice
* @return void
*/
@ -63,7 +64,7 @@ class Order
/**
* Send new refund mail to the customer
*
*
* @param \Webkul\Sales\Contracts\Refund $refund
* @return void
*/
@ -82,7 +83,7 @@ class Order
/**
* Send new shipment mail to the customer
*
*
* @param \Webkul\Sales\Contracts\Shipment $shipment
* @return void
*/
@ -124,4 +125,21 @@ class Order
report($e);
}
}
/**
* @param \Webkul\Sales\Contracts\OrderComment $comment
* @return void
*/
public function sendOrderCommentMail($comment)
{
if (! $comment->customer_notified) {
return;
}
try {
Mail::queue(new OrderCommentNotification($comment));
} catch (\Exception $e) {
report($e);
}
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace Webkul\Admin\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class OrderCommentNotification extends Mailable
{
use Queueable, SerializesModels;
/**
* The order comment instance.
*
* @var \Webkul\Sales\Contracts\OrderComment $comment
*/
public $comment;
/**
* Create a new message instance.
*
* @param \Webkul\Sales\Contracts\OrderComment $comment
* @return void
*/
public function __construct($comment)
{
$this->comment = $comment;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from(core()->getSenderEmailDetails()['email'], core()->getSenderEmailDetails()['name'])
->to($this->comment->order->customer_email, $this->comment->order->customer_full_name)
->subject(trans('shop::app.mail.order.comment.subject'))
->view('shop::emails.sales.new-order-comment');
}
}

View File

@ -3,9 +3,6 @@
namespace Webkul\Admin\Providers;
use Illuminate\Support\ServiceProvider;
use Webkul\Admin\Providers\EventServiceProvider;
use Illuminate\Contracts\Debug\ExceptionHandler;
use Webkul\Admin\Exceptions\Handler;
use Webkul\Core\Tree;
class AdminServiceProvider extends ServiceProvider
@ -32,11 +29,6 @@ class AdminServiceProvider extends ServiceProvider
$this->registerACL();
$this->app->register(EventServiceProvider::class);
$this->app->bind(
ExceptionHandler::class,
Handler::class
);
}
/**
@ -96,7 +88,7 @@ class AdminServiceProvider extends ServiceProvider
view()->composer(['admin::users.roles.create', 'admin::users.roles.edit'], function ($view) {
$view->with('acl', $this->createACL());
});
view()->composer(['admin::catalog.products.create'], function ($view) {
$items = array();

View File

@ -23,5 +23,7 @@ class EventServiceProvider extends ServiceProvider
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.order.comment.create.after','Webkul\Admin\Listeners\Order@sendOrderCommentMail');
}
}

View File

@ -1,5 +1,7 @@
import Vue from 'vue';
import VeeValidate from 'vee-validate';
import VeeValidate, { Validator } from 'vee-validate';
import de from 'vee-validate/dist/locale/de';
import ar from 'vee-validate/dist/locale/ar';
import './bootstrap';
@ -7,6 +9,10 @@ window.Vue = Vue;
window.VeeValidate = VeeValidate;
Vue.use(VeeValidate, {
dictionary: {
ar: ar,
de: de,
},
events: 'input|change|blur',
});
Vue.prototype.$http = axios
@ -30,6 +36,8 @@ $(document).ready(function () {
mounted() {
this.addServerErrors();
this.addFlashMessages();
this.$validator.localize(document.documentElement.lang);
},
methods: {
@ -90,7 +98,7 @@ $(document).ready(function () {
if (typeof flashMessages == 'undefined') {
return;
};
const flashes = this.$refs.flashes;
flashMessages.forEach(function(flash) {

View File

@ -3,6 +3,17 @@
margin-bottom: 0 !important;
padding-bottom: 15px;
border-bottom: 1px solid $border-color;
.control-group {
span {
width: 100%;
}
&.date::after {
margin-top: -13px;
left: 100%;
}
}
}
.page-content {
@ -162,4 +173,17 @@
grid-row-gap: 15px;
margin-top: 30px;
}
}
.rtl {
.dashboard {
.page-header {
.control-group {
&.date::after {
margin-top: -13px !important;
right: 100%;
}
}
}
}
}

View File

@ -66,9 +66,17 @@ body {
cursor: pointer;
position: relative;
.app-version {
padding: 10px 20px 0px 20px;
margin-bottom: -10px;
display: block;
cursor: default;
color: #a2a2a2;
}
.dropdown-list {
top: 63px;
right: 0px !important;
right: 0px;
bottom: inherit !important;
}
@ -311,4 +319,39 @@ body {
margin-top: 10px;
margin-bottom: 5px;
}
}
.ticket-list {
.control-group {
&.date {
&::after {
left: unset;
right: 10px;
top: 34px;
}
}
&.has-error {
&.date {
&::after {
top: 47px;
}
}
}
}
}
.rtl {
.ticket-list {
.control-group {
&.has-error {
&.date {
&::after {
top: 47px;
right: 100% !important;
}
}
}
}
}
}

View File

@ -1,6 +1,10 @@
.rtl {
direction: rtl;
.form-container {
text-align: right !important;
}
.navbar-top {
.navbar-top-right {
text-align: left;
@ -44,18 +48,6 @@
margin-right: 20px;
margin-left: 0px;
}
.control-group.date {
&::after {
margin-top: 6px;
position: absolute;
margin-right: -35px;
}
&:last-child {
margin-left: 0px;
}
}
}
.content-wrapper {
@ -110,56 +102,6 @@
float: left;
}
// ui
.grid-container {
.filter-row-one .search-filter {
border: 2px solid #c7c7c7;
border-radius: 2px;
.control {
border: none;
padding-right: 10px;
}
.icon-wrapper {
border: none;
padding-top: 2px;
padding-right: 5px;
border-right: 2px solid #c7c7c7;
border-radius: 0px;
}
}
.filter-row-two .filter-tag {
.wrapper,
.icon.cross-icon {
margin-right: 10px;
margin-left: 0px;
}
}
.filter-row-one .dropdown-filters {
right: unset;
position: static !important;
left: 25px;
.per-page-label {
position: static !important;
}
}
}
.grid-container
.filter-wrapper
.filter-row-one
.dropdown-filters
.more-filters
.dropdown-toggle
.dropdown-header
span {
padding-right: 5px;
}
.grid-container .table tbody td.action a:first-child {
margin-left: 10px;
margin-right: 0px;
@ -180,7 +122,7 @@
.dropdown-list.bottom-right {
left: 0px;
right: auto;
right: auto !important;
}
.dropdown-list .dropdown-container {
@ -232,14 +174,6 @@
float: left;
}
.control-group.date {
&::after {
margin-top: 15px;
position: absolute;
margin-right: -35px;
}
}
.pagination .page-item .icon {
transform: rotate(180deg);
}

View File

@ -48,8 +48,33 @@
}
}
.summary-comment-container {
.comment-container {
margin-top: 20px;
float: left;
.comment-list {
margin-top: 40px;
li {
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
p {
margin: 0;
margin-top: 5px;
color: #8e8e8e;
}
}
}
}
}
.sale-summary {
margin-top: 2%;
margin-top: 20px;
height: 130px;
float: right;

View File

@ -1,6 +1,5 @@
<?php
return [
'save' => 'حفظ',
'create' => 'خلق',
@ -42,6 +41,7 @@ return [
],
'layouts' => [
'app-version' => 'Version : :version',
'my-account' => 'حسابي',
'logout' => 'خروج',
'visit-shop' => 'قم بزيارة المتجر',
@ -370,7 +370,11 @@ return [
'total-due' => 'المجموع المستحق',
'cancel-confirm-msg' => 'هل أنت متأكد من أنك تريد إلغاء هذا الطلب ؟',
'refunds' => 'المبالغ المستردة',
'refunded' => 'تم رد الأموال'
'refunded' => 'تم رد الأموال',
'comment-added-success' => 'Comment addded successfully.',
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
],
'invoices' => [
@ -409,6 +413,7 @@ return [
'add-title' => 'أنشئ شحنة',
'save-btn-title' => 'احفظ الشحنة',
'qty-ordered' => 'أمر qty',
'qty-invoiced' => 'Qty Invoiced',
'qty-to-ship' => 'من كيوتي إلى السفينة',
'available-sources' => 'المصادر المتاحة',
'source' => 'المصدر',
@ -728,7 +733,7 @@ return [
'target_currency' => 'العملة المستهدفة',
'rate' => 'معدل',
'exchange-class-not-found' => ':service لم يتم العثور على فئة سعر الصرف آسيف',
'update-rates' => ':service تحديث الأسعار باستخدام ',
'update-rates' => 'الأسعار',
'create-success' => 'تم إنشاء سعر الصرف بنجاح',
'update-success' => 'تم تحديث سعر الصرف بنجاح',
'delete-success' => 'تم حذف سعر الصرف بنجاح',
@ -1010,6 +1015,7 @@ return [
'choose-condition-to-add' => 'اختر شرط لإضافته',
'cart-attribute' => 'سمة سلة التسوق',
'subtotal' => 'المجموع الفرعي',
'additional' => 'Additional Information',
'total-items-qty' => 'إجمالي كمية العناصر',
'total-weight' => 'الوزن الكلي',
'payment-method' => 'طريقة الدفع او السداد',
@ -1298,12 +1304,41 @@ return [
'order-number-prefix' => 'بادئة رقم الطلب',
'order-number-length' => 'طول رقم الطلب',
'order-number-suffix' => 'لاحقة رقم الطلب',
'order-number-generator-class' => 'مولد رقم الطلب',
'default' => 'إفتراضي',
'sandbox' => 'صندوق الرمل',
'all-channels' => 'الكل',
'all-locales' => 'الكل',
'invoice-slip-design' => 'Invoice Slip Design',
'logo' => 'logo'
'logo' => 'Logo',
'storefront' => 'Storefront',
'default-list-mode' => 'Default List Mode',
'grid' => 'Grid',
'list' => 'List',
'products-per-page' => 'Products Per Page',
'sort-by' => 'Sort By',
'from-z-a' => 'From Z-A',
'from-a-z' => 'From A-Z',
'newest-first' => 'Newest First',
'oldest-first' => 'Oldest First',
'cheapest-first' => 'Cheapest First',
'expensive-first' => 'Expensive First',
'comma-seperated' => 'Comma Seperated',
'favicon' => 'Favicon',
'seo' => 'SEO',
'rich-snippets' => 'Rich Snippets',
'products' => 'Products',
'enable' => 'Enable',
'show-weight' => 'Show Weight',
'show-categories' => 'Show Categories',
'show-images' => 'Show Images',
'show-reviews' => 'Show Reviews',
'show-ratings' => 'Show Ratings',
'show-offers' => 'Show Offers',
'show-sku' => 'Show SKU',
'categories' => 'Categories',
'show-sku' => 'Show SKU',
'show-search-input-field' => 'Show Search Input Field'
]
]
];

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,7 @@
return [
'save' => 'Save',
'copy-of' => 'Copy of',
'create' => 'Create',
'update' => 'Update',
'delete' => 'Delete',
@ -19,7 +20,6 @@ return [
'true' => 'True',
'false' => 'False',
'apply' => 'Apply',
'action' => 'Action',
'label' => 'Label',
'name' => 'Name',
'title' => 'Title',
@ -42,6 +42,7 @@ return [
],
'layouts' => [
'app-version' => 'Version : :version',
'my-account' => 'My Account',
'logout' => 'Logout',
'visit-shop' => 'Visit Shop',
@ -150,6 +151,7 @@ return [
'code' => 'Code',
'admin-name' => 'Name',
'name' => 'Name',
'copy' => 'Copy',
'direction' => 'Direction',
'fullname' => 'Full Name',
'type' => 'Type',
@ -363,14 +365,19 @@ return [
'tax-percent' => 'Tax Percent',
'tax-amount' => 'Tax Amount',
'discount-amount' => 'Discount Amount',
'discount-amount' => 'Discount Amount',
'grand-total' => 'Grand Total',
'total-paid' => 'Total Paid',
'total-refunded' => 'Total Refunded',
'total-due' => 'Total Due',
'cancel-confirm-msg' => 'Are you sure you want to cancel this order ?',
'refund-btn-title' => 'Refund',
'refunds' => 'Refunds'
'refunds' => 'Refunds',
'comment-added-success' => 'Comment addded successfully.',
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
'customer-notified' => ':date | Customer <b>Notified</b>',
'customer-not-notified' => ':date | Customer <b>Not Notified</b>'
],
'invoices' => [
@ -409,6 +416,7 @@ return [
'add-title' => 'Create Shipment',
'save-btn-title' => 'Save Shipment',
'qty-ordered' => 'Qty Ordered',
'qty-invoiced' => 'Qty Invoiced',
'qty-to-ship' => 'Qty to Ship',
'available-sources' => 'Available Sources',
'source' => 'Source',
@ -474,8 +482,6 @@ return [
'price' => 'Price',
'weight' => 'Weight',
'status' => 'Status',
'enabled' => 'Enabled',
'disabled' => 'Disabled',
'add-variant-title' => 'Add Variant',
'variant-already-exist-message' => 'Variant with same attribute options already exists.',
'add-image-btn-title' => 'Add Image',
@ -507,7 +513,6 @@ return [
'searching' => 'Searching ...',
'grouped-products' => 'Grouped Products',
'search-products' => 'Search Products',
'no-result-found' => 'Products not found with same name.',
'channel' => 'Channels',
'bundle-items' => 'Bundle Items',
'add-option-btn-title' => 'Add Option',
@ -519,7 +524,12 @@ return [
'checkbox' => 'Checkbox',
'multiselect' => 'Multiselect',
'new-option' => 'New Option',
'is-default' => 'Is Default'
'is-default' => 'Is Default',
'customer-group' => 'Customer Group',
'add-group-price' => 'Add Customer Group Price',
'all-group' => 'All Groups',
'fixed' => 'Fixed',
'discount' => 'Discount',
],
'attributes' => [
@ -557,7 +567,6 @@ return [
'no' => 'No',
'value_per_locale' => 'Value Per Locale',
'value_per_channel' => 'Value Per Channel',
'value_per_channel' => 'Value Per Channel',
'is_filterable' => 'Use in Layered Navigation',
'is_configurable' => 'Use To Create Configurable Product',
'admin_name' => 'Admin Name',
@ -666,7 +675,6 @@ return [
'edit-button-title' => 'Edit Rate'
],
'zip_code' => 'Zip Code',
'is_zip' => 'Enable Zip Range',
],
'sales' => [
@ -685,7 +693,6 @@ return [
'title' => 'Locales',
'add-title' => 'Add Locale',
'edit-title' => 'Edit Locale',
'add-title' => 'Add Locale',
'save-btn-title' => 'Save Locale',
'general' => 'General',
'code' => 'Code',
@ -728,7 +735,7 @@ return [
'target_currency' => 'Target Currency',
'rate' => 'Rate',
'exchange-class-not-found' => ':service exchange rate class not found',
'update-rates' => 'Update rates using :service',
'update-rates' => 'Update Rates',
'create-success' => 'Exchange Rate created successfully.',
'update-success' => 'Exchange Rate updated successfully.',
'delete-success' => 'Exchange Rate deleted successfully.',
@ -812,7 +819,7 @@ return [
'created-fault' => 'Error in creating slider item',
'update-success' => 'Slider item successfully updated',
'update-fail' => 'Slider cannot be updated',
'delete-success' => 'Cannot delete last llider item',
'delete-success' => 'Cannot delete last slider item',
'delete-fail' => 'Slider item successfully deleted'
],
@ -858,7 +865,6 @@ return [
'edit-button-title' => 'Edit Rate'
],
'zip_code' => 'Zip Code',
'is_zip' => 'Enable Zip Range',
'create-success' => 'Tax Rate Created Successfully',
'create-error' => 'Cannot Create Tax Rate',
'update-success' => 'Tax Rate Updated Successfully',
@ -877,7 +883,6 @@ return [
'edit-title' => 'Edit Group',
'save-btn-title' => 'Save Group',
'title' => 'Groups',
'save-btn-title' => 'Save Group',
'code' => 'Code',
'name' => 'Name',
'is_user_defined' => 'User Defined',
@ -893,6 +898,7 @@ return [
'address-list' => 'Address\'s List',
'order-list' => 'Order\'s List',
'address-id' => 'Address ID',
'company-name' => 'Company Name',
'address-1' => 'Address 1',
'city' => 'City',
'state-name' => 'State',
@ -940,7 +946,6 @@ return [
'other' => 'Other',
'male' => 'Male',
'female' => 'Female',
'phone' => 'Phone',
'group-default' => 'Cannot delete the default group.',
'edit-help-title' => 'Edit Customer',
'delete-help-title' => 'Delete Customer',
@ -1010,6 +1015,7 @@ return [
'choose-condition-to-add' => 'Choose a condition to add',
'cart-attribute' => 'Cart Attribute',
'subtotal' => 'Subtotal',
'additional' => 'Additional Information',
'total-items-qty' => 'Total Items Qty',
'total-weight' => 'Total Weight',
'payment-method' => 'Payment Method',
@ -1303,12 +1309,40 @@ return [
'order-number-prefix' => 'Order Number Prefix',
'order-number-length' => 'Order Number Length',
'order-number-suffix' => 'Order Number Suffix',
'order-number-generator-class' => 'Order Number Generator',
'default' => 'Default',
'sandbox' => 'Sandbox',
'all-channels' => 'All',
'all-locales' => 'All',
'all-channels' => 'All Channels',
'all-locales' => 'All Locales',
'all-customer-groups' => 'All Customer groups',
'invoice-slip-design' => 'Invoice Slip Design',
'logo' => 'logo'
'logo' => 'Logo',
'storefront' => 'Storefront',
'default-list-mode' => 'Default List Mode',
'grid' => 'Grid',
'list' => 'List',
'products-per-page' => 'Products Per Page',
'sort-by' => 'Sort By',
'from-z-a' => 'From Z-A',
'from-a-z' => 'From A-Z',
'newest-first' => 'Newest First',
'oldest-first' => 'Oldest First',
'cheapest-first' => 'Cheapest First',
'expensive-first' => 'Expensive First',
'comma-seperated' => 'Comma Seperated',
'favicon' => 'Favicon',
'seo' => 'SEO',
'rich-snippets' => 'Rich Snippets',
'enable' => 'Enable',
'show-weight' => 'Show Weight',
'show-categories' => 'Show Categories',
'show-images' => 'Show Images',
'show-reviews' => 'Show Reviews',
'show-ratings' => 'Show Ratings',
'show-offers' => 'Show Offers',
'show-sku' => 'Show SKU',
'categories' => 'Categories',
'show-search-input-field' => 'Show Search Input Field'
]
]
];

View File

@ -42,6 +42,7 @@ return [
],
'layouts' => [
'app-version' => 'Version : :version',
'account' => 'حساب',
'my-account' => 'پروفایل من',
'logout' => 'خروج',
@ -370,7 +371,11 @@ return [
'cancel-confirm-msg' => 'مطمئن هستید که می خواهید این سفارش را لغو کنید ؟',
'refunds' => 'بازپرداخت',
'refund-btn-title' => 'بازپرداخت',
'refunded' => 'بازپرداخت'
'refunded' => 'بازپرداخت',
'comment-added-success' => 'Comment addded successfully.',
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
],
'invoices' => [
@ -409,6 +414,7 @@ return [
'add-title' => 'ایجاد حمل و نقل',
'save-btn-title' => 'ذخیره حمل و نقل',
'qty-ordered' => 'سفارش داده شده',
'qty-invoiced' => 'Qty Invoiced',
'qty-to-ship' => 'مقدار به کشتی',
'available-sources' => 'منابع موجود',
'source' => 'منابع',
@ -728,7 +734,7 @@ return [
'target_currency' => 'هدف ارز',
'rate' => 'نرخ',
'exchange-class-not-found' => 'کلاس نرخ ارز :service یافت نشد',
'update-rates' => ' به روز کنید :service نرخ ها را با استفاده از',
'update-rates' => 'نرخ ها را به روز کنید',
'create-success' => 'نرخ ارز با موفقیت ایجاد شد.',
'update-success' => 'نرخ ارز با موفقیت به روز شد.',
'delete-success' => 'نرخ ارز با موفقیت حذف شد.',
@ -1010,6 +1016,7 @@ return [
'choose-condition-to-add' => 'شرطی را برای اضافه کردن انتخاب کنید',
'cart-attribute' => 'ویژگی سبد خرید',
'subtotal' => 'فرعی',
'additional' => 'Additional Information',
'total-items-qty' => 'تعداد کل موارد',
'total-weight' => 'وزن کل',
'payment-method' => 'روش پرداخت',
@ -1303,13 +1310,42 @@ return [
'order-number-prefix' => 'پیش شماره شماره سفارش',
'order-number-length' => 'طول شماره سفارش',
'order-number-suffix' => 'تعداد کافی شماره سفارش',
'order-number-generator-class' => 'تولید کننده شماره سفارش',
'default' => 'پیش فرض',
'sandbox' => 'Sandbox',
'all-channels' => 'همه',
'all-locales' => 'همه',
'sandbox' => 'Sandbox',
'invoice-slip-design' => 'Invoice Slip Design',
'logo' => 'logo'
'logo' => 'Logo',
'storefront' => 'Storefront',
'default-list-mode' => 'Default List Mode',
'grid' => 'Grid',
'list' => 'List',
'products-per-page' => 'Products Per Page',
'sort-by' => 'Sort By',
'from-z-a' => 'From Z-A',
'from-a-z' => 'From A-Z',
'newest-first' => 'Newest First',
'oldest-first' => 'Oldest First',
'cheapest-first' => 'Cheapest First',
'expensive-first' => 'Expensive First',
'comma-seperated' => 'Comma Seperated',
'favicon' => 'Favicon',
'seo' => 'SEO',
'rich-snippets' => 'Rich Snippets',
'products' => 'Products',
'enable' => 'Enable',
'show-weight' => 'Show Weight',
'show-categories' => 'Show Categories',
'show-images' => 'Show Images',
'show-reviews' => 'Show Reviews',
'show-ratings' => 'Show Ratings',
'show-offers' => 'Show Offers',
'show-sku' => 'Show SKU',
'categories' => 'Categories',
'show-sku' => 'Show SKU',
'show-search-input-field' => 'Show Search Input Field'
]
]
];

File diff suppressed because it is too large Load Diff

View File

@ -42,6 +42,7 @@ return [
],
'layouts' => [
'app-version' => 'Version : :version',
'my-account' => 'Mijn Profiel',
'logout' => 'Afmelden',
'visit-shop' => 'Winkel Bezoeken',
@ -370,7 +371,11 @@ return [
'total-due' => 'Total Due',
'cancel-confirm-msg' => 'Weet u zeker dat u deze bestelling wilt annuleren ?',
'refund-btn-title' => 'Terugbetaling',
'refunds' => 'Terugbetalingen'
'refunds' => 'Terugbetalingen',
'comment-added-success' => 'Comment addded successfully.',
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
],
'invoices' => [
@ -409,6 +414,7 @@ return [
'add-title' => 'Zending maken',
'save-btn-title' => 'Zending opslaan',
'qty-ordered' => 'Besteld aantal',
'qty-invoiced' => 'Qty Invoiced',
'qty-to-ship' => 'Te verzenden',
'available-sources' => 'Beschikbare bronnen',
'source' => 'Bron',
@ -728,7 +734,7 @@ return [
'target_currency' => 'Valuta doel',
'rate' => 'Tarief',
'exchange-class-not-found' => ':service wisselkoersklasse niet gevonden',
'update-rates' => 'Tarieven bijwerken met :service',
'update-rates' => 'Tarieven bijwerken',
'create-success' => 'Wisselkoers succesvol aangemaakt.',
'update-success' => 'Wisselkoers succesvol bijgewerkt.',
'delete-success' => 'Wisselkoers succesvol verwijderd.',
@ -1010,6 +1016,7 @@ return [
'choose-condition-to-add' => 'Conditie toevoegen',
'cart-attribute' => 'Winkelwagenattribuut',
'subtotal' => 'Subtotaal',
'additional' => 'Additional Information',
'total-items-qty' => 'Totaal aantal artikelen',
'total-weight' => 'Totale gewicht',
'payment-method' => 'Betaalmethode',
@ -1303,12 +1310,41 @@ return [
'order-number-prefix' => 'Bestelnummer prefix',
'order-number-length' => 'Bestelnummer Lengte',
'order-number-suffix' => 'Achtervoegsel bestelnummer',
'order-number-generator-class' => 'Ordernummer Generator',
'default' => 'Standaard',
'sandbox' => 'Sandbox',
'all-channels' => 'Alles',
'all-locales' => 'Alles',
'invoice-slip-design' => 'Invoice Slip Design',
'logo' => 'logo'
'logo' => 'Logo',
'storefront' => 'Storefront',
'default-list-mode' => 'Default List Mode',
'grid' => 'Grid',
'list' => 'List',
'products-per-page' => 'Products Per Page',
'sort-by' => 'Sort By',
'from-z-a' => 'From Z-A',
'from-a-z' => 'From A-Z',
'newest-first' => 'Newest First',
'oldest-first' => 'Oldest First',
'cheapest-first' => 'Cheapest First',
'expensive-first' => 'Expensive First',
'comma-seperated' => 'Comma Seperated',
'favicon' => 'Favicon',
'seo' => 'SEO',
'rich-snippets' => 'Rich Snippets',
'products' => 'Products',
'enable' => 'Enable',
'show-weight' => 'Show Weight',
'show-categories' => 'Show Categories',
'show-images' => 'Show Images',
'show-reviews' => 'Show Reviews',
'show-ratings' => 'Show Ratings',
'show-offers' => 'Show Offers',
'show-sku' => 'Show SKU',
'categories' => 'Categories',
'show-sku' => 'Show SKU',
'show-search-input-field' => 'Show Search Input Field'
]
]
];

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
<?php
return [
'save' => 'Salve ',
'create' => 'Crio',
'save' => 'Salvar',
'create' => 'Criar',
'update' => 'Atualizar',
'delete' => 'Excluir',
'failed' => 'Falhou',
@ -42,6 +42,7 @@ return [
],
'layouts' => [
'app-version' => 'Version : :version',
'my-account' => 'Minha Conta',
'logout' => 'Sair',
'visit-shop' => 'Visitar Loja',
@ -64,7 +65,7 @@ return [
'settings' => 'Opções',
'locales' => 'Idiomas',
'currencies' => 'Moedas',
'exchange-rates' => 'Impostos de Câmbios',
'exchange-rates' => 'Taxas de Câmbios',
'inventory-sources' => 'Fontes de Inventários',
'channels' => 'Canais (Lojas)',
'users' => 'Usuários',
@ -98,7 +99,7 @@ return [
'locales' => 'Idiomas',
'currencies' => 'Moedas',
'exchange-rates' => 'Impostos de Câmbios',
'inventory-sources' => 'Fontes de Inventários',
'inventory-sources' => 'Origens de Estoque',
'channels' => 'Canais (Lojas)',
'users' => 'Usuários',
'roles' => 'Funções',
@ -370,7 +371,11 @@ return [
'total-due' => 'Total Devido',
'cancel-confirm-msg' => 'Tem certeza que deseja cancelar esse pedido ?',
'refunds' => 'Refunds',
'refunded' => 'Refunded'
'refunded' => 'Refunded',
'comment-added-success' => 'Comment addded successfully.',
'comment' => 'Comment',
'submit-comment' => 'Submit Comment',
'notify-customer' => 'Notify Customer',
],
'invoices' => [
@ -409,6 +414,7 @@ return [
'add-title' => 'Criar Entrega',
'save-btn-title' => 'Salvar Entrega',
'qty-ordered' => 'Qtd pedido',
'qty-invoiced' => 'Qty Invoiced',
'qty-to-ship' => 'Qty para enviar',
'available-sources' => 'Fontes Disponíveis',
'source' => 'Fonte',
@ -728,6 +734,7 @@ return [
'target_currency' => 'Moeda Alvo',
'rate' => 'Taxa',
'exchange-class-not-found' => ':service de taxa de câmbio de serviço não encontrada',
'update-rates' => 'Atualizar Tarifas',
'rate' => 'Taxa',
'create-success' => 'Taxa de Câmbio criada com sucesso.',
'update-success' => 'Taxa de Câmbio atualizada com sucesso.',
@ -1010,6 +1017,7 @@ return [
'choose-condition-to-add' => 'Escolha uma condição para adicionar',
'cart-attribute' => 'Atributo do carrinho',
'subtotal' => 'Subtotal',
'additional' => 'Additional Information',
'total-items-qty' => 'Quantidade total de itens',
'total-weight' => 'Peso total',
'payment-method' => 'Forma de pagamento',
@ -1241,14 +1249,14 @@ return [
'system' => [
'catalog' => 'Catálogo',
'products' => 'Produtos',
'guest-checkout' => 'Saída do hóspede',
'allow-guest-checkout' => 'Permitir saída do hóspede',
'guest-checkout' => 'Compras sem cadastro?',
'allow-guest-checkout' => 'Permitir compra para clientes sem cadastros?',
'allow-guest-checkout-hint' => 'Dica: se ativada, esta opção pode ser configurada para cada produto especificamente.',
'review' => 'Reveja',
'allow-guest-review' => 'Permitir comentário de convidado',
'review' => 'Avaliações',
'allow-guest-review' => 'Permitir comentários sem cadastro?',
'inventory' => 'Inventário',
'stock-options' => 'Opções de ações',
'allow-backorders' => 'Permitir atrasos',
'allow-backorders' => 'Permitir Pedidos pelo Admin',
'customer' => 'Cliente',
'settings' => 'Definições',
'address' => 'Endereço',
@ -1287,30 +1295,60 @@ return [
'locale-options' => 'Opções de unidade',
'weight-unit' => 'Unidade de peso',
'admin-page-limit' => 'Itens padrão por página (administrador)',
'design' => 'Projeto',
'email-settings' => 'Email Settings',
'email-sender-name' => 'Email Sender Name',
'shop-email-from' => 'Shop Email Address [For sending emails]',
'admin-name' => 'Admin Name',
'design' => 'Design',
'email-settings' => 'Configurações de Email',
'email-sender-name' => 'Nome do Email da Loja',
'shop-email-from' => 'Endereço de Email da Loja [Para enviar emails]',
'admin-name' => 'Admin Nome',
'admin-email' => 'Admin Email',
'admin-page-limit' => 'Quantidade Padrão de Itens por Página (Admin)',
'design' => 'Design',
'admin-logo' => 'Admin Logo',
'logo-image' => 'Logo Imagem',
'credit-max' => 'Máximo de crédito do cliente',
'credit-max-value' => 'Valor Máximo de Crédito',
'use-credit-max' => 'Use o máximo de crédito',
'order-settings' => 'Order Settings',
'orderNumber' => 'Order Number Settings',
'order-number-prefix' => 'Order Number Prefix',
'order-number-length' => 'Order Number Length',
'order-number-suffix' => 'Order Number Suffix',
'order-settings' => 'Configurações do Pedido',
'orderNumber' => 'Configuração do Número do Pedido',
'order-number-prefix' => 'Prefixo do Número do Pedido',
'order-number-length' => 'Tamanho do Número do Pedido',
'order-number-suffix' => 'Sufixo do Número de Pedido',
'order-number-generator-class' => 'Gerador de número de pedido',
'default' => 'Padrão',
'sandbox' => 'Sandbox',
'all-channels' => 'Todos',
'all-locales' => 'Todos',
'sandbox' => 'Sandbox',
'invoice-slip-design' => 'Invoice Slip Design',
'logo' => 'logo'
'invoice-slip-design' => 'Design da Nota do Pedido',
'logo' => 'Logo',
'storefront' => 'Storefront',
'default-list-mode' => 'Default List Mode',
'grid' => 'Grid',
'list' => 'List',
'products-per-page' => 'Products Per Page',
'sort-by' => 'Sort By',
'from-z-a' => 'From Z-A',
'from-a-z' => 'From A-Z',
'newest-first' => 'Newest First',
'oldest-first' => 'Oldest First',
'cheapest-first' => 'Cheapest First',
'expensive-first' => 'Expensive First',
'comma-seperated' => 'Comma Seperated',
'favicon' => 'Favicon',
'seo' => 'SEO',
'rich-snippets' => 'Rich Snippets',
'products' => 'Products',
'enable' => 'Enable',
'show-weight' => 'Show Weight',
'show-categories' => 'Show Categories',
'show-images' => 'Show Images',
'show-reviews' => 'Show Reviews',
'show-ratings' => 'Show Ratings',
'show-offers' => 'Show Offers',
'show-sku' => 'Show SKU',
'categories' => 'Categories',
'show-sku' => 'Show SKU',
'show-search-input-field' => 'Show Search Input Field'
]
]
];

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.catalog.attributes.add-title') }}
</h1>
@ -309,7 +309,7 @@
@foreach (app('Webkul\Core\Repositories\LocaleRepository')->all() as $locale)
<td>
<div class="control-group" :class="[errors.has(localeInputName(row, '{{ $locale->code }}')) ? 'has-error' : '']">
<input type="text" v-validate="getOptionValidation(row, '{{ $locale->code }}')" v-model="row['{{ $locale->code }}']" :name="localeInputName(row, '{{ $locale->code }}')" class="control" data-vv-as="&quot;{{ $locale->name . ' (' . $locale->code . ')' }}&quot;"/>
<input type="text" v-validate="getOptionValidation(row, '{{ $locale->code }}')" v-model="row['locales']['{{ $locale->code }}']" :name="localeInputName(row, '{{ $locale->code }}')" class="control" data-vv-as="&quot;{{ $locale->name . ' (' . $locale->code . ')' }}&quot;"/>
<span class="control-error" v-if="errors.has(localeInputName(row, '{{ $locale->code }}'))">@{{ errors.first(localeInputName(row, '{!! $locale->code !!}')) }}</span>
</div>
</td>
@ -383,10 +383,10 @@
addOptionRow: function (isNullOptionRow) {
const rowCount = this.optionRowCount++;
const id = 'option_' + rowCount;
let row = {'id': id};
let row = {'id': id, 'locales': {}};
@foreach (app('Webkul\Core\Repositories\LocaleRepository')->all() as $locale)
row['{{ $locale->code }}'] = '';
row['locales']['{{ $locale->code }}'] = '';
@endforeach
row['notRequired'] = '';

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.catalog.attributes.edit-title') }}
</h1>
@ -379,7 +379,7 @@
@foreach (app('Webkul\Core\Repositories\LocaleRepository')->all() as $locale)
<td>
<div class="control-group" :class="[errors.has(localeInputName(row, '{{ $locale->code }}')) ? 'has-error' : '']">
<input type="text" v-validate="getOptionValidation(row, '{{ $locale->code }}')" v-model="row['{{ $locale->code }}']" :name="localeInputName(row, '{{ $locale->code }}')" class="control" data-vv-as="&quot;{{ $locale->name . ' (' . $locale->code . ')' }}&quot;"/>
<input type="text" v-validate="getOptionValidation(row, '{{ $locale->code }}')" v-model="row['locales']['{{ $locale->code }}']" :name="localeInputName(row, '{{ $locale->code }}')" class="control" data-vv-as="&quot;{{ $locale->name . ' (' . $locale->code . ')' }}&quot;"/>
<span class="control-error" v-if="errors.has(localeInputName(row, '{{ $locale->code }}'))">@{{ errors.first(localeInputName(row, '{!! $locale->code !!}')) }}</span>
</div>
</td>
@ -418,7 +418,7 @@
optionRowCount: 0,
optionRows: [],
show_swatch: "{{ $attribute->type == 'select' ? true : false }}",
swatch_type: "{{ $attribute->swatch_type }}",
swatch_type: "{{ $attribute->swatch_type == '' ? 'dropdown' : $attribute->swatch_type }}",
isNullOptionChecked: false,
idNullOption: null
}
@ -429,22 +429,23 @@
this.optionRowCount++;
var row = {
'id': '{{ $option->id }}',
'admin_name': '{{ $option->admin_name }}',
'sort_order': '{{ $option->sort_order }}',
'swatch_value': '{{ $option->swatch_value }}',
'swatch_value_url': '{{ $option->swatch_value_url }}',
'notRequired': ''
'id': @json($option->id),
'admin_name': @json($option->admin_name),
'sort_order': @json($option->sort_order),
'swatch_value': @json($option->swatch_value),
'swatch_value_url': @json($option->swatch_value_url),
'notRequired': '',
'locales': {}
};
@if (empty($option->label))
this.isNullOptionChecked = true;
this.idNullOption = '{{ $option->id }}';
this.idNullOption = @json($option->id);
row['notRequired'] = true;
@endif
@foreach (app('Webkul\Core\Repositories\LocaleRepository')->all() as $locale)
row['{{ $locale->code }}'] = "{{ $option->translate($locale->code)['label'] ?? '' }}";
row['locales']['{{ $locale->code }}'] = @json($option->translate($locale->code)['label'] ?? '');
@endforeach
this.optionRows.push(row);
@ -465,10 +466,10 @@
addOptionRow: function (isNullOptionRow) {
const rowCount = this.optionRowCount++;
const id = 'option_' + rowCount;
let row = {'id': id};
let row = {'id': id, 'locales': {}};
@foreach (app('Webkul\Core\Repositories\LocaleRepository')->all() as $locale)
row['{{ $locale->code }}'] = '';
row['locales']['{{ $locale->code }}'] = '';
@endforeach
row['notRequired'] = '';

View File

@ -13,7 +13,7 @@
<div class="page-action">
<a href="{{ route('admin.catalog.attributes.create') }}" class="btn btn-lg btn-primary">
{{ __('Add Attribute') }}
{{ __('admin::app.catalog.attributes.add-title') }}
</a>
</div>
</div>
@ -28,4 +28,4 @@
{!! view_render_event('bagisto.admin.catalog.attributes.list.after') !!}
</div>
@stop
@stop

View File

@ -12,7 +12,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.catalog.categories.add-title') }}
</h1>
@ -20,7 +20,7 @@
<div class="page-action">
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.save') }} {{ __('admin::app.category') }}
{{ __('admin::app.catalog.categories.save-btn-title') }}
</button>
</div>
</div>
@ -220,8 +220,8 @@
selector: 'textarea#description',
height: 200,
width: "100%",
plugins: 'image imagetools media wordcount save fullscreen code',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | code',
plugins: 'image imagetools media wordcount save fullscreen code table lists link hr',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor link hr | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | code | table',
image_advtab: true
});
});

View File

@ -13,7 +13,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.catalog.categories.edit-title') }}
</h1>
@ -52,7 +52,7 @@
<div class="control-group" :class="[errors.has('{{$locale}}[name]') ? 'has-error' : '']">
<label for="name" class="required">{{ __('admin::app.catalog.categories.name') }}</label>
<input type="text" v-validate="'required'" class="control" id="name" name="{{$locale}}[name]" value="{{ old($locale)['name'] ?? $category->translate($locale)['name'] }}" data-vv-as="&quot;{{ __('admin::app.catalog.categories.name') }}&quot;" v-slugify-target="'slug'"/>
<input type="text" v-validate="'required'" class="control" id="name" name="{{$locale}}[name]" value="{{ old($locale)['name'] ?? ($category->translate($locale)['name'] ?? '') }}" data-vv-as="&quot;{{ __('admin::app.catalog.categories.name') }}&quot;" v-slugify-target="'slug'"/>
<span class="control-error" v-if="errors.has('{{$locale}}[name]')">@{{ errors.first('{!!$locale!!}[name]') }}</span>
</div>
@ -180,23 +180,23 @@
<div class="control-group">
<label for="meta_title">{{ __('admin::app.catalog.categories.meta_title') }}</label>
<input type="text" class="control" id="meta_title" name="{{$locale}}[meta_title]" value="{{ old($locale)['meta_title'] ?? $category->translate($locale)['meta_title'] }}"/>
<input type="text" class="control" id="meta_title" name="{{$locale}}[meta_title]" value="{{ old($locale)['meta_title'] ?? ($category->translate($locale)['meta_title'] ?? '') }}"/>
</div>
<div class="control-group" :class="[errors.has('{{$locale}}[slug]') ? 'has-error' : '']">
<label for="slug" class="required">{{ __('admin::app.catalog.categories.slug') }}</label>
<input type="text" v-validate="'required'" class="control" id="slug" name="{{$locale}}[slug]" value="{{ old($locale)['slug'] ?? $category->translate($locale)['slug'] }}" data-vv-as="&quot;{{ __('admin::app.catalog.categories.slug') }}&quot;" v-slugify/>
<input type="text" v-validate="'required'" class="control" id="slug" name="{{$locale}}[slug]" value="{{ old($locale)['slug'] ?? ($category->translate($locale)['slug'] ?? '') }}" data-vv-as="&quot;{{ __('admin::app.catalog.categories.slug') }}&quot;" v-slugify/>
<span class="control-error" v-if="errors.has('{{$locale}}[slug]')">@{{ errors.first('{!!$locale!!}[slug]') }}</span>
</div>
<div class="control-group">
<label for="meta_description">{{ __('admin::app.catalog.categories.meta_description') }}</label>
<textarea class="control" id="meta_description" name="{{$locale}}[meta_description]">{{ old($locale)['meta_description'] ?? $category->translate($locale)['meta_description'] }}</textarea>
<textarea class="control" id="meta_description" name="{{$locale}}[meta_description]">{{ old($locale)['meta_description'] ?? ($category->translate($locale)['meta_description'] ?? '') }}</textarea>
</div>
<div class="control-group">
<label for="meta_keywords">{{ __('admin::app.catalog.categories.meta_keywords') }}</label>
<textarea class="control" id="meta_keywords" name="{{$locale}}[meta_keywords]">{{ old($locale)['meta_keywords'] ?? $category->translate($locale)['meta_keywords'] }}</textarea>
<textarea class="control" id="meta_keywords" name="{{$locale}}[meta_keywords]">{{ old($locale)['meta_keywords'] ?? ($category->translate($locale)['meta_keywords'] ?? '') }}</textarea>
</div>
{!! view_render_event('bagisto.admin.catalog.category.edit_form_accordian.seo.controls.after', ['category' => $category]) !!}
@ -220,7 +220,7 @@
<div class="control-group" :class="[errors.has('{{$locale}}[description]') ? 'has-error' : '']">
<label for="description" :class="isRequired ? 'required' : ''">{{ __('admin::app.catalog.categories.description') }}</label>
<textarea v-validate="isRequired ? 'required' : ''" class="control" id="description" name="{{$locale}}[description]" data-vv-as="&quot;{{ __('admin::app.catalog.categories.description') }}&quot;">{{ old($locale)['description'] ?? $category->translate($locale)['description'] }}</textarea>
<textarea v-validate="isRequired ? 'required' : ''" class="control" id="description" name="{{$locale}}[description]" data-vv-as="&quot;{{ __('admin::app.catalog.categories.description') }}&quot;">{{ old($locale)['description'] ?? ($category->translate($locale)['description'] ?? '') }}</textarea>
<span class="control-error" v-if="errors.has('{{$locale}}[description]')">@{{ errors.first('{!!$locale!!}[description]') }}</span>
</div>
@ -232,8 +232,8 @@
selector: 'textarea#description',
height: 200,
width: "100%",
plugins: 'image imagetools media wordcount save fullscreen code',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | code',
plugins: 'image imagetools media wordcount save fullscreen code table lists link hr',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor link hr | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | code | table',
image_advtab: true
});
});

View File

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

View File

@ -0,0 +1,162 @@
@section('css')
@parent
<style>
.table th.price, .table th.weight {
width: 100px;
}
.table th.actions {
width: 85px;
}
.table td.actions .icon {
margin-top: 8px;
}
.table td.actions .icon.pencil-lg-icon {
margin-right: 10px;
}
</style>
@stop
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.customer_group_prices.before', ['product' => $product]) !!}
<customer-group-price-list></customer-group-price-list>
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.customer_group_prices.after', ['product' => $product]) !!}
@push('scripts')
@parent
<script type="text/x-template" id="customer-group-price-list-template">
<div>
<div class="table" style="margin-top: 20px; overflow-x: unset;">
<table>
<thead>
<tr>
<th>{{ __('admin::app.catalog.products.customer-group') }}</th>
<th>{{ __('admin::app.catalog.products.qty') }}</th>
<th>{{ __('admin::app.catalog.products.price') }}</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
<customer-group-price-item v-for='(customerGroupPrice, index) in customer_group_prices' :customer-group-price="customerGroupPrice" :key="index" :index="index" @onRemoveCustomerGroupPrice="removeCustomerGroupPrice($event)"></customer-group-price-item>
</tbody>
</table>
<button type="button" class="btn btn-lg btn-primary" style="margin-top: 20px" @click="addCustomerGroupPrice()">
{{ __('admin::app.catalog.products.add-group-price') }}
</button>
</div>
</div>
</script>
<script type="text/x-template" id="customer-group-price-item-template">
<tr>
<td>
<div class="control-group">
<select :name="[inputName + '[customer_group_id]']" v-model="customerGroupPrice.customer_group_id" class="control">
<option value="">{{ __('admin::app.catalog.products.all-group') }}</option>
@foreach (app('Webkul\Customer\Repositories\CustomerGroupRepository')->all() as $customerGroup)
<option value="{{ $customerGroup->id }}">{{ $customerGroup->name }}</option>
@endforeach
</select>
</div>
</td>
<td>
<div class="control-group" :class="[errors.has(inputName + '[qty]') ? 'has-error' : '']">
<input type="number" v-validate="'required|min_value:0'" :name="[inputName + '[qty]']" v-model="customerGroupPrice.qty" class="control" data-vv-as="&quot;{{ __('admin::app.catalog.products.qty') }}&quot;"/>
<span class="control-error" v-if="errors.has(inputName + '[qty]')">@{{ errors.first(inputName + '[qty]') }}</span>
</div>
</td>
<td>
<div class="control-group">
<select :name="[inputName + '[value_type]']" v-model="customerGroupPrice.value_type" class="control">
<option value="fixed">{{ __('admin::app.catalog.products.fixed') }}</option>
<option value="discount">{{ __('admin::app.catalog.products.discount') }}</option>
</select>
</div>
<div class="control-group">
<div class="control-group" :class="[errors.has(inputName + '[value]') ? 'has-error' : '']">
<input type="number" v-validate="'required|min_value:0'" :name="[inputName + '[value]']" v-model="customerGroupPrice.value" class="control" data-vv-as="&quot;{{ __('admin::app.datagrid.price') }}&quot;"/>
<span class="control-error" v-if="errors.has(inputName + '[value]')">@{{ errors.first(inputName + '[value]') }}</span>
</div>
</div>
</td>
<td class="actions">
<i class="icon remove-icon" @click="removeCustomerGroupPrice()"></i>
</td>
</tr>
</script>
<script>
Vue.component('customer-group-price-list', {
template: '#customer-group-price-list-template',
inject: ['$validator'],
data: function() {
return {
customer_group_prices: @json($product->customer_group_prices()->get())
}
},
methods: {
addCustomerGroupPrice: function(item, key) {
this.customer_group_prices.push({
customer_group_id: '',
qty: 0,
value_type: 'fixed',
amount: 0
});
},
removeCustomerGroupPrice: function(customerGroupPrice) {
let index = this.customer_group_prices.indexOf(customerGroupPrice)
this.customer_group_prices.splice(index, 1)
}
}
});
Vue.component('customer-group-price-item', {
template: '#customer-group-price-item-template',
props: ['index', 'customerGroupPrice'],
inject: ['$validator'],
mounted: function() {
if (! this.customerGroupPrice['customer_group_id']) {
this.customerGroupPrice['customer_group_id'] = '';
}
},
computed: {
inputName: function () {
if (this.customerGroupPrice.id) {
return 'customer_group_prices[' + this.customerGroupPrice.id + ']';
}
return 'customer_group_prices[customer_group_price_' + this.index + ']';
}
},
methods: {
removeCustomerGroupPrice: function () {
this.$emit('onRemoveCustomerGroupPrice', this.customerGroupPrice)
}
}
});
</script>
@endpush

View File

@ -8,7 +8,7 @@
<div class="control-group {!! $errors->has('images.*') ? 'has-error' : '' !!}">
<label>{{ __('admin::app.catalog.categories.image') }}</label>
<image-wrapper :button-label="'{{ __('admin::app.catalog.products.add-image-btn-title') }}'" input-name="images" :images='@json($product->images)'></image-wrapper>
<product-image></product-image>
<span class="control-error" v-if="{!! $errors->has('images.*') !!}">
@php $count=1 @endphp
@ -23,4 +23,171 @@
</div>
</accordian>
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.images.after', ['product' => $product]) !!}
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.images.after', ['product' => $product]) !!}
@push('scripts')
@parent
<script type="text/x-template" id="product-image-template">
<div>
<div class="image-wrapper">
<product-image-item
v-for='(image, index) in items'
:key='image.id'
:image="image"
@onRemoveImage="removeImage($event)"
@onImageSelected="imageSelected($event)"
></product-image-item>
</div>
<label class="btn btn-lg btn-primary" style="display: inline-block; width: auto" @click="createFileType">
{{ __('admin::app.catalog.products.add-image-btn-title') }}
</label>
</div>
</script>
<script type="text/x-template" id="product-image-item-template">
<label class="image-item" v-bind:class="{ 'has-image': imageData.length > 0 }">
<input type="hidden" :name="'images[' + image.id + ']'" v-if="! new_image"/>
<input type="file" v-validate="'mimes:image/*'" accept="image/*" :name="'images[]'" ref="imageInput" :id="_uid" @change="addImageView($event)" multiple="multiple"/>
<img class="preview" :src="imageData" v-if="imageData.length > 0">
<label class="remove-image" @click="removeImage()">Remove Image</label>
</label>
</script>
<script>
Vue.component('product-image', {
template: '#product-image-template',
data: function() {
return {
images: @json($product->images),
imageCount: 0,
items: []
}
},
computed: {
finalInputName: function() {
return 'images[' + this.image.id + ']';
}
},
created: function() {
var this_this = this;
this.images.forEach(function(image) {
this_this.items.push(image)
this_this.imageCount++;
});
},
methods: {
createFileType: function() {
var this_this = this;
this.imageCount++;
this.items.push({'id': 'image_' + this.imageCount});
},
removeImage (image) {
let index = this.items.indexOf(image)
Vue.delete(this.items, index);
},
imageSelected: function(event) {
var this_this = this;
Array.from(event.files).forEach(function(image, index) {
if (index) {
this_this.imageCount++;
this_this.items.push({'id': 'image_' + this_this.imageCount, file: image});
}
});
}
}
});
Vue.component('product-image-item', {
template: '#product-image-item-template',
props: {
image: {
type: Object,
required: false,
default: null
},
},
data: function() {
return {
imageData: '',
new_image: 0
}
},
mounted () {
if (this.image.id && this.image.url) {
this.imageData = this.image.url;
} else if (this.image.id && this.image.file) {
this.readFile(this.image.file);
}
},
computed: {
finalInputName: function() {
return this.inputName + '[' + this.image.id + ']';
}
},
methods: {
addImageView: function() {
var imageInput = this.$refs.imageInput;
if (imageInput.files && imageInput.files[0]) {
if (imageInput.files[0].type.includes('image/')) {
this.readFile(imageInput.files[0])
if (imageInput.files.length > 1) {
this.$emit('onImageSelected', imageInput)
}
} else {
imageInput.value = "";
alert('Only images (.jpeg, .jpg, .png, ..) are allowed.');
}
}
},
readFile: function(image) {
var reader = new FileReader();
reader.onload = (e) => {
this.imageData = e.target.result;
}
reader.readAsDataURL(image);
this.new_image = 1;
},
removeImage: function() {
this.$emit('onRemoveImage', this.image)
}
}
});
</script>
@endpush

View File

@ -94,7 +94,7 @@
<tbody>
<variant-item v-for='(variant, index) in variants' :variant="variant" :key="index" :index="index" @onRemoveVariant="removeVariant($event)"></variant-item>
<variant-item v-for='(variant, index) in variants' :variant="variant" :key="index" :index="variant.id" @onRemoveVariant="removeVariant($event)"></variant-item>
</tbody>
@ -148,14 +148,14 @@
<td>
<div class="control-group" :class="[errors.has(variantInputName + '[price]') ? 'has-error' : '']">
<input type="number" v-validate="'required|min_value:0.0001'" v-model="variant.price" :name="[variantInputName + '[price]']" class="control" data-vv-as="&quot;{{ __('admin::app.catalog.products.price') }}&quot;" step="any"/>
<input type="number" v-validate="'required'" v-model="variant.price" :name="[variantInputName + '[price]']" class="control" data-vv-as="&quot;{{ __('admin::app.catalog.products.price') }}&quot;" step="any"/>
<span class="control-error" v-if="errors.has(variantInputName + '[price]')">@{{ errors.first(variantInputName + '[price]') }}</span>
</div>
</td>
<td>
<div class="control-group" :class="[errors.has(variantInputName + '[weight]') ? 'has-error' : '']">
<input type="number" v-validate="'required|min_value:0.0001'" v-model="variant.weight" :name="[variantInputName + '[weight]']" class="control" data-vv-as="&quot;{{ __('admin::app.catalog.products.weight') }}&quot;" step="any"/>
<input type="number" v-validate="'required'" v-model="variant.weight" :name="[variantInputName + '[weight]']" class="control" data-vv-as="&quot;{{ __('admin::app.catalog.products.weight') }}&quot;" step="any"/>
<span class="control-error" v-if="errors.has(variantInputName + '[weight]')">@{{ errors.first(variantInputName + '[weight]') }}</span>
</div>
</td>

View File

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

View File

@ -18,7 +18,7 @@
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link"
onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.catalog.products.edit-title') }}
</h1>
@ -144,6 +144,12 @@
@endforeach
@if ($attributeGroup->name == 'Price')
@include ('admin::catalog.products.accordians.customer-group-price')
@endif
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.' . $attributeGroup->name . '.controls.after', ['product' => $product]) !!}
</div>
</accordian>
@ -192,8 +198,8 @@
selector: 'textarea#description, textarea#short_description',
height: 200,
width: "100%",
plugins: 'image imagetools media wordcount save fullscreen code',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | code',
plugins: 'image imagetools media wordcount save fullscreen code table lists link hr',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor link hr | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | code | table',
image_advtab: true
});
});

View File

@ -1,6 +1,6 @@
<select v-validate="'{{$validations}}'" class="control" id="{{ $attribute->code }}" name="{{ $attribute->code }}[]" data-vv-as="&quot;{{ $attribute->admin_name }}&quot;" multiple>
@foreach ($attribute->options as $option)
@foreach ($attribute->options()->orderBy('sort_order')->get() as $option)
<option value="{{ $option->id }}" {{ in_array($option->id, explode(',', $product[$attribute->code])) ? 'selected' : ''}}>
{{ $option->admin_name }}
</option>

View File

@ -4,7 +4,7 @@
@if ($attribute->code != 'tax_category_id')
@foreach ($attribute->options as $option)
@foreach ($attribute->options()->orderBy('sort_order')->get() as $option)
<option value="{{ $option->id }}" {{ $option->id == $selectedOption ? 'selected' : ''}}>
{{ $option->admin_name }}
</option>

View File

@ -1,4 +1,4 @@
<input type="text" v-validate="'{{$validations}}'" class="control" id="{{ $attribute->code }}" name="{{ $attribute->code }}" value="{{ old($attribute->code) ?: $product[$attribute->code] }}" {{ in_array($attribute->code, ['sku', 'url_key']) ? 'v-slugify' : '' }} data-vv-as="&quot;{{ $attribute->admin_name }}&quot;" {{ $attribute->code == 'name' ? 'v-slugify-target=\'url_key\'' : '' }} />
<input type="text" v-validate="'{{$validations}}'" class="control" id="{{ $attribute->code }}" name="{{ $attribute->code }}" value="{{ old($attribute->code) ?: $product[$attribute->code] }}" {{ in_array($attribute->code, ['sku', 'url_key']) ? 'v-slugify' : '' }} data-vv-as="&quot;{{ $attribute->admin_name }}&quot;" {{ $attribute->code == 'name' && ! $product[$attribute->code] ? 'v-slugify-target=\'url_key\'' : '' }} />

View File

@ -19,7 +19,6 @@
</option>
@foreach (core()->getAllChannels() as $channelModel)
<option
value="{{ $channelModel->code }}" {{ (isset($channel) && ($channelModel->code) == $channel) ? 'selected' : '' }}>
{{ $channelModel->name }}
@ -90,6 +89,6 @@
window.location.href = url.href;
}
</script>
@endpush

View File

@ -11,7 +11,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.cms.pages.add-title') }}
</h1>
@ -117,11 +117,11 @@
selector: 'textarea#content',
height: 200,
width: "100%",
plugins: 'image imagetools media wordcount save fullscreen code',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat | code',
plugins: 'image imagetools media wordcount save fullscreen code table lists link hr',
toolbar1: 'formatselect | bold italic strikethrough forecolor backcolor alignleft aligncenter alignright alignjustify | link hr |numlist bullist outdent indent | removeformat | code | table',
image_advtab: true,
valid_elements : '*[*]'
});
});
</script>
@endpush
@endpush

View File

@ -13,7 +13,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.cms.pages.edit-title') }}
</h1>

View File

@ -408,12 +408,12 @@
<span class="locale"> [@{{ channel_locale }}] </span>
</label>
<select v-if="this.options.length" v-validate= "validations" class="control" :id = "name" :name = "name" v-model="this.result"
<select v-if="this.options.length" v-validate= "validations" class="control" :id = "name" :name = "name" v-model="savedValue"
:data-vv-as="field_name">
<option v-for='(option, index) in this.options' :value="option.value"> @{{ option.title }} </option>
</select>
<input v-else type="text" class="control" v-validate= "validations" :id = "name" :name = "name" v-model="this.result"
<input v-else type="text" class="control" v-validate= "validations" :id = "name" :name = "name" v-model="savedValue"
:data-vv-as="field_name">
<span class="control-error" v-if="errors.has(name)">
@ -436,12 +436,15 @@
return {
isRequire: false,
isVisible: false,
savedValue: "",
}
},
mounted: function () {
var this_this = this;
this_this.savedValue = this_this.result;
if (this_this.validations || (this_this.validations.indexOf("required") != -1)) {
this_this.isRequire = true;
}

View File

@ -5,16 +5,16 @@
@stop
@section('content-wrapper')
@section('content')
<div class="content full-page">
<div class="content">
{!! view_render_event('admin.customer.addresses.create.before') !!}
<form method="POST" action="{{ route('admin.customer.addresses.store', ['id' => $customer->id]) }}" @submit.prevent="onSubmit">
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.customers.addresses.create-title') }}
</h1>
@ -76,7 +76,7 @@
<div class="control-group" :class="[errors.has('city') ? 'has-error' : '']">
<label for="city" class="required">{{ __('shop::app.customer.account.address.create.city') }}</label>
<input type="text" class="control" name="city" v-validate="'required|alpha_spaces'" value="{{ old('city') }}" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.city') }}&quot;">
<input type="text" class="control" name="city" v-validate="'required|regex:^[a-zA-Z \-]*$'" value="{{ old('city') }}" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.city') }}&quot;">
<span class="control-error" v-if="errors.has('city')">@{{ errors.first('city') }}</span>
</div>

View File

@ -5,9 +5,9 @@
@stop
@section('content-wrapper')
@section('content')
<div class="content full-page">
<div class="content">
{!! view_render_event('admin.customer.addresses.edit.before', ['address' => $address]) !!}
<form method="post" action="{{ route('admin.customer.addresses.update', $address->id) }}" @submit.prevent="onSubmit">
@ -75,7 +75,7 @@
<div class="control-group" :class="[errors.has('city') ? 'has-error' : '']">
<label for="city" class="required">{{ __('shop::app.customer.account.address.create.city') }}</label>
<input type="text" class="control" name="city" v-validate="'required'" value="{{ old('city') ?: $address->city }}" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.city') }}&quot;">
<input type="text" class="control" name="city" v-validate="'required|regex:^[a-zA-Z \-]*$'" value="{{ old('city') ?: $address->city }}" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.city') }}&quot;">
<span class="control-error" v-if="errors.has('city')">@{{ errors.first('city') }}</span>
</div>

View File

@ -1,4 +1,4 @@
@extends('address::admin.layouts.content')
@extends('admin::layouts.content')
@section('page_title')
{{ __('address::app.admin.addresses.title-orders', ['customer_name' => $customer->first_name . ' ' . $customer->last_name]) }}
@ -10,7 +10,7 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.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="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.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="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.customers.customers.title') }}
@ -31,24 +31,32 @@
<div class="form-container">
@csrf()
{!! view_render_event('bagisto.admin.customers.create.before') !!}
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
<label for="first_name" class="required">{{ __('admin::app.customers.customers.first_name') }}</label>
<input type="text" class="control" name="first_name" v-validate="'required'" value="{{ old('first_name') }}" data-vv-as="&quot;{{ __('shop::app.customer.signup-form.firstname') }}&quot;">
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
{!! view_render_event('bagisto.admin.customers.create.first_name.after') !!}
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
<label for="last_name" class="required">{{ __('admin::app.customers.customers.last_name') }}</label>
<input type="text" class="control" name="last_name" v-validate="'required'" value="{{ old('last_name') }}" data-vv-as="&quot;{{ __('shop::app.customer.signup-form.lastname') }}&quot;">
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
</div>
{!! view_render_event('bagisto.admin.customers.create.last_name.after') !!}
<div class="control-group" :class="[errors.has('email') ? 'has-error' : '']">
<label for="email" class="required">{{ __('shop::app.customer.signup-form.email') }}</label>
<input type="email" class="control" name="email" v-validate="'required|email'" value="{{ old('email') }}" data-vv-as="&quot;{{ __('shop::app.customer.signup-form.email') }}&quot;">
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
</div>
{!! view_render_event('bagisto.admin.customers.create.email.after') !!}
<div class="control-group" :class="[errors.has('gender') ? 'has-error' : '']">
<label for="gender" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
<select name="gender" class="control" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.customers.customers.gender') }}&quot;">
@ -60,18 +68,24 @@
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
{!! view_render_event('bagisto.admin.customers.create.gender.after') !!}
<div class="control-group" :class="[errors.has('date_of_birth') ? 'has-error' : '']">
<label for="dob">{{ __('admin::app.customers.customers.date_of_birth') }}</label>
<input type="date" class="control" name="date_of_birth" v-validate="" value="{{ old('date_of_birth') }}" data-vv-as="&quot;{{ __('admin::app.customers.customers.date_of_birth') }}&quot;">
<span class="control-error" v-if="errors.has('date_of_birth')">@{{ errors.first('date_of_birth') }}</span>
</div>
{!! view_render_event('bagisto.admin.customers.create.date_of_birth.after') !!}
<div class="control-group" :class="[errors.has('phone') ? 'has-error' : '']">
<label for="phone">{{ __('admin::app.customers.customers.phone') }}</label>
<input type="text" class="control" name="phone" value="{{ old('phone') }}" data-vv-as="&quot;{{ __('admin::app.customers.customers.phone') }}&quot;">
<span class="control-error" v-if="errors.has('phone')">@{{ errors.first('phone') }}</span>
</div>
{!! view_render_event('bagisto.admin.customers.create.phone.after') !!}
<div class="control-group">
<label for="customerGroup" >{{ __('admin::app.customers.customers.customer_group') }}</label>
<select class="control" name="customer_group_id">
@ -80,6 +94,8 @@
@endforeach
</select>
</div>
{!! view_render_event('bagisto.admin.customers.create.after') !!}
</div>
</div>
</form>

View File

@ -6,113 +6,31 @@
@section('content')
<div class="content">
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ $customer->first_name . " " . $customer->last_name }}
</h1>
</div>
</div>
<tabs>
{!! view_render_event('bagisto.admin.customer.edit.before', ['customer' => $customer]) !!}
<form method="POST" action="{{ route('admin.customer.update', $customer->id) }}">
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
{{ __('admin::app.customers.customers.title') }}
</h1>
<tab name="{{ __('admin::app.sales.orders.info') }}" :selected="true">
<div class="sale-container">
@include('admin::customers.general')
</div>
</tab>
<div class="page-action">
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.customers.customers.save-btn-title') }}
</button>
<tab name="{{ __('admin::app.customers.customers.addresses') }}" :selected="false">
<div class="style:overflow: auto;">&nbsp;</div>
{!! view_render_event('bagisto.admin.customer.addresses.list.before') !!}
{!! app('Webkul\Admin\DataGrids\AddressDataGrid')->render() !!}
{!! view_render_event('bagisto.admin.customer.addresses.list.after') !!}
</div>
</div>
<div class="page-content">
<div class="form-container">
@csrf()
<input name="_method" type="hidden" value="PUT">
<accordian :title="'{{ __('admin::app.account.general') }}'" :active="true">
<div slot="body">
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
<label for="first_name" class="required"> {{ __('admin::app.customers.customers.first_name') }}</label>
<input type="text" class="control" name="first_name" v-validate="'required'" value="{{old('first_name') ?:$customer->first_name}}"
data-vv-as="&quot;{{ __('shop::app.customer.signup-form.firstname') }}&quot;"/>
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
<label for="last_name" class="required"> {{ __('admin::app.customers.customers.last_name') }}</label>
<input type="text" class="control" name="last_name" v-validate="'required'" value="{{old('last_name') ?:$customer->last_name}}" data-vv-as="&quot;{{ __('shop::app.customer.signup-form.lastname') }}&quot;">
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('email') ? 'has-error' : '']">
<label for="email" class="required"> {{ __('admin::app.customers.customers.email') }}</label>
<input type="email" class="control" name="email" v-validate="'required|email'" value="{{old('email') ?:$customer->email}}" data-vv-as="&quot;{{ __('shop::app.customer.signup-form.email') }}&quot;">
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
</div>
<div class="control-group" :class="[errors.has('gender') ? 'has-error' : '']">
<label for="gender" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
<select name="gender" class="control" value="{{ $customer->gender }}" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.customers.customers.gender') }}&quot;">
<option value="" {{ $customer->gender == "" ? 'selected' : '' }}></option>
<option value="{{ __('admin::app.customers.customers.male') }}" {{ $customer->gender == __('admin::app.customers.customers.male') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.male') }}</option>
<option value="{{ __('admin::app.customers.customers.female') }}" {{ $customer->gender == __('admin::app.customers.customers.female') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.female') }}</option>
<option value="{{ __('admin::app.customers.customers.other') }}" {{ $customer->gender == __('admin::app.customers.customers.other') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.other') }}</option>
</select>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
<div class="control-group">
<label for="status" class="required">{{ __('admin::app.customers.customers.status') }}</label>
<label class="switch">
<input type="checkbox" id="status" name="status" value="{{ $customer->status }}" {{ $customer->status ? 'checked' : '' }}>
<span class="slider round"></span>
</label>
<span class="control-error" v-if="errors.has('status')">@{{ errors.first('status') }}</span>
</div>
<div class="control-group" :class="[errors.has('date_of_birth') ? 'has-error' : '']">
<label for="dob">{{ __('admin::app.customers.customers.date_of_birth') }}</label>
<input type="date" class="control" name="date_of_birth" value="{{ old('date_of_birth') ?:$customer->date_of_birth }}" v-validate="" data-vv-as="&quot;{{ __('admin::app.customers.customers.date_of_birth') }}&quot;">
<span class="control-error" v-if="errors.has('date_of_birth')">@{{ errors.first('date_of_birth') }}</span>
</div>
<div class="control-group" :class="[errors.has('phone') ? 'has-error' : '']">
<label for="phone">{{ __('admin::app.customers.customers.phone') }}</label>
<input type="text" class="control" name="phone" value="{{ $customer->phone }}" data-vv-as="&quot;{{ __('admin::app.customers.customers.phone') }}&quot;">
<span class="control-error" v-if="errors.has('phone')">@{{ errors.first('phone') }}</span>
</div>
<div class="control-group">
<label for="customerGroup" >{{ __('admin::app.customers.customers.customer_group') }}</label>
@if (! is_null($customer->customer_group_id))
<?php $selectedCustomerOption = $customer->group->id ?>
@else
<?php $selectedCustomerOption = '' ?>
@endif
<select class="control" name="customer_group_id">
@foreach ($customerGroup as $group)
<option value="{{ $group->id }}" {{ $selectedCustomerOption == $group->id ? 'selected' : '' }}>
{{ $group->name}}
</option>
@endforeach
</select>
</div>
</div>
</accordian>
</div>
</div>
</form>
</tab>
{!! view_render_event('bagisto.admin.customer.edit.after', ['customer' => $customer]) !!}
</tabs>
</div>
@stop

View File

@ -0,0 +1,105 @@
{!! view_render_event('bagisto.admin.customer.edit.before', ['customer' => $customer]) !!}
<form method="POST" action="{{ route('admin.customer.update', $customer->id) }}">
<div class="page-content">
<div class="form-container">
@csrf()
<input name="_method" type="hidden" value="PUT">
<div class="style:overflow: auto;">&nbsp;</div>
<div slot="body">
{!! view_render_event('bagisto.admin.customer.edit.form.before', ['customer' => $customer]) !!}
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
<label for="first_name" class="required"> {{ __('admin::app.customers.customers.first_name') }}</label>
<input type="text" class="control" name="first_name" v-validate="'required'" value="{{old('first_name') ?:$customer->first_name}}"
data-vv-as="&quot;{{ __('shop::app.customer.signup-form.firstname') }}&quot;"/>
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
{!! view_render_event('bagisto.admin.customer.edit.first_name.after', ['customer' => $customer]) !!}
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
<label for="last_name" class="required"> {{ __('admin::app.customers.customers.last_name') }}</label>
<input type="text" class="control" name="last_name" v-validate="'required'" value="{{old('last_name') ?:$customer->last_name}}" data-vv-as="&quot;{{ __('shop::app.customer.signup-form.lastname') }}&quot;">
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
</div>
{!! view_render_event('bagisto.admin.customer.edit.last_name.after', ['customer' => $customer]) !!}
<div class="control-group" :class="[errors.has('email') ? 'has-error' : '']">
<label for="email" class="required"> {{ __('admin::app.customers.customers.email') }}</label>
<input type="email" class="control" name="email" v-validate="'required|email'" value="{{old('email') ?:$customer->email}}" data-vv-as="&quot;{{ __('shop::app.customer.signup-form.email') }}&quot;">
<span class="control-error" v-if="errors.has('email')">@{{ errors.first('email') }}</span>
</div>
{!! view_render_event('bagisto.admin.customer.edit.email.after', ['customer' => $customer]) !!}
<div class="control-group" :class="[errors.has('gender') ? 'has-error' : '']">
<label for="gender" class="required">{{ __('admin::app.customers.customers.gender') }}</label>
<select name="gender" class="control" value="{{ $customer->gender }}" v-validate="'required'" data-vv-as="&quot;{{ __('admin::app.customers.customers.gender') }}&quot;">
<option value="" {{ $customer->gender == "" ? 'selected' : '' }}></option>
<option value="{{ __('admin::app.customers.customers.male') }}" {{ $customer->gender == __('admin::app.customers.customers.male') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.male') }}</option>
<option value="{{ __('admin::app.customers.customers.female') }}" {{ $customer->gender == __('admin::app.customers.customers.female') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.female') }}</option>
<option value="{{ __('admin::app.customers.customers.other') }}" {{ $customer->gender == __('admin::app.customers.customers.other') ? 'selected' : '' }}>{{ __('admin::app.customers.customers.other') }}</option>
</select>
<span class="control-error" v-if="errors.has('gender')">@{{ errors.first('gender') }}</span>
</div>
{!! view_render_event('bagisto.admin.customer.edit.gender.after', ['customer' => $customer]) !!}
<div class="control-group">
<label for="status" class="required">{{ __('admin::app.customers.customers.status') }}</label>
<label class="switch">
<input type="checkbox" id="status" name="status" value="{{ $customer->status }}" {{ $customer->status ? 'checked' : '' }}>
<span class="slider round"></span>
</label>
<span class="control-error" v-if="errors.has('status')">@{{ errors.first('status') }}</span>
</div>
{!! view_render_event('bagisto.admin.customer.edit.status.after', ['customer' => $customer]) !!}
<div class="control-group" :class="[errors.has('date_of_birth') ? 'has-error' : '']">
<label for="dob">{{ __('admin::app.customers.customers.date_of_birth') }}</label>
<input type="date" class="control" name="date_of_birth" value="{{ old('date_of_birth') ?:$customer->date_of_birth }}" v-validate="" data-vv-as="&quot;{{ __('admin::app.customers.customers.date_of_birth') }}&quot;">
<span class="control-error" v-if="errors.has('date_of_birth')">@{{ errors.first('date_of_birth') }}</span>
</div>
{!! view_render_event('bagisto.admin.customer.edit.date_of_birth.after', ['customer' => $customer]) !!}
<div class="control-group" :class="[errors.has('phone') ? 'has-error' : '']">
<label for="phone">{{ __('admin::app.customers.customers.phone') }}</label>
<input type="text" class="control" name="phone" value="{{ $customer->phone }}" data-vv-as="&quot;{{ __('admin::app.customers.customers.phone') }}&quot;">
<span class="control-error" v-if="errors.has('phone')">@{{ errors.first('phone') }}</span>
</div>
{!! view_render_event('bagisto.admin.customer.edit.phone.after', ['customer' => $customer]) !!}
<div class="control-group">
<label for="customerGroup" >{{ __('admin::app.customers.customers.customer_group') }}</label>
@if (! is_null($customer->customer_group_id))
<?php $selectedCustomerOption = $customer->group->id ?>
@else
<?php $selectedCustomerOption = '' ?>
@endif
<select class="control" name="customer_group_id">
@foreach ($customerGroup as $group)
<option value="{{ $group->id }}" {{ $selectedCustomerOption == $group->id ? 'selected' : '' }}>
{{ $group->name}}
</option>
@endforeach
</select>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary">
{{ __('admin::app.customers.customers.save-btn-title') }}
</button>
</div>
</div>
</form>
{!! view_render_event('bagisto.admin.customer.edit.after', ['customer' => $customer]) !!}

View File

@ -11,8 +11,8 @@
<div class="page-header">
<div class="page-title">
<h1>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.customers.groups.add-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="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.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="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.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="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.customers.reviews.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="history.length > 1 ? history.go(-1) : window.location = '{{ url('/admin/dashboard') }}';"></i>
<i class="icon angle-left-icon back-link" onclick="history.length > 1 ? history.go(-1) : window.location = '{{ route('admin.dashboard.index') }}';"></i>
{{ __('admin::app.customers.subscribers.title-edit') }}
</h1>

View File

@ -369,11 +369,11 @@
<script type="text/x-template" id="date-filter-template">
<div>
<div class="control-group date">
<date @onChange="applyFilter('start', $event)"><input type="text" class="control" id="start_date" value="{{ $startDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.from') }}" v-model="start"/></date>
<date @onChange="applyFilter('start', $event)" hide-remove-button="1"><input type="text" class="control" id="start_date" value="{{ $startDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.from') }}" v-model="start"/></date>
</div>
<div class="control-group date">
<date @onChange="applyFilter('end', $event)"><input type="text" class="control" id="end_date" value="{{ $endDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.to') }}" v-model="end"/></date>
<date @onChange="applyFilter('end', $event)" hide-remove-button="1"><input type="text" class="control" id="end_date" value="{{ $endDate->format('Y-m-d') }}" placeholder="{{ __('admin::app.dashboard.to') }}" v-model="end"/></date>
</div>
</div>
</script>

View File

@ -7,8 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="icon" sizes="16x16" href="{{ asset('vendor/webkul/ui/assets/images/favicon.ico') }}" />
@if ($favicon = core()->getConfigData('general.design.admin_logo.favicon'))
<link rel="icon" sizes="16x16" href="{{ \Illuminate\Support\Facades\Storage::url($favicon) }}" />
@else
<link rel="icon" sizes="16x16" href="{{ asset('vendor/webkul/ui/assets/images/favicon.ico') }}" />
@endif
<link rel="stylesheet" href="{{ asset('vendor/webkul/admin/assets/css/admin.css') }}">
<link rel="stylesheet" href="{{ asset('vendor/webkul/ui/assets/css/ui.css') }}">

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