$(function(){
if (window.location.pathname == '/pl/sales/offer/update') {
$('body').append(`
`)
$('#offerForm .save-offer').click(function(e){
e.preventDefault()
submitForm()
})
$(document).ajaxSuccess(function(event, xhr, settings){
if(settings.url.includes('/pl/logic/context/select-object')) {
addLink()
stopDblClick()
}
})
}
})
//Задаем действия по событиям клика
function stopDblClick() {
$('.w0').on('dblclick', function(e) {
e.stopImmediatePropagation();
selectProduct.call(this);
});
$('.w0 .add-product').on('click', function(e) {
e.stopImmediatePropagation();
selectProduct.call(this);
});
}
//Функция выбора продукта
function selectProduct() {
let productName = $(this).parents('.has-archived-row').find('.w0[data-col-seq="1"] a:not(.add-product)').text().trim();
let productLink = $(this).parents('.has-archived-row').find('.w0[data-col-seq="1"] a:not(.add-product)').attr('href');
let productId = $(this).parents('.has-archived-row').find('.w0[data-col-seq="1"] a:not(.add-product)').attr('href').replace(/[^0-9]/g, '');
if (!$(`.products span a[href="${productLink}"]`).length) {
$('.product-list').append(`
`);
}
$('.products .clearfix').show()
}
//Добавляем кнопку выбора продукта
function addLink() {
let inter = setInterval(function(){
if (!$('.gc-tags-cloud ~ .products').length) {
$('.gc-tags-cloud').after(`
`)
}
if (!$('.kv-grid-table tbody tr td[data-col-seq="1"] div .add-product').length) {
$('.kv-grid-table tbody tr td[data-col-seq="1"] div').append('Выбрать');
}
if ($('.kv-grid-table tbody tr td[data-col-seq="1"] .add-product').length) {
stopDblClick()
clearInterval(inter)
}
},100)
}
//Сбрасываем выбор продуктов
function resetSelection() {
$('.product-list > *').remove();
$('.products .clearfix').hide();
}
//Сохраняем выбор продуктов
function saveChoice() {
$('.add-product-as-params .select-object-widget').text('')
$('.gc-modal .close-btn').click();
$('.product-list > *').each(function(i,e) {
$('.add-product-as-params .select-object-widget').append(`
${$(e).find('span').attr('product-name')}
`)
})
}
//Сабмитим форму
function submitForm() {
if ($('#paramsobject-prefix_offer_id').val() == '') {
$('.error-summary').remove()
$('#offerForm').prepend(`
Пожалуйста, исправьте следующие ошибки:
- Выберите значение поля Префикс названия из списка
`)
} else if ($('#offer-title').val().length < 5){
$('.error-summary').remove()
$('#offerForm').prepend(`
Пожалуйста, исправьте следующие ошибки:
- Поле «Название» не должно быть короче 5 символов
`)
} else {
if ($('.add-product-as-params .select-object-widget > div').length) {
let promises = [];
let totalAddedProducts = $('.add-product-as-params .select-object-widget > div').length;
let remainingProducts = totalAddedProducts;
$('body').append(`
Осталось добавить ${remainingProducts} продуктов
`);
$('.add-product-as-params .select-object-widget > div').each(function(i,e){
const form = $('#offerForm');
const builder = new URL(form.attr('action'), location.origin);
const searchParams = builder.searchParams;
if (searchParams.has('copy')) {
searchParams.delete('copy');
form.attr('action', builder.pathname + '?' + searchParams.toString());
}
const formData = form.serializeArray();
formData.push({ name: 'add_product', value: '1' });
formData.push({ name: 'add_product_as', value: 'select' });
formData.push({ name: 'add_product_id', value: `${$(e).find('span').attr('p-id')}` });
const request = $.ajax({
type: "POST",
url: form.attr('action'),
data: formData,
dataType: "json"
}).done(() => {
remainingProducts--;
$('.modal-added-status .modal-block-text').text(`Осталось добавить ${remainingProducts} продуктов`);
});
promises.push(request);
})
Promise.all(promises).then(() => {
window.location.reload();
});
} else {
let form = $('#offerForm');
let builder = new URL(form.attr('action'), location.origin);
let searchParams = builder.searchParams;
if (searchParams.has('copy')) {
searchParams.delete('copy');
form.attr('action', builder.pathname + '?' + searchParams.toString());
}
const formData = form.serializeArray();
$.ajax({
type: "POST",
url: form.attr('action'),
data: formData,
dataType: "json"
}).done(() => {
window.location.reload()
});
}
}
}