Subversion Repositories SmartDukaan

Rev

Rev 30485 | Rev 30651 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
30485 tejbeer 1
$(document).ready(function() {
2
	$(document).on('change', 'select.criteria-brands', function() {
27875 amit.gupta 3
		changed = true;
4
	});
30485 tejbeer 5
	$(document).on('click', ".scheme_offer", function() {
6
		loadOffer("main-content");
7
	});
8
	$(document).on('click', '#yearmonth-submit', function() {
9
		let yearMonth = $("#yearmonth").val();
10
		loadOfferHistory('#main-content', yearMonth);
27875 amit.gupta 11
 
30485 tejbeer 12
	});
27875 amit.gupta 13
 
30485 tejbeer 14
	$(document).on('click', 'a.mk_partner_view', function() {
15
		let $offerTr = $(this).closest('tr');
16
		let offerId = $offerTr.data('offerid');
17
		if (typeof (offerId) == "undefined") {
18
			offerId = $(this).closest('th').data('offerid');
19
			let idx = $(this).closest('th').data('idx');
20
			priceCircularTable.order([[parseInt(idx), 'desc']]).draw();
21
		}
22
		doGetAjaxRequestHandler(`${context}/getOfferMargins?offerId=${offerId}`, function(data) {
23
			$('#offerDescription .modal-content').html(data);
24
			$("#offerDescription").modal('show');
25
		});
26
	});
27
 
28
	$(document).on('click', 'a.mk_offer_detail', function() {
29
		let $offerTr = $(this).closest('tr');
30
		let offerId = $offerTr.data('offerid');
31
		doGetAjaxRequestHandler(`${context}\getOfferMargins?offerId=${offerId}`, function(data) {
32
			$('#offerDescription .modal-content').html(data);
33
			$("#offerDescription").modal('show');
34
		});
35
	});
36
	$(document).on('click', 'a.offer_history', function() {
37
		let dt = new Date();
38
		loadOfferHistory('#main-content', new Date().toISOString().slice(0, 7));
39
	});
40
	$(document).on('click', 'input.create-offer', function() {
41
		console.log("Click called");
42
		createOfferNew();
43
	});
44
 
45
	$(document).on('click', 'a.download_offer', function() {
46
		let $offerTr = $(this).closest('tr');
47
		let offerId = $offerTr.data('offerid');
48
		let fileName = `offer-${$offerTr.find('td:first')}.csv`;
49
		doAjaxGetDownload(`${context}\offerDownload?offerId=${offerId}`, fileName);
50
	});
51
 
52
	$(document).on('change', 'input[name=schemeType]', function() {
53
		if ($('input[name=schemeType]:checked').val() == 'ACTIVATION') {
27875 amit.gupta 54
			$("div.activation-brands").show();
55
		} else {
56
			$("div.activation-brands").hide();
57
		}
30485 tejbeer 58
	});
59
	$(document).on('change', 'input[name^=amountType]', function() {
60
		let holder1 = "Qty";
27875 amit.gupta 61
		let holder2 = "pc(s) onwards, ";
30485 tejbeer 62
		let holder3 = "% of value";
63
		if ($(this).val() == "FIXED") {
64
			holder3 = "per pc";
65
		} else if ($(this).val() == "SLAB_FIXED") {
66
			holder3 = "";
67
		}
68
		let slabHtml = `<div class="input-group slab">
27875 amit.gupta 69
        	<span class="input-group-addon">${holder1}</span>
70
        	<input  type="text" class="slabOnwardsAmount form-control"  value="0"/>
71
        	<span class="input-group-addon">${holder2}</span>
72
        	<input type="text" class="form-control payoutValue"  value="0"/>
73
        	<span class="input-group-addon">${holder3}</span>
74
        	</div>`;
30485 tejbeer 75
		$(this).closest('.itemcriteriapayout').find('div.slab-container').html(slabHtml.repeat(9));
76
		//targetSlabTemplate = $('div.targetslabs').get(0).outerHTML;
77
	});
27875 amit.gupta 78
});
79
function changeTargetType() {
80
	let holder1 = "Rs.";
81
	let holder2 = "onwards,";
27895 amit.gupta 82
	if ($(this).val() == "QUANTITY") {
83
		holder1 = "Qty";
84
		holder2 = "pc(s) onwards, ";
85
	}
86
	let targetHtml = `<span class="input-group-addon">${holder1}</span>
87
                                    <input type="text" style="width:100px" class="form-control payoutTarget" value="0">
88
                                    <span class="input-group-addon">${holder2}</span>
89
                                    <input type="text" class="form-control targetDescription" placeholder="Description">`;
90
	$('div.targetContainer').html(targetHtml);
91
}
92
function changePayoutType() {
93
	let holder1 = "Rs.";
94
	let holder2 = "onwards,";
27875 amit.gupta 95
	let holder3 = "% of value";
96
	$allSlabContainers = $('div.slab-container');
30485 tejbeer 97
	$('div.slab-payout input:radio[value="PERCENTAGE"]').prop('checked', true);
98
	if ($(this).val() == "QUANTITY") {
99
		holder1 = "Qty";
100
		holder2 = "pc(s) onwards, ";
101
		$('div.slab-payout input:radio[value!="PERCENTAGE"]').prop('checked', false).prop('disabled', false);
102
	} else {
103
		$('div.slab-payout input:radio[value!="PERCENTAGE"]').prop('checked', false).prop('disabled', true);
104
	}
105
	let slabHtml = `<div class="input-group slab">
27875 amit.gupta 106
    	<span class="input-group-addon">${holder1}</span>
107
    	<input  type="text" class="slabOnwardsAmount form-control"  value="0"/>
108
    	<span class="input-group-addon">${holder2}</span>
109
    	<input type="text" class="form-control payoutValue"  value="0"/>
110
    	<span class="input-group-addon">${holder3}</span>
111
    	</div>`;
30485 tejbeer 112
	$allSlabContainers.html(slabHtml.repeat(9));
27875 amit.gupta 113
}
30485 tejbeer 114
$(document).on('click', 'a.mk_offer_active', function() {
29915 amit.gupta 115
	$clicked = $(this);
116
	let offerId = $clicked.closest('tr').data("offerid");
30485 tejbeer 117
	if (confirm(`Are you sure want to activate ${offerId}?`)) {
118
		doGetAjaxRequestHandler(`${context}/offer/active/${offerId}`, function(response) {
29915 amit.gupta 119
			alert("Offer is now active");
120
			$clicked.closest("li").html(`<a class="mk_offer_inactive" href="javascript:void(0)">Mark Inactive</a>`);
30485 tejbeer 121
		});
122
	}
27875 amit.gupta 123
});
30485 tejbeer 124
$(document).on('click', 'a.mk_offer_inactive', function() {
29915 amit.gupta 125
	$clicked = $(this);
126
	let offerId = $clicked.closest('tr').data("offerid");
30485 tejbeer 127
	if (confirm(`Are you sure want to activate ${offerId}?`)) {
128
		doGetAjaxRequestHandler(`${context}/offer/active/${offerId}?active=false`, function(response) {
29915 amit.gupta 129
			alert("Offer is now inactive");
130
			$clicked.closest("li").html(`<a class="mk_offer_active" href="javascript:void(0)">Mark Active</a>`);
30485 tejbeer 131
		});
132
	}
29907 amit.gupta 133
});
30485 tejbeer 134
$(document).on('click', 'button.slab-add', function() {
27875 amit.gupta 135
	newTargetSlab = $(targetSlabTemplate);
30485 tejbeer 136
	$('div.targetslabscontainer').append(newTargetSlab);
27875 amit.gupta 137
	newTargetSlab.find("select.criteria-brands").toggle().next().remove();
30485 tejbeer 138
	newTargetSlab.find("select.criteria-brands").chosen({ no_results_text: "Oops, nothing found!" });
27875 amit.gupta 139
});
30485 tejbeer 140
$(document).on('click', 'button.slab-remove', function() {
27875 amit.gupta 141
	targetSlabContainer = $('div.targetslabscontainer');
30485 tejbeer 142
	if (targetSlabContainer.find(".targetslabs").length > 1) {
27875 amit.gupta 143
		targetSlabContainer.find(".targetslabs:last").remove();
144
	} else {
145
		alert("Cant remove single Slab");
146
	}
147
});
30485 tejbeer 148
$(document).on('click', 'button.slab-copy', function() {
27875 amit.gupta 149
	newTargetSlab = $('div.targetslabs').eq(0).clone().appendTo('div.targetslabscontainer');
27975 amit.gupta 150
	catalogIdSelectContainers = $('div.targetslabs').eq(0).find('select.criteria-catalogids');
151
	newCatalogIdSelectContainers = newTargetSlab.find('select.criteria-catalogids');
30485 tejbeer 152
	for (let i = 0; i < 9; i++) {
27975 amit.gupta 153
		let selectContainer = catalogIdSelectContainers.get(i);
154
		let newSelectContainer = newCatalogIdSelectContainers.get(i);
30485 tejbeer 155
		for (let j = 0; j < selectContainer.options.length; j++) {
27975 amit.gupta 156
			newSelectContainer.options[j].selected = selectContainer.options[j].selected;
157
		}
158
		newSelectContainer.closest('span').replaceWith(newSelectContainer);
159
		$(newSelectContainer).multiselect({
30485 tejbeer 160
			includeSelectAllOption: true,
161
			maxHeight: 400,
162
			buttonWidth: '240px',
163
			numberDisplayed: 1,
164
			nonSelectedText: 'Items',
165
			nSelectedText: ' - Items Selected',
166
			allSelectedText: 'All Items Selected',
167
			enableFiltering: true,
168
			enableCaseInsensitiveFiltering: true,
27975 amit.gupta 169
		});
170
	}
27875 amit.gupta 171
	selectContainers = newTargetSlab.find("select.criteria-brands");
30485 tejbeer 172
	selectContainers.each((y, x) => {
27875 amit.gupta 173
		$next = $(x).toggle().next();
30485 tejbeer 174
		$next.find("a.search-choice-close").each(function(index, ele) {
175
			x.options[$(ele).data('option-array-index') + 0].selected = true;
27875 amit.gupta 176
		});
177
		$next.remove();
178
	});
30485 tejbeer 179
	newTargetSlab.find("select.criteria-brands").chosen({ no_results_text: "Oops, nothing found!" });
27875 amit.gupta 180
	//createSlabFrom(currentHtml);
181
});
182
 
