From 3a7ab610829dd4d4ee21e75f780039a1cf0b5bfe Mon Sep 17 00:00:00 2001 From: jitendra Date: Tue, 24 Jul 2018 16:41:32 +0530 Subject: [PATCH] Currency, Exchange Rate completed --- composer.json | 10 +- composer.lock | 61 ++- config/app.php | 5 +- config/translatable.php | 116 ++++++ packages/Webkul/Admin/src/Http/routes.php | 125 +++++- .../src/Providers/EventServiceProvider.php | 22 +- .../Admin/src/Resources/assets/js/app.js | 9 +- .../Admin/src/Resources/assets/sass/app.scss | 22 +- .../Admin/src/Resources/lang/en/app.php | 163 +++++++- .../Resources/views/account/edit.blade.php | 16 +- .../views/catalog/attributes/create.blade.php | 6 +- .../views/catalog/attributes/edit.blade.php | 10 +- .../views/catalog/categories/create.blade.php | 116 ++++++ .../views/catalog/categories/edit.blade.php | 131 +++++++ .../views/catalog/categories/index.blade.php | 21 + .../views/catalog/families/create.blade.php | 99 ++++- .../views/catalog/families/edit.blade.php | 361 ++++++++++++++++++ .../views/settings/channels/create.blade.php | 109 ++++++ .../views/settings/channels/index.blade.php | 21 + .../views/settings/countries/create.blade.php | 43 +++ .../views/settings/countries/index.blade.php | 21 + .../settings/currencies/create.blade.php | 49 +++ .../views/settings/currencies/edit.blade.php | 50 +++ .../views/settings/currencies/index.blade.php | 21 + .../settings/exchange_rates/create.blade.php | 61 +++ .../settings/exchange_rates/edit.blade.php | 66 ++++ .../settings/exchange_rates/index.blade.php | 25 ++ .../inventory_sources/create.blade.php | 141 +++++++ .../settings/inventory_sources/edit.blade.php | 143 +++++++ .../inventory_sources/index.blade.php | 25 ++ .../{ => settings}/locales/create.blade.php | 14 +- .../{ => settings}/locales/index.blade.php | 2 +- .../users/forget-password/create.blade.php | 10 +- .../users/reset-password/create.blade.php | 14 +- .../views/users/roles/create.blade.php | 22 +- .../views/users/roles/edit.blade.php | 22 +- .../views/users/sessions/create.blade.php | 14 +- .../views/users/users/create.blade.php | 26 +- .../views/users/users/edit.blade.php | 29 +- ...135200_create_attribute_families_table.php | 1 + .../Controllers/AttributeFamilyController.php | 9 +- .../Webkul/Attribute/src/Models/Attribute.php | 7 +- .../Attribute/src/Models/AttributeFamily.php | 12 + .../Attribute/src/Models/AttributeGroup.php | 4 + .../Attribute/src/Models/AttributeOption.php | 6 +- .../AttributeFamilyRepository.php | 53 ++- packages/Webkul/Category/composer.json | 8 +- ...8_07_05_142820_create_categories_table.php | 9 +- ...836_create_category_translations_table.php | 42 ++ .../Http/Controllers/CategoryController.php | 137 +++++++ .../src/Http/Controllers/Controller.php | 13 + .../Webkul/Category/src/Models/Category.php | 23 ++ .../src/Models/CategoryTranslation.php | 12 + .../src/Repositories/CategoryRepository.php | 90 +++++ packages/Webkul/Channel/.gitignore | 1 + packages/Webkul/Channel/composer.json | 27 ++ packages/Webkul/Channel/src/Channel.php | 14 + ...018_07_20_064849_create_channels_table.php | 48 +++ ...20_124255_create_channel_locales_table.php | 35 ++ .../Webkul/Channel/src/Facades/Channel.php | 18 + .../Http/Controllers/ChannelController.php | 137 +++++++ .../src/Http/Controllers/Controller.php | 13 + packages/Webkul/Channel/src/Http/helpers.php | 10 + .../Webkul/Channel/src/Models/Channel.php | 45 +++ .../Channel/src/Models/ChannelLocale.php | 17 + .../src/Providers/ChannelServiceProvider.php | 49 +++ .../Repositories/ChannelLocaleRepository.php | 24 ++ .../src/Repositories/ChannelRepository.php | 43 +++ .../Core/src/Contracts/Validations/Code.php | 30 ++ packages/Webkul/Core/src/Core.php | 17 + packages/Webkul/Core/src/Currency.php | 12 + ...8_07_20_054426_create_countries_table.php} | 9 +- ..._07_20_054502_create_currencies_table.php} | 9 +- ...2_create_currency_exchange_rates_table.php | 36 ++ .../Database/Seeders/LocalesTableSeeder.php | 5 + .../Webkul/Core/src/Eloquent/Repository.php | 18 +- .../Core/src/Eloquent/TranslatableModel.php | 39 ++ packages/Webkul/Core/src/Facades/Core.php | 18 + .../Http/Controllers/CountryController.php | 84 ++++ .../Http/Controllers/CurrencyController.php | 95 +++++ .../Controllers/ExchangeRateController.php | 150 ++++++++ .../Core/src/Http/Middleware/Locale.php | 41 ++ packages/Webkul/Core/src/Http/helpers.php | 10 + packages/Webkul/Core/src/Models/Country.php | 17 + packages/Webkul/Core/src/Models/Currency.php | 17 + .../Core/src/Models/CurrencyExchangeRate.php | 17 + packages/Webkul/Core/src/Models/Locale.php | 1 - .../src/Providers/CoreServiceProvider.php | 25 ++ .../src/Repositories/CountryRepository.php | 24 ++ .../src/Repositories/CurrencyRepository.php | 24 ++ .../Repositories/ExchangeRateRepository.php | 24 ++ .../src/Repositories/LocaleRepository.php | 24 ++ .../Core/src/Resources/lang/en/validation.php | 3 +- packages/Webkul/Inventory/.gitignore | 1 + packages/Webkul/Inventory/composer.json | 27 ++ ..._110040_create_inventory_sources_table.php | 47 +++ .../src/Http/Controllers/Controller.php | 13 + .../Controllers/InventorySourceController.php | 125 ++++++ .../Inventory/src/Models/InventorySource.php | 10 + .../Providers/InventoryServiceProvider.php | 29 ++ .../InventorySourceRepository.php | 24 ++ .../Resources/assets/images/Folder-Icon.svg | 10 + .../Webkul/Ui/src/Resources/assets/js/app.js | 1 + .../js/components/tree-view/tree-checkbox.vue | 5 +- .../js/components/tree-view/tree-item.vue | 93 +++-- .../js/components/tree-view/tree-radio.vue | 25 ++ .../js/components/tree-view/tree-view.vue | 29 +- .../Ui/src/Resources/assets/sass/app.scss | 14 + .../Ui/src/Resources/assets/sass/icons.scss | 6 + .../vendor/webkul/admin/assets/css/admin.css | 22 +- public/vendor/webkul/admin/assets/js/admin.js | 9 +- public/vendor/webkul/ui/assets/css/ui.css | 20 + .../webkul/ui/assets/images/Folder-Icon.svg | 10 + public/vendor/webkul/ui/assets/js/ui.js | 245 +++++++++--- 114 files changed, 4391 insertions(+), 251 deletions(-) create mode 100644 config/translatable.php create mode 100644 packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/catalog/categories/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/catalog/categories/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/catalog/families/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/channels/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/channels/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/countries/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/countries/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/currencies/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/currencies/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/currencies/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/index.blade.php rename packages/Webkul/Admin/src/Resources/views/{ => settings}/locales/create.blade.php (72%) rename packages/Webkul/Admin/src/Resources/views/{ => settings}/locales/index.blade.php (85%) create mode 100644 packages/Webkul/Category/src/Database/Migrations/2018_07_21_142836_create_category_translations_table.php create mode 100644 packages/Webkul/Category/src/Http/Controllers/CategoryController.php create mode 100644 packages/Webkul/Category/src/Http/Controllers/Controller.php create mode 100644 packages/Webkul/Category/src/Models/Category.php create mode 100644 packages/Webkul/Category/src/Models/CategoryTranslation.php create mode 100644 packages/Webkul/Category/src/Repositories/CategoryRepository.php create mode 100644 packages/Webkul/Channel/.gitignore create mode 100644 packages/Webkul/Channel/composer.json create mode 100644 packages/Webkul/Channel/src/Channel.php create mode 100644 packages/Webkul/Channel/src/Database/Migrations/2018_07_20_064849_create_channels_table.php create mode 100644 packages/Webkul/Channel/src/Database/Migrations/2018_07_20_124255_create_channel_locales_table.php create mode 100644 packages/Webkul/Channel/src/Facades/Channel.php create mode 100644 packages/Webkul/Channel/src/Http/Controllers/ChannelController.php create mode 100644 packages/Webkul/Channel/src/Http/Controllers/Controller.php create mode 100644 packages/Webkul/Channel/src/Http/helpers.php create mode 100644 packages/Webkul/Channel/src/Models/Channel.php create mode 100644 packages/Webkul/Channel/src/Models/ChannelLocale.php create mode 100644 packages/Webkul/Channel/src/Providers/ChannelServiceProvider.php create mode 100644 packages/Webkul/Channel/src/Repositories/ChannelLocaleRepository.php create mode 100644 packages/Webkul/Channel/src/Repositories/ChannelRepository.php create mode 100644 packages/Webkul/Core/src/Contracts/Validations/Code.php create mode 100644 packages/Webkul/Core/src/Core.php create mode 100644 packages/Webkul/Core/src/Currency.php rename packages/Webkul/{Category/src/Database/Migrations/2018_07_05_142851_create_category_description_translations_table.php => Core/src/Database/Migrations/2018_07_20_054426_create_countries_table.php} (61%) rename packages/Webkul/{Category/src/Database/Migrations/2018_07_05_142836_create_category_name_translations_table.php => Core/src/Database/Migrations/2018_07_20_054502_create_currencies_table.php} (62%) create mode 100644 packages/Webkul/Core/src/Database/Migrations/2018_07_20_054542_create_currency_exchange_rates_table.php create mode 100644 packages/Webkul/Core/src/Eloquent/TranslatableModel.php create mode 100644 packages/Webkul/Core/src/Facades/Core.php create mode 100644 packages/Webkul/Core/src/Http/Controllers/CountryController.php create mode 100644 packages/Webkul/Core/src/Http/Controllers/CurrencyController.php create mode 100644 packages/Webkul/Core/src/Http/Controllers/ExchangeRateController.php create mode 100644 packages/Webkul/Core/src/Http/Middleware/Locale.php create mode 100644 packages/Webkul/Core/src/Http/helpers.php create mode 100644 packages/Webkul/Core/src/Models/Country.php create mode 100644 packages/Webkul/Core/src/Models/Currency.php create mode 100644 packages/Webkul/Core/src/Models/CurrencyExchangeRate.php create mode 100644 packages/Webkul/Core/src/Repositories/CountryRepository.php create mode 100644 packages/Webkul/Core/src/Repositories/CurrencyRepository.php create mode 100644 packages/Webkul/Core/src/Repositories/ExchangeRateRepository.php create mode 100644 packages/Webkul/Core/src/Repositories/LocaleRepository.php create mode 100644 packages/Webkul/Inventory/.gitignore create mode 100644 packages/Webkul/Inventory/composer.json create mode 100644 packages/Webkul/Inventory/src/Database/Migrations/2018_07_23_110040_create_inventory_sources_table.php create mode 100644 packages/Webkul/Inventory/src/Http/Controllers/Controller.php create mode 100644 packages/Webkul/Inventory/src/Http/Controllers/InventorySourceController.php create mode 100644 packages/Webkul/Inventory/src/Models/InventorySource.php create mode 100644 packages/Webkul/Inventory/src/Providers/InventoryServiceProvider.php create mode 100644 packages/Webkul/Inventory/src/Repositories/InventorySourceRepository.php create mode 100644 packages/Webkul/Ui/src/Resources/assets/images/Folder-Icon.svg create mode 100644 packages/Webkul/Ui/src/Resources/assets/js/components/tree-view/tree-radio.vue create mode 100644 public/vendor/webkul/ui/assets/images/Folder-Icon.svg diff --git a/composer.json b/composer.json index ad4e3695b..c61e9f9e8 100644 --- a/composer.json +++ b/composer.json @@ -8,6 +8,7 @@ "php": "^7.1.3", "dimsav/laravel-translatable": "^9.0", "fideloper/proxy": "^4.0", + "kalnoy/nestedset": "^4.3", "laravel/framework": "5.6.*", "laravel/tinker": "^1.0", "nwidart/laravel-modules": "^3.2", @@ -26,7 +27,9 @@ "webkul/laravel-admin": "self.version", "webkul/laravel-ui": "self.version", "webkul/laravel-core": "self.version", - "webkul/laravel-attribute": "self.version" + "webkul/laravel-category": "self.version", + "webkul/laravel-attribute": "self.version", + "webkul/laravel-channel": "self.version" }, "autoload": { "classmap": [ @@ -38,8 +41,11 @@ "Webkul\\User\\": "packages/Webkul/User/src", "Webkul\\Admin\\": "packages/Webkul/Admin/src", "Webkul\\Ui\\": "packages/Webkul/Ui/src", + "Webkul\\Category\\": "packages/Webkul/Category/src", "Webkul\\Attribute\\": "packages/Webkul/Attribute/src", - "Webkul\\Core\\": "packages/Webkul/Core/src" + "Webkul\\Core\\": "packages/Webkul/Core/src", + "Webkul\\Channel\\": "packages/Webkul/Channel/src", + "Webkul\\Inventory\\": "packages/Webkul/Inventory/src" } }, "autoload-dev": { diff --git a/composer.lock b/composer.lock index 72e9bdcda..b3c862170 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1cfe5a0cb070df958cccb486627d42f2", + "content-hash": "47eeeb44e8f067ec98ea469bd35acf54", "packages": [ { "name": "commerceguys/intl", @@ -617,6 +617,65 @@ ], "time": "2018-05-16T11:53:55+00:00" }, + { + "name": "kalnoy/nestedset", + "version": "v4.3.2", + "source": { + "type": "git", + "url": "https://github.com/lazychaser/laravel-nestedset.git", + "reference": "3265da51ef71238fc2d086b54eef7a75dd15c665" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lazychaser/laravel-nestedset/zipball/3265da51ef71238fc2d086b54eef7a75dd15c665", + "reference": "3265da51ef71238fc2d086b54eef7a75dd15c665", + "shasum": "" + }, + "require": { + "illuminate/database": "5.2 - 5.6", + "illuminate/events": "5.2 - 5.6", + "illuminate/support": "5.2 - 5.6", + "php": ">=5.5.9" + }, + "require-dev": { + "phpunit/phpunit": "4.8.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v4.2.x-dev" + }, + "laravel": { + "providers": [ + "Kalnoy\\Nestedset\\NestedSetServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Kalnoy\\Nestedset\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Kalnoy", + "email": "lazychaser@gmail.com" + } + ], + "description": "Nested Set Model for Laravel 4-5", + "keywords": [ + "database", + "hierarchy", + "laravel", + "nested sets", + "nsm" + ], + "time": "2018-02-04T08:47:55+00:00" + }, { "name": "laravel/framework", "version": "v5.6.24", diff --git a/config/app.php b/config/app.php index d778acc5b..ae6cda857 100644 --- a/config/app.php +++ b/config/app.php @@ -167,8 +167,11 @@ return [ Webkul\User\Providers\UserServiceProvider::class, Webkul\Admin\Providers\AdminServiceProvider::class, Webkul\Ui\Providers\UiServiceProvider::class, + Webkul\Category\Providers\CategoryServiceProvider::class, Webkul\Attribute\Providers\AttributeServiceProvider::class, - Webkul\Core\Providers\CoreServiceProvider::class + Webkul\Core\Providers\CoreServiceProvider::class, + Webkul\Channel\Providers\ChannelServiceProvider::class, + Webkul\Inventory\Providers\InventoryServiceProvider::class ], /* diff --git a/config/translatable.php b/config/translatable.php new file mode 100644 index 000000000..1ef910d3e --- /dev/null +++ b/config/translatable.php @@ -0,0 +1,116 @@ + [ + 'en', + 'fr', + 'es' => [ + 'MX', // mexican spanish + 'CO', // colombian spanish + ], + ], + + /* + |-------------------------------------------------------------------------- + | Locale separator + |-------------------------------------------------------------------------- + | + | This is a string used to glue the language and the country when defining + | the available locales. Example: if set to '-', then the locale for + | colombian spanish will be saved as 'es-CO' into the database. + | + */ + 'locale_separator' => '-', + + /* + |-------------------------------------------------------------------------- + | Default locale + |-------------------------------------------------------------------------- + | + | As a default locale, Translatable takes the locale of Laravel's + | translator. If for some reason you want to override this, + | you can specify what default should be used here. + | + */ + 'locale' => null, + + /* + |-------------------------------------------------------------------------- + | Use fallback + |-------------------------------------------------------------------------- + | + | Determine if fallback locales are returned by default or not. To add + | more flexibility and configure this option per "translatable" + | instance, this value will be overridden by the property + | $useTranslationFallback when defined + | + */ + 'use_fallback' => false, + + /* + |-------------------------------------------------------------------------- + | Use fallback per property + |-------------------------------------------------------------------------- + | + | The property fallback feature will return the translated value of + | the fallback locale if the property is empty for the selected + | locale. Note that 'use_fallback' must be enabled. + | + */ + 'use_property_fallback' => true, + + /* + |-------------------------------------------------------------------------- + | Fallback Locale + |-------------------------------------------------------------------------- + | + | A fallback locale is the locale being used to return a translation + | when the requested translation is not existing. To disable it + | set it to false. + | + */ + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Translation Suffix + |-------------------------------------------------------------------------- + | + | Defines the default 'Translation' class suffix. For example, if + | you want to use CountryTrans instead of CountryTranslation + | application, set this to 'Trans'. + | + */ + 'translation_suffix' => 'Translation', + + /* + |-------------------------------------------------------------------------- + | Locale key + |-------------------------------------------------------------------------- + | + | Defines the 'locale' field name, which is used by the + | translation model. + | + */ + 'locale_key' => 'locale', + + /* + |-------------------------------------------------------------------------- + | Always load translations when converting to array + |-------------------------------------------------------------------------- + | Setting this to false will have a performance improvement but will + | not return the translations when using toArray(), unless the + | translations relationship is already loaded. + | + */ + 'to_array_always_loads_translations' => true, +]; diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index c77e70581..ea7de5107 100644 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -32,7 +32,7 @@ Route::group(['middleware' => ['web']], function () { // Admin Routes - Route::group(['middleware' => ['admin']], function () { + Route::group(['middleware' => ['admin', 'locale']], function () { Route::get('/logout', 'Webkul\User\Http\Controllers\SessionController@destroy')->defaults('_config', [ 'redirect' => 'admin.session.create' ])->name('admin.session.destroy'); @@ -45,6 +45,28 @@ Route::group(['middleware' => ['web']], function () { // Catalog Routes Route::prefix('catalog')->group(function () { + // Catalog Category Routes + Route::get('/categories', 'Webkul\Category\Http\Controllers\CategoryController@index')->defaults('_config', [ + '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' + ])->name('admin.catalog.categories.create'); + + Route::post('/categories/create', 'Webkul\Category\Http\Controllers\CategoryController@store')->defaults('_config', [ + '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' + ])->name('admin.catalog.categories.edit'); + + Route::put('/categories/edit/{id}', 'Webkul\Category\Http\Controllers\CategoryController@update')->defaults('_config', [ + 'redirect' => 'admin.catalog.categories.index' + ])->name('admin.catalog.categories.update'); + + // Catalog Attribute Routes Route::get('/attributes', 'Webkul\Attribute\Http\Controllers\AttributeController@index')->defaults('_config', [ 'view' => 'admin::catalog.attributes.index' @@ -65,6 +87,7 @@ Route::group(['middleware' => ['web']], function () { Route::put('/attributes/edit/{id}', 'Webkul\Attribute\Http\Controllers\AttributeController@update')->defaults('_config', [ 'redirect' => 'admin.catalog.attributes.index' ])->name('admin.catalog.attributes.update'); + // Catalog Family Routes Route::get('/families', 'Webkul\Attribute\Http\Controllers\AttributeFamilyController@index')->defaults('_config', [ @@ -88,6 +111,7 @@ Route::group(['middleware' => ['web']], function () { ])->name('admin.catalog.families.update'); }); + // Datagrid Routes Route::get('/datagrid', 'Webkul\Admin\Http\Controllers\DataGridController@index')->name('admin.datagrid.index'); @@ -137,11 +161,11 @@ Route::group(['middleware' => ['web']], function () { // Locale Routes Route::get('/locales', 'Webkul\Core\Http\Controllers\LocaleController@index')->defaults('_config', [ - 'view' => 'admin::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::locales.create' + 'view' => 'admin::settings.locales.create' ])->name('admin.locales.create'); Route::post('/locales/create', 'Webkul\Core\Http\Controllers\LocaleController@store')->defaults('_config', [ @@ -149,6 +173,101 @@ Route::group(['middleware' => ['web']], function () { ])->name('admin.locales.store'); + // Country Routes + Route::get('/countries', 'Webkul\Core\Http\Controllers\CountryController@index')->defaults('_config', [ + 'view' => 'admin::settings.countries.index' + ])->name('admin.countries.index'); + + Route::get('/countries/create', 'Webkul\Core\Http\Controllers\CountryController@create')->defaults('_config', [ + 'view' => 'admin::settings.countries.create' + ])->name('admin.countries.create'); + + Route::post('/countries/create', 'Webkul\Core\Http\Controllers\CountryController@store')->defaults('_config', [ + 'redirect' => 'admin.countries.index' + ])->name('admin.countries.store'); + + + // Country Routes + Route::get('/currencies', 'Webkul\Core\Http\Controllers\CurrencyController@index')->defaults('_config', [ + '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' + ])->name('admin.currencies.create'); + + Route::post('/currencies/create', 'Webkul\Core\Http\Controllers\CurrencyController@store')->defaults('_config', [ + 'redirect' => 'admin.currencies.index' + ])->name('admin.currencies.store'); + + + // Country Routes + Route::get('/exchange_rates', 'Webkul\Core\Http\Controllers\ExchangeRateController@index')->defaults('_config', [ + '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' + ])->name('admin.exchange_rates.create'); + + Route::post('/exchange_rates/create', 'Webkul\Core\Http\Controllers\ExchangeRateController@store')->defaults('_config', [ + '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' + ])->name('admin.exchange_rates.edit'); + + Route::put('/exchange_rates/edit/{id}', 'Webkul\Core\Http\Controllers\ExchangeRateController@update')->defaults('_config', [ + 'redirect' => 'admin.exchange_rates.index' + ])->name('admin.exchange_rates.update'); + + + // Inventory Source Routes + Route::get('/inventory_sources', 'Webkul\Inventory\Http\Controllers\InventorySourceController@index')->defaults('_config', [ + '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' + ])->name('admin.inventory_sources.create'); + + Route::post('/inventory_sources/create', 'Webkul\Inventory\Http\Controllers\InventorySourceController@store')->defaults('_config', [ + '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' + ])->name('admin.inventory_sources.edit'); + + Route::put('/inventory_sources/edit/{id}', 'Webkul\Inventory\Http\Controllers\InventorySourceController@update')->defaults('_config', [ + 'redirect' => 'admin.inventory_sources.index' + ])->name('admin.inventory_sources.update'); + + + // Channel Routes + Route::get('/channels', 'Webkul\Channel\Http\Controllers\ChannelController@index')->defaults('_config', [ + 'view' => 'admin::settings.channels.index' + ])->name('admin.channels.index'); + + Route::get('/channels/create', 'Webkul\Channel\Http\Controllers\ChannelController@create')->defaults('_config', [ + 'view' => 'admin::settings.channels.create' + ])->name('admin.channels.create'); + + Route::post('/channels/create', 'Webkul\Channel\Http\Controllers\ChannelController@store')->defaults('_config', [ + 'redirect' => 'admin.channels.index' + ])->name('admin.channels.store'); + + Route::get('/channels/edit/{id}', 'Webkul\Channel\Http\Controllers\ChannelController@edit')->defaults('_config', [ + 'view' => 'admin::settings.channels.edit' + ])->name('admin.channels.edit'); + + Route::put('/channels/edit/{id}', 'Webkul\Channel\Http\Controllers\ChannelController@update')->defaults('_config', [ + 'redirect' => 'admin.channels.index' + ])->name('admin.channels.update'); + + + // Admin Profile route Route::get('/account', 'Webkul\User\Http\Controllers\AccountController@edit')->defaults('_config', [ 'view' => 'admin::account.edit' diff --git a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php index 5bb8184c3..b246d8bcb 100644 --- a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php +++ b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php @@ -39,7 +39,9 @@ class EventServiceProvider extends ServiceProvider Event::listen('admin.menu.build', function($menu) { $menu->add('dashboard', 'Dashboard', 'admin.dashboard.index', 1, 'dashboard-icon'); - $menu->add('catalog', 'Catalog', 'admin.catalog.attributes.index', 3, 'catalog-icon'); + $menu->add('catalog', 'Catalog', 'admin.catalog.categories.index', 3, 'catalog-icon'); + + $menu->add('catalog.categories', 'Categories', 'admin.catalog.categories.index', 2); $menu->add('catalog.attributes', 'Attributes', 'admin.catalog.attributes.index', 3); @@ -49,15 +51,25 @@ class EventServiceProvider extends ServiceProvider $menu->add('configuration.account', 'My Account', 'admin.account.edit', 1); - $menu->add('settings', 'Settings', 'admin.users.index', 6, 'settings-icon'); + $menu->add('settings', 'Settings', 'admin.countries.index', 6, 'settings-icon'); - $menu->add('settings.users', 'Users', 'admin.users.index', 1, ''); + $menu->add('settings.countries', 'Countries', 'admin.countries.index', 1, ''); + + $menu->add('settings.locales', 'Locales', 'admin.locales.index', 2, ''); + + $menu->add('settings.currencies', 'Currencies', 'admin.currencies.index', 3, ''); + + $menu->add('settings.exchange_rates', 'Exchange Rates', 'admin.exchange_rates.index', 4, ''); + + $menu->add('settings.inventory_sources', 'Inventory Sources', 'admin.inventory_sources.index', 5, ''); + + $menu->add('settings.channels', 'Channels', 'admin.channels.index', 5, ''); + + $menu->add('settings.users', 'Users', 'admin.users.index', 7, ''); $menu->add('settings.users.users', 'Users', 'admin.users.index', 1, ''); $menu->add('settings.users.roles', 'Roles', 'admin.roles.index', 2, ''); - - $menu->add('settings.locales', 'Locales', 'admin.locales.index', 2, ''); }); } diff --git a/packages/Webkul/Admin/src/Resources/assets/js/app.js b/packages/Webkul/Admin/src/Resources/assets/js/app.js index 6eb9a6f4a..125fed3ba 100644 --- a/packages/Webkul/Admin/src/Resources/assets/js/app.js +++ b/packages/Webkul/Admin/src/Resources/assets/js/app.js @@ -35,11 +35,16 @@ $(document).ready(function () { addServerErrors () { var scope = null; for (var key in serverErrors) { - const field = this.$validator.fields.find({ name: key, scope: scope }); + var inputName = key; + if(key.indexOf('.') !== -1) { + inputName = key.replace(".", "[") + ']'; + } + + const field = this.$validator.fields.find({ name: inputName, scope: scope }); if (field) { this.$validator.errors.add({ id: field.id, - field: key, + field: inputName, msg: serverErrors[key][0], scope: scope, }); diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/app.scss b/packages/Webkul/Admin/src/Resources/assets/sass/app.scss index bb204cf1f..ed0900d69 100644 --- a/packages/Webkul/Admin/src/Resources/assets/sass/app.scss +++ b/packages/Webkul/Admin/src/Resources/assets/sass/app.scss @@ -165,15 +165,35 @@ body { } .page-header { - display: block; + display: inline-block; + margin-bottom: 20px; + width: 100%; .page-title { float: left; + + h1 { + margin-bottom: 0; + vertical-align: middle; + display: inline-block; + } } .page-action { float: right; } + + .control-group { + width: 180px; + display: inline-block; + margin-bottom: 0; + margin-left: 20px; + } + + .control { + width: 100%; + margin: 0; + } } .page-content { diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 5b39316df..673a7e01a 100644 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -1,6 +1,67 @@ [ + 'header-title' => 'My Account', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'email' => 'Email', + 'password' => 'Password', + 'confirm-password' => 'Confirm Password' + ], + 'users' => [ + 'forget-password' => [ + 'title' => 'Forget Password', + 'header-title' => 'Recover Password', + 'email' => 'Registered Email', + 'password' => 'Password', + 'confirm-password' => 'Confirm Password', + 'back-link-title' => 'Back to Sign In', + 'submit-btn-title' => 'Email Password Reset Link' + ], + 'reset-password' => [ + 'title' => 'Reset Password', + 'title' => 'Reset Password', + 'email' => 'Registered Email', + 'back-link-title' => 'Back to Sign In', + 'submit-btn-title' => 'Reset Password' + ], + 'roles' => [ + 'add-role-title' => 'Add Role', + 'edit-role-title' => 'Edit Role', + 'save-btn-title' => 'Save Role', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'access-control' => 'Access Control', + 'permissions' => 'Permissions', + 'custom' => 'Custom', + 'all' => 'All' + ], + 'users' => [ + 'add-user-title' => 'Add User', + 'edit-user-title' => 'Edit User', + 'save-btn-title' => 'Save User', + 'general' => 'General', + 'email' => 'Email', + 'name' => 'Name', + 'password' => 'Password', + 'confirm-password' => 'Confirm Password', + 'status-and-role' => 'Status and Role', + 'role' => 'Role', + 'status' => 'Status', + 'account-is-active' => 'Account is Active' + ], + 'sessions' => [ + 'title' => 'Sign In', + 'email' => 'Email', + 'password' => 'Password', + 'forget-password-link-title' => 'Forget Password ?', + 'remember-me' => 'Remember Me', + 'submit-btn-title' => 'Sign In' + ] + ], 'catalog' => [ 'attributes' => [ 'add-title' => 'Add Attribute', @@ -43,6 +104,7 @@ return [ 'families' => 'Families', 'add-family-btn-title' => 'Add Family', 'add-title' => 'Add Family', + 'edit-title' => 'Edit Family', 'save-btn-title' => 'Save Family', 'general' => 'General', 'code' => 'Family Code', @@ -53,7 +115,106 @@ return [ 'attribute-code' => 'Code', 'type' => 'Type', 'add-attribute-title' => 'Add Attribute', - 'search' => 'Search' + 'search' => 'Search', + 'group-exist-error' => 'Group with same name already exists.' + ], + 'categories' => [ + 'categories' => 'Categories', + 'add-title' => 'Add Category', + 'edit-title' => 'Edit Category', + 'save-btn-title' => 'Save Category', + 'general' => 'General', + 'name' => 'Name', + 'visible-in-menu' => 'Visible In Menu', + 'yes' => 'Yes', + 'no' => 'No', + 'position' => 'Position', + 'description-and-images' => 'Description and Images', + 'description' => 'Description', + 'parent-category' => 'Parent Category', + 'seo' => 'Search Engine Optimization', + 'slug' => 'Slug', + 'meta_title' => 'Meta Title', + 'meta_description' => 'Meta Description', + 'meta_keywords' => 'Meta Keywords', + ] + ], + 'settings' => [ + 'locales' => [ + 'add-locale-title' => 'Add Locale', + 'edit-locale-title' => 'Edit Locale', + 'add-title' => 'Add Locale', + 'save-btn-title' => 'Save Locale', + 'general' => 'General', + 'code' => 'Code', + 'name' => 'Name' + ], + 'countries' => [ + 'add-title' => 'Add Counrty', + 'save-btn-title' => 'Save Counrty', + 'general' => 'General', + 'code' => 'Code', + 'name' => 'Name' + ], + 'currencies' => [ + 'add-title' => 'Add Currency', + 'edit-title' => 'Edit Currency', + 'save-btn-title' => 'Save Currency', + 'general' => 'General', + 'code' => 'Code', + 'name' => 'Name', + 'symbol' => 'Symbol' + ], + 'exchange_rates' => [ + 'title' => 'Exchange Rates', + 'add-title' => 'Add Exchange Rate', + 'edit-title' => 'Edit Exchange Rate', + 'save-btn-title' => 'Save Exchange Rate', + 'general' => 'General', + 'source_currency' => 'Source Currency', + 'target_currency' => 'Target Currency', + 'ratio' => 'Ratio' + ], + 'inventory_sources' => [ + 'title' => 'Inventory Sources', + 'add-title' => 'Add Inventory Source', + 'edit-title' => 'Edit Inventory Source', + 'save-btn-title' => 'Save Inventory Source', + 'general' => 'General', + 'code' => 'Code', + 'name' => 'Name', + 'description' => 'Description', + 'source-is-active' => 'Source is Active', + 'contact-info' => 'Contact Information', + 'contact_name' => 'Name', + 'contact_email' => 'Email', + 'contact_number' => 'Contact Number', + 'contact_fax' => 'Fax', + 'address' => 'Source Address', + 'country' => 'Country', + 'state' => 'State', + 'city' => 'City', + 'street' => 'Street', + 'postcode' => 'Postcode', + 'priority' => 'Priority', + 'latitude' => 'Latitude', + 'longitude' => 'Longitude', + 'status' => 'Status' + ], + 'channels' => [ + 'title' => 'Channels', + 'add-title' => 'Add Channel', + 'edit-title' => 'Edit Channel', + 'save-btn-title' => 'Save Channel', + 'general' => 'General', + 'code' => 'Code', + 'name' => 'Name', + 'description' => 'Description', + 'currencies-and-locales' => 'Currencies and Locales', + 'locales' => 'Locales', + 'default-locale' => 'Default Locale', + 'currencies' => 'Currencies', + 'base-currency' => 'Base Currency' ] ] ]; \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/account/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/account/edit.blade.php index a312bc83f..75f44f617 100644 --- a/packages/Webkul/Admin/src/Resources/views/account/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/account/edit.blade.php @@ -6,13 +6,13 @@ @@ -24,32 +24,32 @@ - +
- + @{{ errors.first('name') }}
- + @{{ errors.first('email') }}
- +
- + @{{ errors.first('password') }}
- + @{{ errors.first('password_confirmation') }}
diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php index b1daa6f5f..a633178ee 100644 --- a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php @@ -34,7 +34,7 @@
- + @{{ errors.first('admin_name') }}
@@ -196,7 +196,7 @@
- + @{{ errors.first(sortOrderName(row)) }}
diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/edit.blade.php index 225f77d76..6516a4474 100644 --- a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/edit.blade.php @@ -29,7 +29,7 @@
- + @{{ errors.first('code') }} @@ -70,7 +70,7 @@
- + @{{ errors.first('admin_name') }}
@@ -79,7 +79,7 @@
- +
@endforeach @@ -243,7 +243,7 @@
- + @{{ errors.first(sortOrderName(row)) }}
@@ -282,7 +282,7 @@ var row = {'id': '{{ $option->id }}', 'sort_order': '{{ $option->sort_order }}'}; @foreach(Webkul\Core\Models\Locale::all() as $locale) - row['{{ $locale->code }}'] = '{{ $option->translate($locale->code)->label }}'; + row['{{ $locale->code }}'] = "{{ $option->translate($locale->code)['label'] }}"; @endforeach this.optionRows.push(row); diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php new file mode 100644 index 000000000..23e26b8d9 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/catalog/categories/create.blade.php @@ -0,0 +1,116 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.catalog.categories.add-title') }} +@stop + +@section('content') +
+ +
+ + + +
+
+ @csrf() + + + +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('status') }} +
+ +
+ + + @{{ errors.first('position') }} +
+ +
+
+ + +
+ +
+ + + @{{ errors.first('description') }} +
+ +
+
+ + +
+ + + +
+
+ + +
+ +
+ + +
+ +
+ + + @{{ errors.first('slug') }} +
+ +
+ + +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+@stop + +@section('javascript') + +@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/categories/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/categories/edit.blade.php new file mode 100644 index 000000000..c2702c1a8 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/catalog/categories/edit.blade.php @@ -0,0 +1,131 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.catalog.categories.edit-title') }} +@stop + +@section('content') +
+ get('channel_locale') ?: channel()->getDefaultChannelLocale()->id; ?> + +
+ + + +
+
+ @csrf() + + + +
+ +
+ + + @{{ errors.first('{!!$locale!!}[name]') }} +
+ +
+ + + @{{ errors.first('status') }} +
+ +
+ + + @{{ errors.first('position') }} +
+ +
+
+ + +
+ +
+ + + @{{ errors.first('{!!$locale!!}[description]') }} +
+ +
+
+ + +
+ + + +
+
+ + +
+ +
+ + +
+ +
+ + + @{{ errors.first('{!!$locale!!}[slug]') }} +
+ +
+ + +
+ +
+ + +
+ +
+
+ +
+
+ +
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/categories/index.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/categories/index.blade.php new file mode 100644 index 000000000..54347e88e --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/catalog/categories/index.blade.php @@ -0,0 +1,21 @@ +@extends('admin::layouts.content') + +@section('content') +
+ + +
+ +
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/families/create.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/families/create.blade.php index e288dd3ce..d75c2dc37 100644 --- a/packages/Webkul/Admin/src/Resources/views/catalog/families/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/families/create.blade.php @@ -29,13 +29,13 @@
- + @{{ errors.first('code') }}
- + @{{ errors.first('name') }}
@@ -78,14 +78,14 @@ @csrf()
- + @{{ errors.first('add-group-form.groupName') }}
- + @{{ errors.first('add-group-form.position') }}
@@ -101,7 +101,7 @@ @@ -114,6 +114,9 @@
+ + +
@@ -127,8 +130,11 @@ - - + +
@{{ attribute.code }}@{{ attribute.name }} + + @{{ attribute.code }} + @{{ attribute.admin_name }} @{{ attribute.type }} @@ -188,13 +194,32 @@ addGroup (formScope) { this.$validator.validateAll(formScope).then((result) => { if (result) { - groups.push(this.group); + var this_this = this; - groups = this.sortGroups(); - - this.group = {'groupName': '', 'position': '', 'attributes': []}; + var filteredGroups = groups.filter(function(group) { + return this_this.group.groupName.trim() === group.groupName.trim() + }) - this.$parent.closeModal(); + if(filteredGroups.length) { + const field = this.$validator.fields.find({ name: 'groupName', scope: 'add-group-form' }); + + if (field) { + this.$validator.errors.add({ + id: field.id, + field: 'groupName', + msg: "{{ __('admin::app.catalog.families.group-exist-error') }}", + scope: 'add-group-form', + }); + } + } else { + groups.push(this.group); + + groups = this.sortGroups(); + + this.group = {'groupName': '', 'position': '', 'attributes': []}; + + this.$parent.closeModal(); + } } }); }, @@ -218,35 +243,66 @@ methods: { removeGroup (group) { + group.attributes.forEach(function(attribute) { + this.attributes.push(attribute); + }) + + this.attributes = this.sortAttributes(); + let index = groups.indexOf(group) groups.splice(index, 1) }, addAttributes (groupIndex, attributeIds) { - var this_this = this; attributeIds.forEach(function(attributeId) { - var attribute = this_this.attributes.filter(attribute => attribute.id == attributeId) + var attribute = this.attributes.filter(attribute => attribute.id == attributeId) + + this.groups[groupIndex].attributes.push(attribute[0]); - this_this.groups[groupIndex].attributes.push(attribute[0]); + let index = this.attributes.indexOf(attribute[0]) - let index = this_this.attributes.indexOf(attribute) - - this_this.attributes.splice(index, 1) + this.attributes.splice(index, 1) }) }, removeAttribute (groupIndex, attribute) { - + let index = this.groups[groupIndex].attributes.indexOf(attribute) + + this.groups[groupIndex].attributes.splice(index, 1) + + this.attributes.push(attribute); + + this.attributes = this.sortAttributes(); + }, + + sortAttributes () { + return this.attributes.sort(function(a, b) { + return a.id - b.id; + }); } } }) Vue.component('group-item', { - props: ['group', 'attributes'], + props: ['index', 'group', 'attributes'], template: "#group-item-template", + computed: { + groupInputName () { + return "attribute_groups[group_" + this.index + "][name]"; + }, + + groupInputPosition () { + return "attribute_groups[group_" + this.index + "][position]"; + }, + + groupAttributeInput () { + return "attribute_groups[group_" + this.index + "][attributes][]"; + } + }, + methods: { removeGroup () { this.$emit('onRemoveGroup', this.group) @@ -257,6 +313,7 @@ $(e.target).prev().find('li input').each(function() { var attributeId = $(this).val(); + if($(this).is(':checked')) { attributeIds.push(attributeId); @@ -270,7 +327,7 @@ }, removeAttribute (attribute) { - this.$emit('onAttributeRemove', attributeIds) + this.$emit('onAttributeRemove', attribute) } } }); diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/families/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/families/edit.blade.php new file mode 100644 index 000000000..2c8ae840f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/catalog/families/edit.blade.php @@ -0,0 +1,361 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.catalog.families.edit-title') }} +@stop + +@section('content') +
+
+ + + +
+ +
+ @csrf() + + + +
+ +
+ + + @{{ errors.first('code') }} +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+
+ + +
+ + + + +
+
+
+
+ +
+
+ + +

{{ __('admin::app.catalog.families.add-group-title') }}

+ +
+ +
+
+@stop + +@section('javascript') + + + + + + + + +@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/channels/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/channels/create.blade.php new file mode 100644 index 000000000..27020ecdc --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/channels/create.blade.php @@ -0,0 +1,109 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.channels.add-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + +
+ +
+ + + @{{ errors.first('code') }} +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('description') }} +
+ +
+
+ + +
+ +
+ + + @{{ errors.first('locales[]') }} +
+ +
+ + + @{{ errors.first('default_locale') }} +
+ +
+ + + @{{ errors.first('currencies[]') }} +
+ +
+ + + @{{ errors.first('base_currency') }} +
+ +
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/channels/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/channels/index.blade.php new file mode 100644 index 000000000..e07483858 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/channels/index.blade.php @@ -0,0 +1,21 @@ +@extends('admin::layouts.content') + +@section('content') + +@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/countries/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/countries/create.blade.php new file mode 100644 index 000000000..c9fc0483e --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/countries/create.blade.php @@ -0,0 +1,43 @@ +@extends('admin::layouts.content') + +@section('content') +
+ +
+ + +
+
+ @csrf() + + +
+
+ + + @{{ errors.first('code') }} +
+ +
+ + + @{{ errors.first('name') }} +
+
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/countries/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/countries/index.blade.php new file mode 100644 index 000000000..db2b18659 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/countries/index.blade.php @@ -0,0 +1,21 @@ +@extends('admin::layouts.content') + +@section('content') + +@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/currencies/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/currencies/create.blade.php new file mode 100644 index 000000000..6945ef0e1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/currencies/create.blade.php @@ -0,0 +1,49 @@ +@extends('admin::layouts.content') + +@section('content') +
+ +
+ + +
+
+ @csrf() + + +
+
+ + + @{{ errors.first('code') }} +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('symbol') }} +
+
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/currencies/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/currencies/edit.blade.php new file mode 100644 index 000000000..327009bfc --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/currencies/edit.blade.php @@ -0,0 +1,50 @@ +@extends('admin::layouts.content') + +@section('content') +
+ +
+ + +
+
+ @csrf() + + + +
+
+ + + @{{ errors.first('code') }} +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('symbol') }} +
+
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/currencies/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/currencies/index.blade.php new file mode 100644 index 000000000..78af5b483 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/currencies/index.blade.php @@ -0,0 +1,21 @@ +@extends('admin::layouts.content') + +@section('content') + +@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/create.blade.php new file mode 100644 index 000000000..06b3e7185 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/create.blade.php @@ -0,0 +1,61 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.exchange_rates.add-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + +
+
+ + + @{{ errors.first('source_currency') }} +
+ +
+ + + @{{ errors.first('target_currency') }} +
+ +
+ + + @{{ errors.first('ratio') }} +
+
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/edit.blade.php new file mode 100644 index 000000000..bef0243e8 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/edit.blade.php @@ -0,0 +1,66 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.exchange_rates.edit-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + + +
+
+ + + @{{ errors.first('source_currency') }} +
+ +
+ + + @{{ errors.first('target_currency') }} +
+ +
+ + + @{{ errors.first('ratio') }} +
+
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/index.blade.php new file mode 100644 index 000000000..42f738f56 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/exchange_rates/index.blade.php @@ -0,0 +1,25 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.exchange_rates.title') }} +@stop + +@section('content') + +@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/create.blade.php new file mode 100644 index 000000000..395c90e95 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/create.blade.php @@ -0,0 +1,141 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.inventory_sources.add-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + +
+ +
+ + + @{{ errors.first('code') }} +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + {{ __('admin::app.settings.inventory_sources.source-is-active') }} + +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/edit.blade.php new file mode 100644 index 000000000..cf156c46c --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/edit.blade.php @@ -0,0 +1,143 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.inventory_sources.edit-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + + +
+ +
+ + + @{{ errors.first('code') }} +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + status ? 'checked' : '' }}> + + {{ __('admin::app.settings.inventory_sources.source-is-active') }} + +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+ +
+ country ?> + + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/index.blade.php new file mode 100644 index 000000000..861ff89ee --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/inventory_sources/index.blade.php @@ -0,0 +1,25 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.inventory_sources.title') }} +@stop + +@section('content') + +@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/locales/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/locales/create.blade.php similarity index 72% rename from packages/Webkul/Admin/src/Resources/views/locales/create.blade.php rename to packages/Webkul/Admin/src/Resources/views/settings/locales/create.blade.php index 777ed9913..13624feee 100644 --- a/packages/Webkul/Admin/src/Resources/views/locales/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/settings/locales/create.blade.php @@ -1,17 +1,21 @@ @extends('admin::layouts.content') +@section('page_title') + {{ __('admin::app.settings.locales.add-locale-title') }} +@stop + @section('content')
@@ -20,16 +24,16 @@
@csrf() - +
- + @{{ errors.first('code') }}
- + @{{ errors.first('name') }}
diff --git a/packages/Webkul/Admin/src/Resources/views/locales/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/locales/index.blade.php similarity index 85% rename from packages/Webkul/Admin/src/Resources/views/locales/index.blade.php rename to packages/Webkul/Admin/src/Resources/views/settings/locales/index.blade.php index f64f7016b..80addfaa3 100644 --- a/packages/Webkul/Admin/src/Resources/views/locales/index.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/settings/locales/index.blade.php @@ -9,7 +9,7 @@
diff --git a/packages/Webkul/Admin/src/Resources/views/users/forget-password/create.blade.php b/packages/Webkul/Admin/src/Resources/views/users/forget-password/create.blade.php index 0a71424e4..127a40a79 100644 --- a/packages/Webkul/Admin/src/Resources/views/users/forget-password/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/users/forget-password/create.blade.php @@ -1,7 +1,7 @@ @extends('admin::layouts.anonymous-master') @section('page_title') - {{ __('Forget Password') }} + {{ __('admin::app.users.forget-password.title') }} @stop @section('css') @@ -23,25 +23,25 @@
-

