Conflicts:
	addons/default/visiosoft/advs-module/resources/js/new-create.js
This commit is contained in:
diashalabi 2021-12-06 09:58:02 +03:00
commit 572fe5575c
12 changed files with 144 additions and 27 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 {
background-color: #6E5DDB;
padding: 1rem 2rem;

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

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 () {
$(".priceField, .standard-price-field").inputmask('currency', {
rightAlign: true,
@ -231,6 +258,36 @@ $(document).ready(function () {
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 = [];
$('#selectOptions').on('select2:unselect', function (e) {
if (e.params.data.element.id) {
@ -266,23 +323,21 @@ $(document).ready(function () {
$('#configurationForm').submit(function (e) {
e.preventDefault();
crudAjax($(this).serialize(), '/advs/configuration/ajax/create', 'POST', function (callback) {
$('.configuration-table').append(`
<tr id="configuration-${callback.id}">
<td>${callback.option_name}</td>
<td>${callback.stock}</td>
<td>${callback.currency_price}</td>
<td class="text-right">
<a href="javascript:void(0)" class="btn btn-sm remove-conf" data-id="${callback.id}"><svg id="Group_42321" data-name="Group 42321" xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30">
<g id="Group_15874" data-name="Group 15874">
<path id="Path_10381" data-name="Path 10381" d="M15,0A15,15,0,1,1,0,15,15,15,0,0,1,15,0Z" fill="#f8f8f8"></path>
<path id="close" d="M10.557.6l-.6-.6L5.278,4.675.6,0,0,.6,4.675,5.278,0,9.953l.6.6L5.278,5.882l4.675,4.675.6-.6L5.882,5.278Z" transform="translate(9.5 9.5)" fill="#c7c7c7" stroke="#c7c7c7" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.7"></path>
</g>
</svg>
</a>
</td>
</tr>
`);
crudAjax($(this).serialize(), '/classified/configuration/ajax/create', 'POST', function (callback) {
$('.configuration-table').append(`<tr id="configuration-${callback.id}">
<td>${callback.option_name}</td>
<td>${callback.stock}</td>
<td>${callback.currency_price}</td>
<td class="text-right">
<a href="javascript:void(0)" class="btn btn-sm remove-conf" data-id="${callback.id}"><svg id="Group_42321" data-name="Group 42321" xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30">
<g id="Group_15874" data-name="Group 15874">
<path id="Path_10381" data-name="Path 10381" d="M15,0A15,15,0,1,1,0,15,15,15,0,0,1,15,0Z" fill="#f8f8f8"></path>
<path id="close" d="M10.557.6l-.6-.6L5.278,4.675.6,0,0,.6,4.675,5.278,0,9.953l.6.6L5.278,5.882l4.675,4.675.6-.6L5.882,5.278Z" transform="translate(9.5 9.5)" fill="#c7c7c7" stroke="#c7c7c7" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.7"></path>
</g>
</svg>
</a>
</td>
</tr>`);
$('#configurationForm').trigger("reset");
})
});
@ -290,7 +345,7 @@ $(document).ready(function () {
$(document).on('click', '.remove-conf', function () {
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();
})
});

View File

@ -35,7 +35,7 @@ return [
],
'new_option' => 'New Option',
'export' => 'Export',
'new_productoption' => 'New Productoption',
'new_productoption' => 'New Product Option',
'new_productoptions_value' => 'New Product option value',
'new_options_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.",
'permission_error' => 'You do not have permission for this action',
'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

@ -1,5 +1,8 @@
{% if(adv.map_Val == "") %}
{{ trans('visiosoft.module.advs::field.no_location') }}
<div class="d-flex flex-column justify-content-center text-center bg-white h-100">
{{ img('visiosoft.module.advs::images/emptystate.jpg') }}
{{ trans('visiosoft.module.advs::field.no_location') }}
</div>
{% else %}
{% set map_arr = adv.map_Val|split(',') %}
<div id="mapDiv" style="height: 500px; width: 100%;"></div>

View File

@ -50,3 +50,9 @@
</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',
],
'advs/configuration/ajax/create' => [
'classified/configuration/ajax/create' => [
'middleware' => 'auth',
'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@ajaxCreate'
],
'advs/configuration/ajax/delete' => [
'classified/configuration/ajax/delete' => [
'middleware' => 'auth',
'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' => [
'as' => 'configuration::add_cart',
'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\OptionConfiguration\Contract\OptionConfigurationRepositoryInterface;
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\CartsModule\Cart\CartRepository;
use Visiosoft\CartsModule\Cart\Command\GetCart;
@ -13,16 +15,22 @@ class OptionConfigurationController extends PublicController
private $adv_model;
private $optionConfigurationRepository;
private $cartRepository;
private $productoptionRepository;
private $productoptionsValueRepository;
public function __construct(
AdvModel $advModel,
OptionConfigurationRepositoryInterface $optionConfigurationRepository,
CartRepository $cartRepository
CartRepository $cartRepository,
ProductoptionRepositoryInterface $productoptionRepository,
ProductoptionsValueRepositoryInterface $productoptionsValueRepository
)
{
$this->adv_model = $advModel;
$this->optionConfigurationRepository = $optionConfigurationRepository;
$this->cartRepository = $cartRepository;
$this->productoptionRepository = $productoptionRepository;
$this->productoptionsValueRepository = $productoptionsValueRepository;
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()
{
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()] = [
'type' => 'anomaly.field_type.select',
'class' => 'form-control product-options-fields',
'label' => $option->getName(),
'required' => true,
'attributes' => [
'data-id' => $option->getId(),
],
'config' => [
'options' => $optionValue->pluck('title','id')->all(),
]

View File

@ -5,4 +5,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface;
interface ProductoptionsValueRepositoryInterface extends EntryRepositoryInterface
{
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;
}
public function getWithOptionsId(array $ids)
{
return $this->newQuery()->whereIn('product_option_id', $ids)->get();
}
public function getWithOptionsId(array $ids)
{
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();
}
}