30485 tejbeer 183
$(document).on('click', 'select.criteria-catalogids+div > button', function() {
184
	if (changed) {
27916 amit.gupta 185
		let brands = $(this).closest('.item-criteria').find('select').val();
186
		$brandsContainer = $(this);
27875 amit.gupta 187
		var url = `${context}/entity?brands=${brands.join(",")}&categoryId=3&limit=0`;
188
		$select = $brandsContainer.closest('.item-criteria').find('.criteria-catalogids');
189
		$select.html('');
30485 tejbeer 190
		if (brands.length > 0) {
27875 amit.gupta 191
			doGetAjaxRequestHandler(url, function(response) {
192
				data = JSON.parse(response);
30485 tejbeer 193
				for (i = 0; i < data.length; i++) {
27875 amit.gupta 194
					$select.append(`<option value="${data[i].catalogId_i}">${data[i].title_s}</option>`);
195
				}
196
				$select.multiselect('rebuild');
197
			});
198
		} else {
199
			$select.html('');
200
			$select.multiselect('rebuild');
201
		}
202
		changed = !changed;
203
	}
204
});
205
 
30485 tejbeer 206
var ckEditor;
207
 
27875 amit.gupta 208
function createOfferNew() {
30485 tejbeer 209
	let validated = true;
30599 amit.gupta 210
	let rangePicker = getDatesFromPicker('input[name="dateRange"]');
30485 tejbeer 211
	let createOfferRequest = {};
212
	createOfferRequest['name'] = $("#offer_name").val();
30599 amit.gupta 213
	createOfferRequest['startDate'] = rangePicker.startDate;
214
	createOfferRequest['endDate'] = rangePicker.endDate;
30485 tejbeer 215
	createOfferRequest['offerNotes'] = $("#offer_notes").val();
216
	createOfferRequest['baseCriteria'] = $("input[name=base_criteria]").is(":checked");
217
	createOfferRequest['terms'] = ckEditor.getData() //$("#offer_terms").val();
218
	createOfferRequest['targetType'] = $("input[name=targetType]:checked").val();
219
	createOfferRequest['payoutType'] = $("input[name=payoutType]:checked").val();
220
	createOfferRequest['schemeType'] = $("input[name=schemeType]:checked").val();
221
	if (createOfferRequest['schemeType'] == 'ACTIVATION') {
222
		createOfferRequest['activationBrands'] = $("div.activation-brands select").val().join(",") || null;
223
	} else {
224
		createOfferRequest['activationBrands'] = null;
27875 amit.gupta 225
 
30485 tejbeer 226
	}
227
	createOfferRequest['sellinPercentage'] = $("#sellinPercentage").val();
228
	createOfferRequest['brandShareTerms'] = $('#brandShare').val();
229
	createOfferRequest['partnerCriteria'] = {};
230
	createOfferRequest['partnerCriteria']['fofoIds'] = ($("#partners").val() || []).map(Number);
231
	createOfferRequest['partnerCriteria']['partnerTypes'] = ($("select.criteria-partner-type").val() || []);
232
	createOfferRequest['partnerCriteria']['regionIds'] = ($("select.criteria-warehouseregion").val() || []).map(Number);
27875 amit.gupta 233
 
30485 tejbeer 234
	createOfferRequest['itemCriteria'] = itemCriteria($('div.itemCriteria'));
235
	let targetSlabs = [];
236
	$('div.targetslabs').each(function(index, ele) {
237
		let $targetSlab = $(ele);
238
		let targetOnwardsValue = $targetSlab.find('.payoutTarget').val();
239
		let targetDescription = $targetSlab.find('.targetDescription').val();
240
		let itemCriteriaPayouts = [];
241
		if (isNaN(targetOnwardsValue) || targetOnwardsValue < 0) {
242
			validated = false;
243
			alert(`Invalid Number - ${targetOnwardsValue}`);
244
		} else {
245
			if (index == 0 || targetOnwardsValue > 0) {
246
				let $itemCriteriaPayoutContainers = $targetSlab.find('.itemcriteriapayout');
247
				$itemCriteriaPayoutContainers.each(function(index, itemCriteriaPayoutContainer) {
248
					let $itemCriteriaPayoutContainer = $(itemCriteriaPayoutContainer);
249
					let amountType = $itemCriteriaPayoutContainer.find('input[name^=amountType]:checked').val();
250
					let payoutSlabs = [];
251
					let itemCriteria1 = itemCriteria($itemCriteriaPayoutContainer);
252
					let $payoutSlabContainers = $itemCriteriaPayoutContainer.find('.slab');
253
					let itemCriteriaChanged = itemCriteria1['smartPhone'] || itemCriteria1['featuredPhone']
254
						|| itemCriteria1['catalogIds'].length > 0 || itemCriteria1['brands'].length > 0
255
						|| itemCriteria1['excludeCatalogIds'].length > 0
256
						|| itemCriteria1['startPrice'] > 0 || itemCriteria1['endPrice'] > itemCriteria1['startPrice'] > 0;
257
					if (itemCriteriaChanged || index == 0) {
258
						$payoutSlabContainers.each(function(slabContainerIndex, slabContainer) {
259
							let $slab = $(slabContainer);
260
 
261
							let slabOnwardsAmount = $slab.find('.slabOnwardsAmount').val();
262
							if (isNaN(slabOnwardsAmount) || slabOnwardsAmount < 0) {
263
								validated = false;
264
								alert(`Invalid Payout Slab Amount - ${slabOnwardsAmount}`);
265
							} else {
266
								if (slabContainerIndex == 0 || slabOnwardsAmount > 0) {
267
									let payoutAmount = $slab.find('.payoutValue').val();
268
									if (isNaN(payoutAmount) || payoutAmount <= 0) {
269
										validated = false;
270
										alert(`Invalid Payout Slab Amount - ${slabOnwardsAmount}`);
271
									}
272
									let payoutSlab = {
273
										onwardsAmount: Number(slabOnwardsAmount),
274
										payoutAmount: Number(payoutAmount)
275
									}
276
									payoutSlabs.push(payoutSlab);
277
								}
278
							}
279
						});
280
						let itemCriteriaPayout = {
281
							itemCriteria: itemCriteria1,
282
							payoutSlabs: payoutSlabs,
283
							amountType: amountType
284
						};
285
						itemCriteriaPayouts.push(itemCriteriaPayout);
286
					}
287
				});
288
				targetSlabs.push({
289
					onwardsAmount: targetOnwardsValue,
290
					targetDescription: targetDescription,
291
					itemCriteriaPayouts: itemCriteriaPayouts
292
				});
293
			}
294
		}
295
	});
296
	createOfferRequest['targetSlabs'] = targetSlabs;
297
	if (validated && confirm("Confirm creating scheme offer")) {
298
		console.log("Validated");
299
		console.log(createOfferRequest);
300
		doPostAjaxRequestWithJsonHandler(`${context}/createOffer`, JSON.stringify(createOfferRequest), function(response) {
301
			alert("Offer created successfully");
302
			let dt = new Date();
303
			loadOfferHistory('#main-content', new Date().toISOString().slice(0, 7));
304
		});
305
	} else {
306
		console.log("Invalid Offer");
307
	}
27875 amit.gupta 308
}
309
 
