filterSubgroups();
+ function checkIntervalsForBouquetId(id) {
+ // Собираем все интервалы для товара (всех строк)
+ let intervals = [];
+ $('#actuality-form table tbody tr').each(function(){
+ let $row = $(this);
+ let rowGuid = $row.find('input[type=hidden][name*="[bouquet_id]"]').val();
+ if (rowGuid == id) {
+ let from = $row.find('select.from-month').val();
+ let to = $row.find('select.to-month').val();
+ if (from && to) intervals.push({from, to, $row});
+ }
+ });
+ intervals.sort((a,b) => a.from.localeCompare(b.from));
+
+ let hasOverlap = false;
+ for(let i=0; i<intervals.length; ++i) {
+ for(let j=i+1; j<intervals.length; ++j) {
+ if (intervals[i].to >= intervals[j].from) {
+ // Пересечение!
+ intervals[i].$row.addClass('table-danger');
+ intervals[j].$row.addClass('table-danger');
+ hasOverlap = true;
+ }
+ }
+ }
+ if (hasOverlap) {
+ if (!$('.interval-overlap-alert').length) {
+ $('<div class="alert alert-warning interval-overlap-alert mt-2">Пересекающиеся диапазоны по одному товару!</div>')
+ .insertBefore('#actuality-form');
+ }
+ } else {
+ $('.interval-overlap-alert').remove();
+ $('#actuality-form table tbody tr').removeClass('table-danger');
+ }
+ return hasOverlap;
+ }
$(document).on('change', '.from-month, .to-month', function(){
let $row = $(this).closest('tr');
- let guid = $row.find('input[type=hidden][name*="[guid]"]').val();
- checkIntervalsForGuid(guid);
+ let id = $row.find('input[type=hidden][name*="[bouquet_id]"]').val();
+ checkIntervalsForBouquetId(id);
});
function ymParse(ym) {
const newRow = `
<tr class="table-info">
<td style="min-width:150px;">
- <div class="d-flex justify-content-between">${name} (${id}) <div class="text-danger mx-5">Новая запись. Заполните интервал</div></div>
+ <div class="d-flex justify-content-between">${name} (${guid}) <div class="text-danger mx-5">Новая запись. Заполните интервал</div></div>
</td>
<td style="text-align:center;">
<div class="d-flex justify-content-between">${price}</div>