{{ __('Recover Password') }}

+

{{ __('admin::app.users.forget-password.header-title') }}

@csrf
- + @{{ errors.first('email') }}
- +
diff --git a/packages/Webkul/Admin/src/Resources/views/users/reset-password/create.blade.php b/packages/Webkul/Admin/src/Resources/views/users/reset-password/create.blade.php index 2103ff14b..f2ec8daa6 100644 --- a/packages/Webkul/Admin/src/Resources/views/users/reset-password/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/users/reset-password/create.blade.php @@ -1,7 +1,7 @@ @extends('admin::layouts.anonymous-master') @section('page_title') - {{ __('Reset Password') }} + {{ __('admin::app.users.reset-password.title') }} @stop @section('css') @@ -23,7 +23,7 @@
-

{{ __('Reset Password') }}

+

{{ __('admin::app.users.reset-password.title') }}

@csrf @@ -31,31 +31,31 @@
- + @{{ errors.first('email') }}
- + @{{ errors.first('password') }}
- + @{{ errors.first('password_confirmation') }}
- +
diff --git a/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php b/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php index 93cffbb09..b13b67d16 100644 --- a/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php @@ -1,17 +1,21 @@ @extends('admin::layouts.content') +@section('page_title') + {{ __('admin::app.users.roles.add-role-title') }} +@stop + @section('content')
@@ -20,28 +24,28 @@
@csrf() - +
- + @{{ errors.first('name') }}
- +
- +
- +
diff --git a/packages/Webkul/Admin/src/Resources/views/users/roles/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/users/roles/edit.blade.php index 61332c646..4cba98c94 100644 --- a/packages/Webkul/Admin/src/Resources/views/users/roles/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/users/roles/edit.blade.php @@ -1,17 +1,21 @@ @extends('admin::layouts.content') +@section('page_title') + {{ __('admin::app.users.roles.edit-role-title') }} +@stop + @section('content')
@@ -22,28 +26,28 @@ - +
- + @{{ errors.first('name') }}
- +
- +
- +
diff --git a/packages/Webkul/Admin/src/Resources/views/users/sessions/create.blade.php b/packages/Webkul/Admin/src/Resources/views/users/sessions/create.blade.php index ba227c8a9..1e74d8019 100644 --- a/packages/Webkul/Admin/src/Resources/views/users/sessions/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/users/sessions/create.blade.php @@ -1,7 +1,7 @@ @extends('admin::layouts.anonymous-master') @section('page_title') - {{ __('Sign In') }} + {{ __('admin::app.users.sessions.title') }} @stop @section('content') @@ -12,37 +12,37 @@
-

