Merge pull request #1237 from openclassify/4946

#4946 Options value editing
This commit is contained in:
Fatih Alp 2021-12-02 10:49:48 +03:00 committed by GitHub
commit 9c13ae0774
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 126 additions and 10 deletions

View File

@ -263,6 +263,15 @@ label {
} }
} }
.swal2-title {
max-width: 100% !important;
}
#configurationModal .form-group {
flex: 1 1 auto!important;
margin: 0 1rem 1rem 1rem;
}
.btn-configuration { .btn-configuration {
background-color: #6E5DDB; background-color: #6E5DDB;
padding: 1rem 2rem; padding: 1rem 2rem;

View File

@ -181,6 +181,33 @@ $(document).ready(function () {
}); });
}); });
let option_id = 0;
let option_value = '';
function createOptionValue() {
Swal.fire({
title: save_the_option,
text: option_value,
showCancelButton: true,
confirmButtonText: new_button,
}).then(result => {
if (result.isConfirmed) {
crudAjax({
option: option_id,
name: option_value
}, '/api/classified/configuration/createOptions', 'POST', function (callback) {
Swal.fire({
icon: 'success',
title: option_saved,
text: callback.name,
showConfirmButton: false,
timer: 1500
})
})
}
});
}
$(document).ready(function () { $(document).ready(function () {
$(".priceField, .standard-price-field").inputmask('currency', { $(".priceField, .standard-price-field").inputmask('currency', {
rightAlign: true, rightAlign: true,
@ -231,6 +258,36 @@ $(document).ready(function () {
tokenSeparators: [','] tokenSeparators: [',']
}); });
$('.product-options-fields').select2({
width: '100%',
dropdownAutoWidth : true,
allowClear: false,
ajax: {
url: "/api/classified/configuration/getOptions",
data: function (params) {
option_value = params.term;
return {
q: params.term,
option: option_id,
};
},
processResults: function (data) {
return {
results: $.map(data, (item) => {
return {id: item.id, text: item.name}
})
}
}
},
language: {
noResults: function () {
return $(`<button class='btn btn-primary btn-configuration text-nowrap my-auto form-control w-100 justify-content-center' onclick='createOptionValue()'>${new_button}</button>`);
}
}
}).on('select2:open', function (e) {
option_id = $(e.target).data('id');
});
let deletedOptions = []; let deletedOptions = [];
$('#selectOptions').on('select2:unselect', function (e) { $('#selectOptions').on('select2:unselect', function (e) {
if (e.params.data.element.id) { if (e.params.data.element.id) {
@ -266,7 +323,7 @@ $(document).ready(function () {
$('#configurationForm').submit(function (e) { $('#configurationForm').submit(function (e) {
e.preventDefault(); e.preventDefault();
crudAjax($(this).serialize(), '/advs/configuration/ajax/create', 'POST', function (callback) { crudAjax($(this).serialize(), '/classified/configuration/ajax/create', 'POST', function (callback) {
$('.configuration-table').append(`<tr id="configuration-${callback.id}"> $('.configuration-table').append(`<tr id="configuration-${callback.id}">
<td>${callback.option_name}</td> <td>${callback.option_name}</td>
<td>${callback.stock}</td> <td>${callback.stock}</td>
@ -288,7 +345,7 @@ $(document).ready(function () {
$(document).on('click', '.remove-conf', function () { $(document).on('click', '.remove-conf', function () {
const id = $(this).data('id'); const id = $(this).data('id');
crudAjax({id: id}, '/advs/configuration/ajax/delete', 'POST', function (callback) { crudAjax({id: id}, '/classified/configuration/ajax/delete', 'POST', function (callback) {
$('#configuration-' + id).remove(); $('#configuration-' + id).remove();
}) })
}); });

View File

@ -35,7 +35,7 @@ return [
], ],
'new_option' => 'New Option', 'new_option' => 'New Option',
'export' => 'Export', 'export' => 'Export',
'new_productoption' => 'New Productoption', 'new_productoption' => 'New Product Option',
'new_productoptions_value' => 'New Product option value', 'new_productoptions_value' => 'New Product option value',
'new_options_configuration' => 'New Option configuration', 'new_options_configuration' => 'New Option configuration',
'new_option_configuration' => 'New Option configuration', 'new_option_configuration' => 'New Option configuration',

View File

@ -34,4 +34,6 @@ return [
'disabled_detailed_options_for_admin_role' => "Detailed product options are disabled.", 'disabled_detailed_options_for_admin_role' => "Detailed product options are disabled.",
'permission_error' => 'You do not have permission for this action', 'permission_error' => 'You do not have permission for this action',
'currency_converter_not_available' => 'The currency converter is not available.', 'currency_converter_not_available' => 'The currency converter is not available.',
'option_saved' => 'Option Saved',
'do_you_want_to_save_the_option' => 'Do you want to save the option?',
]; ];

View File

@ -50,3 +50,9 @@
</div> </div>
</div> </div>
</div> </div>
<script>
let new_button = "{{ trans('visiosoft.module.advs::button.new_productoption') }}",
option_saved = "{{ trans('visiosoft.module.advs::message.option_saved') }}",
save_the_option = "{{ trans('visiosoft.module.advs::message.do_you_want_to_save_the_option') }}";
</script>

View File

@ -224,15 +224,22 @@ class AdvsModuleServiceProvider extends AddonServiceProvider
'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@create', 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@create',
], ],
'advs/configuration/ajax/create' => [ 'classified/configuration/ajax/create' => [
'middleware' => 'auth', 'middleware' => 'auth',
'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@ajaxCreate' 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@ajaxCreate'
], ],
'advs/configuration/ajax/delete' => [ 'classified/configuration/ajax/delete' => [
'middleware' => 'auth', 'middleware' => 'auth',
'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@ajaxDelete' 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@ajaxDelete'
], ],
'api/classified/configuration/getOptions' => [
'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@ajaxGetOptions',
],
'api/classified/configuration/createOptions' => [
'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@ajaxCreateOptions',
],
'conf/addCart' => [ 'conf/addCart' => [
'as' => 'configuration::add_cart', 'as' => 'configuration::add_cart',
'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@confAddCart', 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@confAddCart',

View File

@ -4,6 +4,8 @@ use Anomaly\Streams\Platform\Http\Controller\PublicController;
use Visiosoft\AdvsModule\Adv\AdvModel; use Visiosoft\AdvsModule\Adv\AdvModel;
use Visiosoft\AdvsModule\OptionConfiguration\Contract\OptionConfigurationRepositoryInterface; use Visiosoft\AdvsModule\OptionConfiguration\Contract\OptionConfigurationRepositoryInterface;
use Visiosoft\AdvsModule\OptionConfiguration\Form\OptionConfigurationFormBuilder; use Visiosoft\AdvsModule\OptionConfiguration\Form\OptionConfigurationFormBuilder;
use Visiosoft\AdvsModule\Productoption\Contract\ProductoptionRepositoryInterface;
use Visiosoft\AdvsModule\ProductoptionsValue\Contract\ProductoptionsValueRepositoryInterface;
use Visiosoft\AdvsModule\Support\Command\Currency; use Visiosoft\AdvsModule\Support\Command\Currency;
use Visiosoft\CartsModule\Cart\CartRepository; use Visiosoft\CartsModule\Cart\CartRepository;
use Visiosoft\CartsModule\Cart\Command\GetCart; use Visiosoft\CartsModule\Cart\Command\GetCart;
@ -13,16 +15,22 @@ class OptionConfigurationController extends PublicController
private $adv_model; private $adv_model;
private $optionConfigurationRepository; private $optionConfigurationRepository;
private $cartRepository; private $cartRepository;
private $productoptionRepository;
private $productoptionsValueRepository;
public function __construct( public function __construct(
AdvModel $advModel, AdvModel $advModel,
OptionConfigurationRepositoryInterface $optionConfigurationRepository, OptionConfigurationRepositoryInterface $optionConfigurationRepository,
CartRepository $cartRepository CartRepository $cartRepository,
ProductoptionRepositoryInterface $productoptionRepository,
ProductoptionsValueRepositoryInterface $productoptionsValueRepository
) )
{ {
$this->adv_model = $advModel; $this->adv_model = $advModel;
$this->optionConfigurationRepository = $optionConfigurationRepository; $this->optionConfigurationRepository = $optionConfigurationRepository;
$this->cartRepository = $cartRepository; $this->cartRepository = $cartRepository;
$this->productoptionRepository = $productoptionRepository;
$this->productoptionsValueRepository = $productoptionsValueRepository;
parent::__construct(); parent::__construct();
} }
@ -75,6 +83,21 @@ class OptionConfigurationController extends PublicController
} }
} }
public function ajaxGetOptions() {
$option = $this->productoptionRepository->find($this->request->option);
return $this->productoptionsValueRepository->searchByOption($option->id, $this->request->q);
}
public function ajaxCreateOptions()
{
$option = $this->productoptionRepository->find($this->request->option);
return $this->productoptionsValueRepository->create([
'product_option' => $option,
'name' => $this->request->name
]);
}
public function ajaxConfAddCart() public function ajaxConfAddCart()
{ {
if ($conf = $this->optionConfigurationRepository->find($this->request->configuration ?? $this->request->data['conf'])) { if ($conf = $this->optionConfigurationRepository->find($this->request->configuration ?? $this->request->data['conf'])) {

View File

@ -29,8 +29,12 @@ class OptionConfigurationFormFields
{ {
$options_fields['option-'.$option->getId()] = [ $options_fields['option-'.$option->getId()] = [
'type' => 'anomaly.field_type.select', 'type' => 'anomaly.field_type.select',
'class' => 'form-control product-options-fields',
'label' => $option->getName(), 'label' => $option->getName(),
'required' => true, 'required' => true,
'attributes' => [
'data-id' => $option->getId(),
],
'config' => [ 'config' => [
'options' => $optionValue->pluck('title','id')->all(), 'options' => $optionValue->pluck('title','id')->all(),
] ]

View File

@ -5,4 +5,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface;
interface ProductoptionsValueRepositoryInterface extends EntryRepositoryInterface interface ProductoptionsValueRepositoryInterface extends EntryRepositoryInterface
{ {
public function getWithOptionsId(array $ids); public function getWithOptionsId(array $ids);
public function searchByOption($option, $value);
} }

View File

@ -23,8 +23,15 @@ class ProductoptionsValueRepository extends EntryRepository implements Productop
$this->model = $model; $this->model = $model;
} }
public function getWithOptionsId(array $ids) public function getWithOptionsId(array $ids)
{ {
return $this->newQuery()->whereIn('product_option_id', $ids)->get(); return $this->newQuery()->whereIn('product_option_id', $ids)->get();
} }
public function searchByOption($option, $value)
{
return $this->newQuery()->where('product_option_id', $option)
->where('name', 'like', '%' . $value . '%')
->get();
}
} }