Subversion Repositories SmartDukaan

Rev

Rev 36668 | Rev 36681 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 36668 Rev 36670
Line 1520... Line 1520...
1520
				if (b.status === 'running') chipCls += ' running';
1520
				if (b.status === 'running') chipCls += ' running';
1521
				if (b.status === 'completed') chipCls += ' completed';
1521
				if (b.status === 'completed') chipCls += ' completed';
1522
                var removeBtn = (!isPast && b.status !== 'running' && b.status !== 'completed')
1522
                var removeBtn = (!isPast && b.status !== 'running' && b.status !== 'completed')
1523
                    ? '<span class="cal-chip-remove" data-date="' + ds + '" data-plangroup="' + (b.planGroupId || '') + '" title="Remove">&times;</span>'
1523
                    ? '<span class="cal-chip-remove" data-date="' + ds + '" data-plangroup="' + (b.planGroupId || '') + '" title="Remove">&times;</span>'
1524
                    : '';
1524
                    : '';
-
 
1525
				var draggable = (!isPast && b.status !== 'running' && b.status !== 'completed') ? ' draggable="true"' : '';
-
 
1526
				var cursor = draggable ? 'grab' : 'pointer';
1525
				row += '<span class="' + chipCls + ' cal-chip-view" data-plangroup="' + (b.planGroupId || '') + '" data-date="' + ds + '" style="background:' + b.color + ';position:relative;cursor:pointer;">'
1527
				row += '<span class="' + chipCls + ' cal-chip-view"' + draggable + ' data-plangroup="' + (b.planGroupId || '') + '" data-date="' + ds + '" style="background:' + b.color + ';position:relative;cursor:' + cursor + ';" title="Drag to another date to shuffle">'
1526
                    + b.name + ' D' + b.day + (b.status === 'running' ? ' [live]' : '') + ' (' + b.visits + ')'
1528
                    + b.name + ' D' + b.day + (b.status === 'running' ? ' [live]' : '') + ' (' + b.visits + ')'
1527
                    + removeBtn + '</span>';
1529
                    + removeBtn + '</span>';
1528
			});
1530
			});
1529
 
1531
 
1530
			if (isPicked) {
1532
			if (isPicked) {
Line 1883... Line 1885...
1883
    e.stopPropagation();
1885
    e.stopPropagation();
1884
    var date = $(this).data('date');
1886
    var date = $(this).data('date');
1885
    var planGroupId = $(this).data('plangroup');
1887
    var planGroupId = $(this).data('plangroup');
1886
    if (!planGroupId || !date) return;
1888
    if (!planGroupId || !date) return;
1887
 
1889
 
1888
    if (!confirm('Remove this beat from ' + date + '?')) return;
1890
	if (!confirm('Unschedule this beat from ' + date + '?\n\n(The beat stays in the list — only this date is cleared.)')) return;
1889
 
1891
 
1890
    // Delete the entire beat instance (planGroupId)
1892
	// Unschedule ONLY this date — the beat itself is preserved
1891
    $.ajax({
1893
    $.ajax({
1892
        url: context + "/beatPlan/delete", type: "POST",
1894
		url: context + "/beatPlan/unscheduleDate", type: "POST",
1893
        data: {planGroupId: planGroupId},
1895
		data: {planGroupId: String(planGroupId), date: date},
1894
        success: function () {
1896
        success: function () {
1895
            loadCalendarData();
1897
            loadCalendarData();
1896
        },
1898
        },
1897
        error: function (xhr) {
1899
        error: function (xhr) {
1898
            alert('Error: ' + (xhr.responseText || xhr.statusText));
1900
            alert('Error: ' + (xhr.responseText || xhr.statusText));
1899
        }
1901
        }
1900
	});
1902
	});
1901
});
1903
});
1902
 
1904
 
-
 
1905
// ============ CALENDAR SHUFFLE (drag chip to another date) ============
-
 