{{ __('Sign In') }}

+

{{ __('admin::app.users.sessions.title') }}

@csrf
- + @{{ errors.first('email') }}
- + @{{ errors.first('password') }}
- {{ __('Remember me') }} + {{ __('admin::app.users.sessions.remember-me') }}
- +
diff --git a/packages/Webkul/Admin/src/Resources/views/users/users/create.blade.php b/packages/Webkul/Admin/src/Resources/views/users/users/create.blade.php index 5188a52a0..146ee6cbb 100644 --- a/packages/Webkul/Admin/src/Resources/views/users/users/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/users/users/create.blade.php @@ -1,16 +1,20 @@ @extends('admin::layouts.content') +@section('page_title') + {{ __('admin::app.users.users.add-user-title') }} +@stop + @section('content')
@@ -19,16 +23,16 @@
@csrf() - +
- + @{{ errors.first('name') }}
- + @{{ errors.first('email') }}
@@ -38,23 +42,23 @@
- + @{{ errors.first('password') }}
- + @{{ errors.first('password_confirmation') }}
- +
- + - {{ __('Account is Active') }} + {{ __('admin::app.users.users.account-is-active') }}
diff --git a/packages/Webkul/Admin/src/Resources/views/users/users/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/users/users/edit.blade.php index d0bce9ff1..1f087608a 100644 --- a/packages/Webkul/Admin/src/Resources/views/users/users/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/users/users/edit.blade.php @@ -1,16 +1,21 @@ @extends('admin::layouts.content') +@section('page_title') + {{ __('admin::app.users.users.edit-user-title') }} +@stop + + @section('content')
@@ -20,42 +25,42 @@ @csrf() - +
- + @{{ errors.first('name') }}
- + @{{ errors.first('email') }}
- +
- + @{{ errors.first('password') }}
- + @{{ errors.first('password_confirmation') }}
- +
- + status ? 'checked' : '' }}> - {{ __('Account is Active') }} + {{ __('admin::app.users.users.account-is-active') }}
diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135200_create_attribute_families_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135200_create_attribute_families_table.php index 13c0e6c25..418ac54be 100644 --- a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135200_create_attribute_families_table.php +++ b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135200_create_attribute_families_table.php @@ -15,6 +15,7 @@ class CreateAttributeFamiliesTable extends Migration { Schema::create('attribute_families', function (Blueprint $table) { $table->increments('id'); + $table->string('code'); $table->string('name'); $table->boolean('status')->default(0); }); diff --git a/packages/Webkul/Attribute/src/Http/Controllers/AttributeFamilyController.php b/packages/Webkul/Attribute/src/Http/Controllers/AttributeFamilyController.php index a30441dd4..1d1f6f335 100644 --- a/packages/Webkul/Attribute/src/Http/Controllers/AttributeFamilyController.php +++ b/packages/Webkul/Attribute/src/Http/Controllers/AttributeFamilyController.php @@ -74,7 +74,7 @@ class AttributeFamilyController extends Controller public function store() { $this->validate(request(), [ - 'code' => ['required', 'unique:families,code', new \Webkul\Core\Contracts\Validations\Slug], + 'code' => ['required', 'unique:attribute_families,code', new \Webkul\Core\Contracts\Validations\Slug], 'name' => 'required' ]); @@ -94,11 +94,11 @@ class AttributeFamilyController extends Controller */ public function edit(Attribute $attribute, $id) { - $attributeFamily = $this->attributeFamily->findOrFail($id); + $attributeFamily = $this->attributeFamily->findOrFail($id, ['*'], ['attribute_groups.attributes']); $attributes = $attribute->all(['id', 'code', 'admin_name', 'type']); - return view($this->_config['view'], compact('attributes', 'family')); + return view($this->_config['view'], compact('attributeFamily', 'attributes')); } /** @@ -111,10 +111,11 @@ class AttributeFamilyController extends Controller public function update(Request $request, $id) { $this->validate(request(), [ - 'code' => ['required', 'unique:families,code,' . $id, new \Webkul\Core\Contracts\Validations\Slug], + 'code' => ['required', 'unique:attribute_families,code,' . $id, new \Webkul\Core\Contracts\Validations\Slug], 'name' => 'required' ]); + $this->attributeFamily->update(request()->all(), $id); session()->flash('success', 'Family updated successfully.'); diff --git a/packages/Webkul/Attribute/src/Models/Attribute.php b/packages/Webkul/Attribute/src/Models/Attribute.php index 8002bfd13..15ceb48fa 100644 --- a/packages/Webkul/Attribute/src/Models/Attribute.php +++ b/packages/Webkul/Attribute/src/Models/Attribute.php @@ -2,14 +2,11 @@ namespace Webkul\Attribute\Models; -use Illuminate\Database\Eloquent\Model; -use Dimsav\Translatable\Translatable; +use Webkul\Core\Eloquent\TranslatableModel; use Webkul\Attribute\Models\AttributeOption; -class Attribute extends Model +class Attribute extends TranslatableModel { - use Translatable; - public $translatedAttributes = ['name']; protected $fillable = ['code', 'admin_name', 'type', 'is_required', 'is_unique', 'value_per_locale', 'value_per_channel', 'is_filterable', 'is_configurable']; diff --git a/packages/Webkul/Attribute/src/Models/AttributeFamily.php b/packages/Webkul/Attribute/src/Models/AttributeFamily.php index bdaa72fb8..4ed03aee8 100644 --- a/packages/Webkul/Attribute/src/Models/AttributeFamily.php +++ b/packages/Webkul/Attribute/src/Models/AttributeFamily.php @@ -8,6 +8,10 @@ use Webkul\Attribute\Models\AttributeGroup; class AttributeFamily extends Model { + public $timestamps = false; + + protected $fillable = ['code', 'name']; + /** * Get all of the attributes for the attribute groups. */ @@ -15,4 +19,12 @@ class AttributeFamily extends Model { return $this->hasManyThrough(Attribute::class, AttributeGroup::class); } + + /** + * Get all of the attribute groups. + */ + public function attribute_groups() + { + return $this->hasMany(AttributeGroup::class); + } } \ No newline at end of file diff --git a/packages/Webkul/Attribute/src/Models/AttributeGroup.php b/packages/Webkul/Attribute/src/Models/AttributeGroup.php index 0f25ff381..ab3ac085e 100644 --- a/packages/Webkul/Attribute/src/Models/AttributeGroup.php +++ b/packages/Webkul/Attribute/src/Models/AttributeGroup.php @@ -7,6 +7,10 @@ use Webkul\Attribute\Models\Attribute; class AttributeGroup extends Model { + public $timestamps = false; + + protected $fillable = ['name', 'position']; + /** * Get the attributes that owns the attribute group. */ diff --git a/packages/Webkul/Attribute/src/Models/AttributeOption.php b/packages/Webkul/Attribute/src/Models/AttributeOption.php index 513919450..f2683d76e 100644 --- a/packages/Webkul/Attribute/src/Models/AttributeOption.php +++ b/packages/Webkul/Attribute/src/Models/AttributeOption.php @@ -2,16 +2,14 @@ namespace Webkul\Attribute\Models; -use Illuminate\Database\Eloquent\Model; +use Webkul\Core\Eloquent\TranslatableModel; use Dimsav\Translatable\Translatable; use Webkul\Attribute\Models\Attribute; -class AttributeOption extends Model +class AttributeOption extends TranslatableModel { public $timestamps = false; - use Translatable; - public $translatedAttributes = ['label']; protected $fillable = ['sort_order']; diff --git a/packages/Webkul/Attribute/src/Repositories/AttributeFamilyRepository.php b/packages/Webkul/Attribute/src/Repositories/AttributeFamilyRepository.php index 219f5bd59..0e65a8027 100644 --- a/packages/Webkul/Attribute/src/Repositories/AttributeFamilyRepository.php +++ b/packages/Webkul/Attribute/src/Repositories/AttributeFamilyRepository.php @@ -52,7 +52,19 @@ class AttributeFamilyRepository extends Repository { $family = $this->model->create($data); - return $attribute; + if(isset($data['attribute_groups'])) { + foreach ($data['attribute_groups'] as $group) { + $attributeGroup = $family->attribute_groups()->create($group); + + if(isset($group['attributes'])) { + foreach ($group['attributes'] as $attributeId) { + $attributeGroup->attributes()->attach($attributeId); + } + } + } + } + + return $family; } /** @@ -67,6 +79,45 @@ class AttributeFamilyRepository extends Repository $family->update($data); + $previousAttributeGroupIds = $family->attribute_groups()->pluck('id'); + + if(isset($data['attribute_groups'])) { + foreach ($data['attribute_groups'] as $attributeGroupId => $attributeGroupInputs) { + if (str_contains($attributeGroupId, 'group_')) { + $attributeGroup = $family->attribute_groups()->create($attributeGroupInputs); + + if(isset($attributeGroupInputs['attributes'])) { + foreach ($attributeGroupInputs['attributes'] as $attributeId) { + $attributeGroup->attributes()->attach($attributeId); + } + } + } else { + if(($index = $previousAttributeGroupIds->search($attributeGroupId)) >= 0) { + $previousAttributeGroupIds->forget($index); + } + + $attributeGroup = $this->attributeGroup->findOrFail($attributeGroupId); + $attributeGroup->update($attributeGroupInputs); + + $attributeIds = $attributeGroup->attributes()->pluck('id'); + + foreach ($attributeGroupInputs['attributes'] as $attributeId) { + if(($index = $attributeIds->search($attributeId)) >= 0) { + $attributeIds->forget($index); + } + } + + foreach ($attributeIds as $attributeId) { + $attributeGroup->deattach($attributeId); + } + } + } + } + + foreach ($previousAttributeGroupIds as $attributeGroupId) { + $this->attributeGroup->delete($attributeGroupId); + } + return $family; } } \ No newline at end of file diff --git a/packages/Webkul/Category/composer.json b/packages/Webkul/Category/composer.json index 9f9bab1ce..d908fa123 100644 --- a/packages/Webkul/Category/composer.json +++ b/packages/Webkul/Category/composer.json @@ -7,16 +7,18 @@ "email": "jitendra@webkul.com" } ], - "require": {}, + "require": { + "baum/baum": "~1.1" + }, "autoload": { "psr-4": { - "Webkul\\Attribute\\": "src/" + "Webkul\\Category\\": "src/" } }, "extra": { "laravel": { "providers": [ - "Webkul\\Attribute\\Providers\\AttributeServiceProvider" + "Webkul\\Category\\Providers\\CategoryServiceProvider" ], "aliases": { } } diff --git a/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142820_create_categories_table.php b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142820_create_categories_table.php index 7d4f5e200..d1bfafbe0 100644 --- a/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142820_create_categories_table.php +++ b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142820_create_categories_table.php @@ -3,6 +3,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; +use Kalnoy\Nestedset\NestedSet; class CreateCategoriesTable extends Migration { @@ -15,10 +16,10 @@ class CreateCategoriesTable extends Migration { Schema::create('categories', function (Blueprint $table) { $table->increments('id'); - $table->string('code')->unique(); - $table->integer('position'); - $table->integer('parent_id')->unsigned()->nullable(); - $table->foreign('parent_id')->references('id')->on('categories')->onDelete('cascade'); + $table->integer('position')->default(0); + $table->string('image')->nullable(); + $table->boolean('status')->default(0); + NestedSet::columns($table); $table->timestamps(); }); } diff --git a/packages/Webkul/Category/src/Database/Migrations/2018_07_21_142836_create_category_translations_table.php b/packages/Webkul/Category/src/Database/Migrations/2018_07_21_142836_create_category_translations_table.php new file mode 100644 index 000000000..87b5b418d --- /dev/null +++ b/packages/Webkul/Category/src/Database/Migrations/2018_07_21_142836_create_category_translations_table.php @@ -0,0 +1,42 @@ +increments('id'); + $table->text('name'); + $table->string('slug'); + $table->text('description')->nullable(); + $table->text('meta_title')->nullable(); + $table->text('meta_description')->nullable(); + $table->text('meta_keywords')->nullable(); + $table->integer('category_id')->unsigned(); + $table->integer('locale_id')->unsigned(); + $table->unique(['category_id', 'locale_id']); + $table->unique(['category_id', 'slug', 'locale_id']); + $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); + $table->foreign('locale_id')->references('id')->on('channel_locales')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('category_translations'); + } +} \ No newline at end of file diff --git a/packages/Webkul/Category/src/Http/Controllers/CategoryController.php b/packages/Webkul/Category/src/Http/Controllers/CategoryController.php new file mode 100644 index 000000000..7b14af101 --- /dev/null +++ b/packages/Webkul/Category/src/Http/Controllers/CategoryController.php @@ -0,0 +1,137 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class CategoryController extends Controller +{ + /** + * Contains route related configuration + * + * @var array + */ + protected $_config; + + /** + * CategoryRepository object + * + * @var array + */ + protected $category; + + /** + * Create a new controller instance. + * + * @param Webkul\Category\Repositories\CategoryRepository $category + * @return void + */ + public function __construct(Category $category) + { + $this->category = $category; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $categories = $this->category->getCategoryTree(); + + return view($this->_config['view'], compact('categories')); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'slug' => ['required', 'unique:category_translations,slug', new \Webkul\Core\Contracts\Validations\Slug], + 'name' => 'required' + ]); + + $this->category->create(request()->all()); + + session()->flash('success', 'Category created successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $categories = $this->category->getCategoryTree($id); + + $category = $this->category->findOrFail($id); + + return view($this->_config['view'], compact('category', 'categories')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $locale = request()->get('channel_locale') ?: channel()->getDefaultChannelLocale()->id; + $this->validate(request(), [ + $locale . '.slug' => ['required', new \Webkul\Core\Contracts\Validations\Slug, function ($attribute, $value, $fail) use ($id) { + if (!$this->category->isSlugUnique($id, $value)) { + $fail('The :attribute has already been taken.'); + } + }], + $locale . '.name' => 'required', + ]); + + $this->category->update(request()->all(), $id); + + session()->flash('success', 'Category updated successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} \ No newline at end of file diff --git a/packages/Webkul/Category/src/Http/Controllers/Controller.php b/packages/Webkul/Category/src/Http/Controllers/Controller.php new file mode 100644 index 000000000..3b01976a2 --- /dev/null +++ b/packages/Webkul/Category/src/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class CategoryRepository extends Repository +{ + + /** + * ChannelLocaleRepository object + * + * @var array + */ + protected $locale; + + /** + * Create a new controller instance. + * + * @param Webkul\Core\Repositories\ChannelLocaleRepository $locale + * @return void + */ + public function __construct(ChannelLocaleRepository $locale, App $app) + { + $this->locale = $locale; + + parent::__construct($app); + } + + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Category\Models\Category'; + } + + /** + * @param array $data + * @return mixed + */ + public function create(array $data) + { + if(isset($data['locale']) && $data['locale'] == 'all') { + $model = app()->make($this->model()); + + foreach($this->locale->all() as $locale) { + foreach ($model->translatedAttributes as $attribute) { + if(isset($data[$attribute])) { + $data[$locale->id][$attribute] = $data[$attribute]; + } + } + } + } + + return $this->model->create($data); + } + + /** + * Specify category tree + * + * @return mixed + */ + public function getCategoryTree($id = null) { + return $id + ? Category::orderBy('position', 'ASC')->where('id', '!=', $id)->get()->toTree() + : Category::orderBy('position', 'ASC')->get()->toTree(); + } + + /** + * Checks slug is unique or not based on locale + * + * @return boolean + */ + public function isSlugUnique($id, $slug) { + return CategoryTranslation::where('category_id', '!=', $id)->where('slug', '=', $slug)->first() ? false : true; + } +} \ No newline at end of file diff --git a/packages/Webkul/Channel/.gitignore b/packages/Webkul/Channel/.gitignore new file mode 100644 index 000000000..30bc16279 --- /dev/null +++ b/packages/Webkul/Channel/.gitignore @@ -0,0 +1 @@ +/node_modules \ No newline at end of file diff --git a/packages/Webkul/Channel/composer.json b/packages/Webkul/Channel/composer.json new file mode 100644 index 000000000..a3dce6314 --- /dev/null +++ b/packages/Webkul/Channel/composer.json @@ -0,0 +1,27 @@ +{ + "name": "webkul/laravel-channel", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + "baum/baum": "~1.1" + }, + "autoload": { + "psr-4": { + "Webkul\\Channel\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\Channel\\Providers\\ChannelServiceProvider" + ], + "aliases": { } + } + }, + "minimum-stability": "dev" +} diff --git a/packages/Webkul/Channel/src/Channel.php b/packages/Webkul/Channel/src/Channel.php new file mode 100644 index 000000000..46279b92d --- /dev/null +++ b/packages/Webkul/Channel/src/Channel.php @@ -0,0 +1,14 @@ +channel_locales()->first(); + } +} \ No newline at end of file diff --git a/packages/Webkul/Channel/src/Database/Migrations/2018_07_20_064849_create_channels_table.php b/packages/Webkul/Channel/src/Database/Migrations/2018_07_20_064849_create_channels_table.php new file mode 100644 index 000000000..dd0b7d8ff --- /dev/null +++ b/packages/Webkul/Channel/src/Database/Migrations/2018_07_20_064849_create_channels_table.php @@ -0,0 +1,48 @@ +increments('id'); + $table->string('code'); + $table->string('name'); + $table->text('description')->nullable(); + $table->integer('default_locale')->unsigned(); + $table->integer('base_currency')->unsigned(); + $table->foreign('default_locale')->references('id')->on('locales')->onDelete('cascade'); + $table->foreign('base_currency')->references('id')->on('currencies')->onDelete('cascade'); + $table->timestamps(); + }); + + Schema::create('channel_currencies', function (Blueprint $table) { + $table->integer('channel_id')->unsigned(); + $table->integer('currency_id')->unsigned(); + $table->primary(['channel_id', 'currency_id']); + $table->foreign('channel_id')->references('id')->on('channels')->onDelete('cascade'); + $table->foreign('currency_id')->references('id')->on('currencies')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('channels'); + + Schema::dropIfExists('channel_currencies'); + } +} diff --git a/packages/Webkul/Channel/src/Database/Migrations/2018_07_20_124255_create_channel_locales_table.php b/packages/Webkul/Channel/src/Database/Migrations/2018_07_20_124255_create_channel_locales_table.php new file mode 100644 index 000000000..83488818a --- /dev/null +++ b/packages/Webkul/Channel/src/Database/Migrations/2018_07_20_124255_create_channel_locales_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->integer('channel_id')->unsigned(); + $table->foreign('channel_id')->references('id')->on('channels')->onDelete('cascade'); + $table->integer('locale_id')->unsigned(); + $table->foreign('locale_id')->references('id')->on('locales')->onDelete('cascade'); + $table->unique(['channel_id', 'locale_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('channel_locales'); + } +} diff --git a/packages/Webkul/Channel/src/Facades/Channel.php b/packages/Webkul/Channel/src/Facades/Channel.php new file mode 100644 index 000000000..e8e7ec817 --- /dev/null +++ b/packages/Webkul/Channel/src/Facades/Channel.php @@ -0,0 +1,18 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class ChannelController extends Controller +{ + /** + * Contains route related configuration + * + * @var array + */ + protected $_config; + + /** + * ChannelRepository object + * + * @var array + */ + protected $channel; + + /** + * Create a new controller instance. + * + * @param Webkul\Channel\Repositories\ChannelRepository $channel + * @return void + */ + public function __construct(Channel $channel) + { + $this->channel = $channel; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view($this->_config['view']); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'code' => ['required', 'unique:channels,code', new \Webkul\Core\Contracts\Validations\Code], + 'name' => 'required', + 'locales' => 'required|array|min:1', + 'default_locale' => 'required', + 'currencies' => 'required|array|min:1', + 'base_currency' => 'required' + ]); + + + $this->channel->create(request()->all()); + + session()->flash('success', 'Channel created successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $channel = $this->channel->findOrFail($id); + + return view($this->_config['view'], compact('channel')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $this->validate(request(), [ + 'code' => ['required', 'unique:channels,code,' . $id, new \Webkul\Core\Contracts\Validations\Code], + 'name' => 'required', + 'locales' => 'required|array|min:1', + 'default_locale' => 'required', + 'currencies' => 'required|array|min:1', + 'base_currency' => 'required' + ]); + + $this->channel->update(request()->all(), $id); + + session()->flash('success', 'Channel updated successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} \ No newline at end of file diff --git a/packages/Webkul/Channel/src/Http/Controllers/Controller.php b/packages/Webkul/Channel/src/Http/Controllers/Controller.php new file mode 100644 index 000000000..302f9bdce --- /dev/null +++ b/packages/Webkul/Channel/src/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/Webkul/Channel/src/Models/Channel.php b/packages/Webkul/Channel/src/Models/Channel.php new file mode 100644 index 000000000..b0d7b73a8 --- /dev/null +++ b/packages/Webkul/Channel/src/Models/Channel.php @@ -0,0 +1,45 @@ +hasMany(ChannelLocale::class); + } + + /** + * Get the default locale + */ + public function default_locale() + { + return $this->belongsTo(Locale::class); + } + + /** + * Get the channel locales. + */ + public function currencies() + { + return $this->belongsToMany(Currency::class, 'channel_currencies'); + } + + /** + * Get the base currency + */ + public function base_currency() + { + return $this->belongsTo(Currency::class); + } +} \ No newline at end of file diff --git a/packages/Webkul/Channel/src/Models/ChannelLocale.php b/packages/Webkul/Channel/src/Models/ChannelLocale.php new file mode 100644 index 000000000..95cf8d07d --- /dev/null +++ b/packages/Webkul/Channel/src/Models/ChannelLocale.php @@ -0,0 +1,17 @@ +belongsTo(Locale::class); + } +} \ No newline at end of file diff --git a/packages/Webkul/Channel/src/Providers/ChannelServiceProvider.php b/packages/Webkul/Channel/src/Providers/ChannelServiceProvider.php new file mode 100644 index 000000000..64e78a74f --- /dev/null +++ b/packages/Webkul/Channel/src/Providers/ChannelServiceProvider.php @@ -0,0 +1,49 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + $this->registerChannelFacade(); + } + + /** + * Register Bouncer as a singleton. + * + * @return void + */ + protected function registerChannelFacade() + { + $loader = AliasLoader::getInstance(); + $loader->alias('channel', ChannelFacade::class); + + $this->app->singleton('channel', function () { + return new Channel(); + }); + } +} \ No newline at end of file diff --git a/packages/Webkul/Channel/src/Repositories/ChannelLocaleRepository.php b/packages/Webkul/Channel/src/Repositories/ChannelLocaleRepository.php new file mode 100644 index 000000000..c8c9d54a1 --- /dev/null +++ b/packages/Webkul/Channel/src/Repositories/ChannelLocaleRepository.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class ChannelLocaleRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Channel\Models\ChannelLocale'; + } +} \ No newline at end of file diff --git a/packages/Webkul/Channel/src/Repositories/ChannelRepository.php b/packages/Webkul/Channel/src/Repositories/ChannelRepository.php new file mode 100644 index 000000000..718a577fa --- /dev/null +++ b/packages/Webkul/Channel/src/Repositories/ChannelRepository.php @@ -0,0 +1,43 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class ChannelRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Channel\Models\Channel'; + } + + /** + * @param array $data + * @return mixed + */ + public function create(array $data) + { + $channel = $this->model->create($data); + + foreach ($data['locales'] as $group) { + + } + + foreach ($data['currencies'] as $group) { + + } + + return $channel; + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Contracts/Validations/Code.php b/packages/Webkul/Core/src/Contracts/Validations/Code.php new file mode 100644 index 000000000..1a232803b --- /dev/null +++ b/packages/Webkul/Core/src/Contracts/Validations/Code.php @@ -0,0 +1,30 @@ +increments('id'); + $table->string('code'); + $table->string('name'); + $table->boolean('status')->default(0); $table->timestamps(); }); } @@ -26,6 +29,6 @@ class CreateCategoryDescriptionTranslationsTable extends Migration */ public function down() { - Schema::dropIfExists('category_description_translations'); + Schema::dropIfExists('countries'); } } diff --git a/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142836_create_category_name_translations_table.php b/packages/Webkul/Core/src/Database/Migrations/2018_07_20_054502_create_currencies_table.php similarity index 62% rename from packages/Webkul/Category/src/Database/Migrations/2018_07_05_142836_create_category_name_translations_table.php rename to packages/Webkul/Core/src/Database/Migrations/2018_07_20_054502_create_currencies_table.php index 48c6656a3..010961fff 100644 --- a/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142836_create_category_name_translations_table.php +++ b/packages/Webkul/Core/src/Database/Migrations/2018_07_20_054502_create_currencies_table.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateCategoryNameTranslationTable extends Migration +class CreateCurrenciesTable extends Migration { /** * Run the migrations. @@ -13,8 +13,11 @@ class CreateCategoryNameTranslationTable extends Migration */ public function up() { - Schema::create('category_name_translation', function (Blueprint $table) { + Schema::create('currencies', function (Blueprint $table) { $table->increments('id'); + $table->string('code'); + $table->string('symbol'); + $table->string('name'); $table->timestamps(); }); } @@ -26,6 +29,6 @@ class CreateCategoryNameTranslationTable extends Migration */ public function down() { - Schema::dropIfExists('category_name_translation'); + Schema::dropIfExists('currencies'); } } diff --git a/packages/Webkul/Core/src/Database/Migrations/2018_07_20_054542_create_currency_exchange_rates_table.php b/packages/Webkul/Core/src/Database/Migrations/2018_07_20_054542_create_currency_exchange_rates_table.php new file mode 100644 index 000000000..4dc944fc3 --- /dev/null +++ b/packages/Webkul/Core/src/Database/Migrations/2018_07_20_054542_create_currency_exchange_rates_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->integer('source_currency')->unsigned(); + $table->integer('target_currency')->unsigned(); + $table->decimal('ratio', 10, 5); + $table->foreign('source_currency')->references('id')->on('currencies')->onDelete('cascade'); + $table->foreign('target_currency')->references('id')->on('currencies')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('currency_exchange_rates'); + } +} diff --git a/packages/Webkul/Core/src/Database/Seeders/LocalesTableSeeder.php b/packages/Webkul/Core/src/Database/Seeders/LocalesTableSeeder.php index fa33dcc31..f4f0d4e90 100644 --- a/packages/Webkul/Core/src/Database/Seeders/LocalesTableSeeder.php +++ b/packages/Webkul/Core/src/Database/Seeders/LocalesTableSeeder.php @@ -13,5 +13,10 @@ class LocalesTableSeeder extends Seeder $locale->code = 'en'; $locale->name = 'English'; $locale->save(); + + $locale = new Locale(); + $locale->code = 'fr'; + $locale->name = 'French'; + $locale->save(); } } \ No newline at end of file diff --git a/packages/Webkul/Core/src/Eloquent/Repository.php b/packages/Webkul/Core/src/Eloquent/Repository.php index aa20151c6..3b82486cf 100644 --- a/packages/Webkul/Core/src/Eloquent/Repository.php +++ b/packages/Webkul/Core/src/Eloquent/Repository.php @@ -48,9 +48,9 @@ abstract class Repository implements RepositoryInterface { * @param array $columns * @return mixed */ - public function all($columns = ['*']) + public function all($columns = ['*'], $with = []) { - return $this->resetScope()->model->get($columns); + return $this->resetScope()->model->with($with)->get($columns); } /** @@ -94,12 +94,12 @@ abstract class Repository implements RepositoryInterface { /** * @param $id - * @param array $columns + * @param array $columns->with($with) * @return mixed */ - public function find($id, $columns = ['*']) + public function find($id, $columns = ['*'], $with = []) { - return $this->resetScope()->model->find($id, $columns); + return $this->resetScope()->model->with($with)->find($id, $columns); } /** @@ -107,9 +107,9 @@ abstract class Repository implements RepositoryInterface { * @param array $columns * @return mixed */ - public function findOrFail($id, $columns = ['*']) + public function findOrFail($id, $columns = ['*'], $with = []) { - return $this->resetScope()->model->findOrFail($id, $columns); + return $this->resetScope()->model->with($with)->findOrFail($id, $columns); } /** @@ -118,9 +118,9 @@ abstract class Repository implements RepositoryInterface { * @param array $columns * @return mixed */ - public function findBy($attribute, $value, $columns = ['*']) + public function findBy($attribute, $value, $columns = ['*'], $with = []) { - return $this->resetScope()->model->where($attribute, '=', $value)->first($columns); + return $this->resetScope()->model->with($with)->where($attribute, '=', $value)->first($columns); } /** diff --git a/packages/Webkul/Core/src/Eloquent/TranslatableModel.php b/packages/Webkul/Core/src/Eloquent/TranslatableModel.php new file mode 100644 index 000000000..61a4378fb --- /dev/null +++ b/packages/Webkul/Core/src/Eloquent/TranslatableModel.php @@ -0,0 +1,39 @@ +first()) + return true; + } + + return false; + } + + /** + * @return string + */ + protected function locale() + { + return channel()->getDefaultChannelLocale()->id; + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Facades/Core.php b/packages/Webkul/Core/src/Facades/Core.php new file mode 100644 index 000000000..b1ae6af34 --- /dev/null +++ b/packages/Webkul/Core/src/Facades/Core.php @@ -0,0 +1,18 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class CountryController extends Controller +{ + /** + * Contains route related configuration + * + * @var array + */ + protected $_config; + + /** + * Create a new controller instance. + * + * @return void + */ + public function __construct() + { + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view($this->_config['view']); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $this->validate(request(), [ + 'code' => 'required|unique:countries,code', + 'name' => 'required' + ]); + + Country::create(request(['code','name'])); + + session()->flash('success', 'Country created successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Http/Controllers/CurrencyController.php b/packages/Webkul/Core/src/Http/Controllers/CurrencyController.php new file mode 100644 index 000000000..688ddcae6 --- /dev/null +++ b/packages/Webkul/Core/src/Http/Controllers/CurrencyController.php @@ -0,0 +1,95 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class CurrencyController extends Controller +{ + /** + * Contains route related configuration + * + * @var array + */ + protected $_config; + + /** + * CurrencyRepository object + * + * @var array + */ + protected $currency; + + /** + * Create a new controller instance. + * + * @param Webkul\Core\Repositories\CurrencyRepository $currency + * @return void + */ + public function __construct(Currency $currency) + { + $this->currency = $currency; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view($this->_config['view']); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $this->validate(request(), [ + 'code' => 'required|unique:countries,code', + 'name' => 'required', + 'symbol' => 'required' + ]); + + $this->currency->create(request()->all()); + + session()->flash('success', 'Currency created successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Http/Controllers/ExchangeRateController.php b/packages/Webkul/Core/src/Http/Controllers/ExchangeRateController.php new file mode 100644 index 000000000..26680de50 --- /dev/null +++ b/packages/Webkul/Core/src/Http/Controllers/ExchangeRateController.php @@ -0,0 +1,150 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class ExchangeRateController extends Controller +{ + /** + * Contains route related configuration + * + * @var array + */ + protected $_config; + + /** + * ExchangeRateRepository object + * + * @var array + */ + protected $exchangeRate; + + /** + * CurrencyRepository object + * + * @var array + */ + protected $currency; + + /** + * Create a new controller instance. + * + * @param Webkul\Core\Repositories\ExchangeRateRepository $exchangeRate + * @param Webkul\Core\Repositories\CurrencyRepository $currency + * @return void + */ + public function __construct(ExchangeRate $exchangeRate, Currency $currency) + { + $this->exchangeRate = $exchangeRate; + + $this->currency = $currency; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $currencies = $this->currency->all(); + + return view($this->_config['view'], compact('currencies')); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $sourceCurrency = request()->get('source_currency'); + $this->validate(request(), [ + 'source_currency' => 'required', + 'target_currency' => ['required', function ($attribute, $value, $fail) use ($sourceCurrency) { + if ($value == $sourceCurrency) { + $fail('The :attribute value should be different from source currency.'); + } + }], + 'ratio' => 'required|numeric' + ]); + + $this->exchangeRate->create(request()->all()); + + session()->flash('success', 'Exchange rate created successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $currencies = $this->currency->all(); + + $exchangeRate = $this->exchangeRate->findOrFail($id); + + return view($this->_config['view'], compact('currencies', 'exchangeRate')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $this->validate(request(), [ + 'source_currency' => 'required', + 'target_currency' => 'required', + 'ratio' => 'required|numeric' + ]); + + $this->exchangeRate->update(request()->all(), $id); + + session()->flash('success', 'Exchange rate updated successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Http/Middleware/Locale.php b/packages/Webkul/Core/src/Http/Middleware/Locale.php new file mode 100644 index 000000000..b01e175b5 --- /dev/null +++ b/packages/Webkul/Core/src/Http/Middleware/Locale.php @@ -0,0 +1,41 @@ +locale = $locale; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + */ + public function handle($request, Closure $next) + { + if($locale = $request->get('locale')) { + if($this->locale->findBy('code', $locale)) { + // app()->setLocale($locale); + } + } + + return $next($request); + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Http/helpers.php b/packages/Webkul/Core/src/Http/helpers.php new file mode 100644 index 000000000..1f8f52fb4 --- /dev/null +++ b/packages/Webkul/Core/src/Http/helpers.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/packages/Webkul/Core/src/Models/Country.php b/packages/Webkul/Core/src/Models/Country.php new file mode 100644 index 000000000..02dfe326b --- /dev/null +++ b/packages/Webkul/Core/src/Models/Country.php @@ -0,0 +1,17 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'core'); + $router->aliasMiddleware('locale', Locale::class); + $this->publishes([ __DIR__ . '/../../publishable/lang' => public_path('vendor/webkul/core/lang'), ], 'public'); Validator::extend('slug', 'Webkul\Core\Contracts\Validations\Slug@passes'); + + Validator::extend('code', 'Webkul\Core\Contracts\Validations\Code@passes'); } /** @@ -34,5 +43,21 @@ class CoreServiceProvider extends ServiceProvider */ public function register() { + $this->registerCoreFacade(); + } + + /** + * Register Bouncer as a singleton. + * + * @return void + */ + protected function registerCoreFacade() + { + $loader = AliasLoader::getInstance(); + $loader->alias('core', CoreFacade::class); + + $this->app->singleton('core', function () { + return new Core(); + }); } } \ No newline at end of file diff --git a/packages/Webkul/Core/src/Repositories/CountryRepository.php b/packages/Webkul/Core/src/Repositories/CountryRepository.php new file mode 100644 index 000000000..fc6209aea --- /dev/null +++ b/packages/Webkul/Core/src/Repositories/CountryRepository.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class CountryRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Core\Models\Country'; + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Repositories/CurrencyRepository.php b/packages/Webkul/Core/src/Repositories/CurrencyRepository.php new file mode 100644 index 000000000..a60a694bf --- /dev/null +++ b/packages/Webkul/Core/src/Repositories/CurrencyRepository.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class CurrencyRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Core\Models\Currency'; + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Repositories/ExchangeRateRepository.php b/packages/Webkul/Core/src/Repositories/ExchangeRateRepository.php new file mode 100644 index 000000000..7b61f7745 --- /dev/null +++ b/packages/Webkul/Core/src/Repositories/ExchangeRateRepository.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class ExchangeRateRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Core\Models\CurrencyExchangeRate'; + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Repositories/LocaleRepository.php b/packages/Webkul/Core/src/Repositories/LocaleRepository.php new file mode 100644 index 000000000..4be975f5d --- /dev/null +++ b/packages/Webkul/Core/src/Repositories/LocaleRepository.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class LocaleRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Core\Models\Locale'; + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Resources/lang/en/validation.php b/packages/Webkul/Core/src/Resources/lang/en/validation.php index 12efc8886..afd198201 100644 --- a/packages/Webkul/Core/src/Resources/lang/en/validation.php +++ b/packages/Webkul/Core/src/Resources/lang/en/validation.php @@ -1,5 +1,6 @@ 'The :attribute must be valid slug.' + 'slug' => 'The :attribute must be valid slug.', + 'code' => 'The :attribute must be valid.' ]; \ No newline at end of file diff --git a/packages/Webkul/Inventory/.gitignore b/packages/Webkul/Inventory/.gitignore new file mode 100644 index 000000000..30bc16279 --- /dev/null +++ b/packages/Webkul/Inventory/.gitignore @@ -0,0 +1 @@ +/node_modules \ No newline at end of file diff --git a/packages/Webkul/Inventory/composer.json b/packages/Webkul/Inventory/composer.json new file mode 100644 index 000000000..f1fc80177 --- /dev/null +++ b/packages/Webkul/Inventory/composer.json @@ -0,0 +1,27 @@ +{ + "name": "webkul/laravel-inventory", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + "propaganistas/laravel-intl": "^2.0" + }, + "autoload": { + "psr-4": { + "Webkul\\Inventory\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\Inventory\\InventoryServiceProvider" + ], + "aliases": {} + } + }, + "minimum-stability": "dev" +} diff --git a/packages/Webkul/Inventory/src/Database/Migrations/2018_07_23_110040_create_inventory_sources_table.php b/packages/Webkul/Inventory/src/Database/Migrations/2018_07_23_110040_create_inventory_sources_table.php new file mode 100644 index 000000000..b6110de49 --- /dev/null +++ b/packages/Webkul/Inventory/src/Database/Migrations/2018_07_23_110040_create_inventory_sources_table.php @@ -0,0 +1,47 @@ +increments('id'); + $table->string('code')->unique(); + $table->string('name'); + $table->text('description')->nullable(); + $table->string('contact_name')->nullable(); + $table->string('contact_email')->nullable(); + $table->string('contact_number')->nullable(); + $table->string('contact_fax')->nullable(); + $table->string('country')->nullable(); + $table->string('state')->nullable(); + $table->string('city')->nullable(); + $table->string('street')->nullable(); + $table->string('postcode'); + $table->integer('priority')->default(0); + $table->decimal('latitude', 10, 5); + $table->decimal('longitude', 10, 5); + $table->boolean('status')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('inventory_sources'); + } +} diff --git a/packages/Webkul/Inventory/src/Http/Controllers/Controller.php b/packages/Webkul/Inventory/src/Http/Controllers/Controller.php new file mode 100644 index 000000000..cdfffe386 --- /dev/null +++ b/packages/Webkul/Inventory/src/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class InventorySourceController extends Controller +{ + /** + * Contains route related configuration + * + * @var array + */ + protected $_config; + + /** + * InventorySourceRepository object + * + * @var array + */ + protected $inventorySource; + + /** + * Create a new controller instance. + * + * @param Webkul\Inventory\Repositories\InventorySourceRepository $inventorySource + * @return void + */ + public function __construct(InventorySource $inventorySource) + { + $this->inventorySource = $inventorySource; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view($this->_config['view']); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required' + ]); + + $this->inventorySource->create(request()->all()); + + session()->flash('success', 'Inventory source created successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $inventorySource = $this->inventorySource->findOrFail($id); + + return view($this->_config['view'], compact('inventorySource')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $this->validate(request(), [ + 'name' => 'required', + ]); + + $this->inventorySource->update(request()->all(), $id); + + session()->flash('success', 'Inventory source updated successfully.'); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} \ No newline at end of file diff --git a/packages/Webkul/Inventory/src/Models/InventorySource.php b/packages/Webkul/Inventory/src/Models/InventorySource.php new file mode 100644 index 000000000..c7b066699 --- /dev/null +++ b/packages/Webkul/Inventory/src/Models/InventorySource.php @@ -0,0 +1,10 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + } +} \ No newline at end of file diff --git a/packages/Webkul/Inventory/src/Repositories/InventorySourceRepository.php b/packages/Webkul/Inventory/src/Repositories/InventorySourceRepository.php new file mode 100644 index 000000000..519dd2e2d --- /dev/null +++ b/packages/Webkul/Inventory/src/Repositories/InventorySourceRepository.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class InventorySourceRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Inventory\Models\InventorySource'; + } +} \ No newline at end of file diff --git a/packages/Webkul/Ui/src/Resources/assets/images/Folder-Icon.svg b/packages/Webkul/Ui/src/Resources/assets/images/Folder-Icon.svg new file mode 100644 index 000000000..48717d78b --- /dev/null +++ b/packages/Webkul/Ui/src/Resources/assets/images/Folder-Icon.svg @@ -0,0 +1,10 @@ + + + + Folder-Icon + Created with Sketch. + + + + + \ No newline at end of file diff --git a/packages/Webkul/Ui/src/Resources/assets/js/app.js b/packages/Webkul/Ui/src/Resources/assets/js/app.js index bc8097909..82eaf3095 100644 --- a/packages/Webkul/Ui/src/Resources/assets/js/app.js +++ b/packages/Webkul/Ui/src/Resources/assets/js/app.js @@ -4,4 +4,5 @@ Vue.component('accordian', require('./components/accordian')) Vue.component('tree-view', require('./components/tree-view/tree-view')) Vue.component('tree-item', require('./components/tree-view/tree-item')) Vue.component('tree-checkbox', require('./components/tree-view/tree-checkbox')) +Vue.component('tree-radio', require('./components/tree-view/tree-radio')) Vue.component('modal', require('./components/modal')) \ No newline at end of file diff --git a/packages/Webkul/Ui/src/Resources/assets/js/components/tree-view/tree-checkbox.vue b/packages/Webkul/Ui/src/Resources/assets/js/components/tree-view/tree-checkbox.vue index 3304fec27..92b556ef9 100644 --- a/packages/Webkul/Ui/src/Resources/assets/js/components/tree-view/tree-checkbox.vue +++ b/packages/Webkul/Ui/src/Resources/assets/js/components/tree-view/tree-checkbox.vue @@ -1,6 +1,6 @@