310
function itemCriteria($container) {
28018 amit.gupta 311
	let smartPhone = $container.find("input[name=smartphone]").is(":checked");
312
	let featuredPhone = $container.find("input[name=featuredphone]").is(":checked");
30485 tejbeer 313
	let catalogIds = $container.find('.criteria-catalogids').val() || [];
314
	let excludeCatalogIds = [];
315
	let excludeChecked = $container.find('input.exclude').is(':checked');
316
	if (excludeChecked) {
317
		excludeCatalogIds = catalogIds;
318
		catalogIds = [];
319
	}
320
	let brands = $container.find('.criteria-brands').val() || [];
321
	return {
322
		startPrice: Number($container.find('.startValue').val()),
323
		endPrice: Number($container.find('.endValue').val()),
324
		catalogIds: catalogIds.map(Number),
325
		excludeCatalogIds: excludeCatalogIds.map(Number),
326
		brands: brands,
327
		smartPhone: smartPhone,
328
		featuredPhone: featuredPhone
329
	};
27875 amit.gupta 330
}
331
 
332
function loadOffer(domId) {
30485 tejbeer 333
	console.log(domId);
334
	doGetAjaxRequestHandler(context + "/getCreateOffer", function(response) {
335
		$('#' + domId).html(response);
336
 
337
		DecoupledEditor
338
			.create(document.querySelector('#offer_terms'))
339
 
340
 
341
 
342
			.then(newEditor => {
343
				const toolbarContainer = document.querySelector('#toolbar-container');
344
 
345
				toolbarContainer.appendChild(newEditor.ui.view.toolbar.element);
346
 
347
				ckEditor = newEditor
348
			})
349
			.catch(error => {
350
				console.error(error);
351
			});
352
 
353
	});
27875 amit.gupta 354
}
355
function loadOfferHistory(domId, yearMonth) {
30485 tejbeer 356
	doGetAjaxRequestHandler(`${context}/offerHistory?yearMonth=${yearMonth}`, function(response) {
357
		$(domId).html(response);
358
		$(domId).find("#yearmonth").val(yearMonth);
359
	});
27875 amit.gupta 360
}
361