1906
$(document).on('dragstart', '.cal-chip-view', function (e) {
-
 
1907
	var pg = $(this).data('plangroup');
-
 
1908
	var date = $(this).data('date');
-
 
1909
	if (!pg || !date) {
-
 
1910
		e.preventDefault();
-
 
1911
		return;
-
 
1912
	}
-
 
1913
	var payload = JSON.stringify({pg: String(pg), fromDate: String(date)});
-
 
1914
	var dt = e.originalEvent.dataTransfer;
-
 
1915
	dt.effectAllowed = 'move';
-
 
1916
	dt.setData('text/plain', payload);
-
 
1917
	$(this).css('opacity', '0.4');
-
 
1918
});
-
 
1919
 
-
 
1920
$(document).on('dragend', '.cal-chip-view', function () {
-
 
1921
	$(this).css('opacity', '');
-
 
1922
});
-
 
1923
 
-
 
1924
$(document).on('dragover', '.cal-grid td', function (e) {
-
 
1925
	var $td = $(this);
-
 
1926
	if ($td.hasClass('past') || $td.hasClass('blocked') || $td.hasClass('holiday') || $td.hasClass('sunday')) return;
-
 
1927
	e.preventDefault();
-
 
1928
	e.originalEvent.dataTransfer.dropEffect = 'move';
-
 
1929
	$td.css('box-shadow', 'inset 0 0 0 2px #60a5fa');
-
 
1930
});
-
 
1931
 
-
 
1932
$(document).on('dragleave', '.cal-grid td', function () {
-
 
1933
	$(this).css('box-shadow', '');
-
 
1934
});
-
 
1935
 
-
 
1936
$(document).on('drop', '.cal-grid td', function (e) {
-
 
1937
	var $td = $(this);
-
 
1938
	$td.css('box-shadow', '');
-
 
1939
	if ($td.hasClass('past') || $td.hasClass('blocked') || $td.hasClass('holiday') || $td.hasClass('sunday')) return;
-
 
1940
	e.preventDefault();
-
 
1941
 
-
 
1942
	var raw;
-
 
1943
	try {
-
 
1944
		raw = e.originalEvent.dataTransfer.getData('text/plain');
-
 
1945
	} catch (_) {
-
 
1946
		return;
-
 
1947
	}
-
 
1948
	if (!raw) return;
-
 
1949
	var data;
-
 
1950
	try {
-
 
1951
		data = JSON.parse(raw);
-
 
1952
	} catch (_) {
-
 
1953
		return;
-
 
1954
	}
-
 
1955
	if (!data.pg || !data.fromDate) return;
-
 
1956
 
-
 
1957
	var toDate = $td.data('date');
-
 
1958
	if (!toDate || toDate === data.fromDate) return;
-
 
1959
 
-
 
1960
	$.ajax({
-
 
1961
		url: context + "/beatPlan/moveScheduleDate", type: "POST",
-
 
1962
		data: {planGroupId: data.pg, fromDate: data.fromDate, toDate: String(toDate)},
-
 
1963
		success: function () {
-
 
1964
			loadCalendarData();
-
 
1965
		},
-
 
1966
		error: function (xhr) {
-
 
1967
			var msg = 'Move failed';
-
 
1968
			try {
-
 
1969
				var err = JSON.parse(xhr.responseText);
-
 
1970
				if (err && err.response) {
-
 
1971
					if (typeof err.response === 'string') msg = err.response;
-
 
1972
					else if (err.response.message) msg = err.response.message;
-
 
1973
				}
-
 
1974
			} catch (_) {
-
 
1975
			}
-
 
1976
			alert(msg);
-
 
1977
		}
-
 
1978
	});
-
 
1979
});
-
 
1980
 
1903
// ============ DELETE BEAT ============
1981
// ============ DELETE BEAT ============
1904
function deleteBeat(planGroupId) {
1982
function deleteBeat(planGroupId) {
1905
	if (!confirm('Delete this beat? This cannot be undone.')) return;
1983
	if (!confirm('Delete this beat? This cannot be undone.')) return;
1906
	$.ajax({
1984
	$.ajax({
1907
		url: context + "/beatPlan/delete", type: "POST",
1985
		url: context + "/beatPlan/delete", type: "POST",