Subversion Repositories SmartDukaan

Rev

Rev 29915 | Rev 30599 | 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;
210
	let createOfferRequest = {};
211
	createOfferRequest['name'] = $("#offer_name").val();
212
	createOfferRequest['startDate'] = startDate;
213
	createOfferRequest['endDate'] = endDate;
214
	createOfferRequest['offerNotes'] = $("#offer_notes").val();
215
	createOfferRequest['baseCriteria'] = $("input[name=base_criteria]").is(":checked");
216
	createOfferRequest['terms'] = ckEditor.getData() //$("#offer_terms").val();
217
	createOfferRequest['targetType'] = $("input[name=targetType]:checked").val();
218
	createOfferRequest['payoutType'] = $("input[name=payoutType]:checked").val();
219
	createOfferRequest['schemeType'] = $("input[name=schemeType]:checked").val();
220
	if (createOfferRequest['schemeType'] == 'ACTIVATION') {
221
		createOfferRequest['activationBrands'] = $("div.activation-brands select").val().join(",") || null;
222
	} else {
223
		createOfferRequest['activationBrands'] = null;
27875 amit.gupta 224
 
30485 tejbeer 225
	}
226
	createOfferRequest['sellinPercentage'] = $("#sellinPercentage").val();
227
	createOfferRequest['brandShareTerms'] = $('#brandShare').val();
228
	createOfferRequest['partnerCriteria'] = {};
229
	createOfferRequest['partnerCriteria']['fofoIds'] = ($("#partners").val() || []).map(Number);
230
	createOfferRequest['partnerCriteria']['partnerTypes'] = ($("select.criteria-partner-type").val() || []);
231
	createOfferRequest['partnerCriteria']['regionIds'] = ($("select.criteria-warehouseregion").val() || []).map(Number);
27875 amit.gupta 232
 
30485 tejbeer 233
	createOfferRequest['itemCriteria'] = itemCriteria($('div.itemCriteria'));
234
	let targetSlabs = [];
235
	$('div.targetslabs').each(function(index, ele) {
236
		let $targetSlab = $(ele);
237
		let targetOnwardsValue = $targetSlab.find('.payoutTarget').val();
238
		let targetDescription = $targetSlab.find('.targetDescription').val();
239
		let itemCriteriaPayouts = [];
240
		if (isNaN(targetOnwardsValue) || targetOnwardsValue < 0) {
241
			validated = false;
242
			alert(`Invalid Number - ${targetOnwardsValue}`);
243
		} else {
244
			if (index == 0 || targetOnwardsValue > 0) {
245
				let $itemCriteriaPayoutContainers = $targetSlab.find('.itemcriteriapayout');
246
				$itemCriteriaPayoutContainers.each(function(index, itemCriteriaPayoutContainer) {
247
					let $itemCriteriaPayoutContainer = $(itemCriteriaPayoutContainer);
248
					let amountType = $itemCriteriaPayoutContainer.find('input[name^=amountType]:checked').val();
249
					let payoutSlabs = [];
250
					let itemCriteria1 = itemCriteria($itemCriteriaPayoutContainer);
251
					let $payoutSlabContainers = $itemCriteriaPayoutContainer.find('.slab');
252
					let itemCriteriaChanged = itemCriteria1['smartPhone'] || itemCriteria1['featuredPhone']
253
						|| itemCriteria1['catalogIds'].length > 0 || itemCriteria1['brands'].length > 0
254
						|| itemCriteria1['excludeCatalogIds'].length > 0
255
						|| itemCriteria1['startPrice'] > 0 || itemCriteria1['endPrice'] > itemCriteria1['startPrice'] > 0;
256
					if (itemCriteriaChanged || index == 0) {
257
						$payoutSlabContainers.each(function(slabContainerIndex, slabContainer) {
258
							let $slab = $(slabContainer);
259
 
260
							let slabOnwardsAmount = $slab.find('.slabOnwardsAmount').val();
261
							if (isNaN(slabOnwardsAmount) || slabOnwardsAmount < 0) {
262
								validated = false;
263
								alert(`Invalid Payout Slab Amount - ${slabOnwardsAmount}`);
264
							} else {
265
								if (slabContainerIndex == 0 || slabOnwardsAmount > 0) {
266
									let payoutAmount = $slab.find('.payoutValue').val();
267
									if (isNaN(payoutAmount) || payoutAmount <= 0) {
268
										validated = false;
269
										alert(`Invalid Payout Slab Amount - ${slabOnwardsAmount}`);
270
									}
271
									let payoutSlab = {
272
										onwardsAmount: Number(slabOnwardsAmount),
273
										payoutAmount: Number(payoutAmount)
274
									}
275
									payoutSlabs.push(payoutSlab);
276
								}
277
							}
278
						});
279
						let itemCriteriaPayout = {
280
							itemCriteria: itemCriteria1,
281
							payoutSlabs: payoutSlabs,
282
							amountType: amountType
283
						};
284
						itemCriteriaPayouts.push(itemCriteriaPayout);
285
					}
286
				});
287
				targetSlabs.push({
288
					onwardsAmount: targetOnwardsValue,
289
					targetDescription: targetDescription,
290
					itemCriteriaPayouts: itemCriteriaPayouts
291
				});
292
			}
293
		}
294
	});
295
	createOfferRequest['targetSlabs'] = targetSlabs;
296
	if (validated && confirm("Confirm creating scheme offer")) {
297
		console.log("Validated");
298
		console.log(createOfferRequest);
299
		doPostAjaxRequestWithJsonHandler(`${context}/createOffer`, JSON.stringify(createOfferRequest), function(response) {
300
			alert("Offer created successfully");
301
			let dt = new Date();
302
			loadOfferHistory('#main-content', new Date().toISOString().slice(0, 7));
303
		});
304
	} else {
305
		console.log("Invalid Offer");
306
	}
27875 amit.gupta 307
}
308
 
309
function itemCriteria($container) {
28018 amit.gupta 310
	let smartPhone = $container.find("input[name=smartphone]").is(":checked");
311
	let featuredPhone = $container.find("input[name=featuredphone]").is(":checked");
30485 tejbeer 312
	let catalogIds = $container.find('.criteria-catalogids').val() || [];
313
	let excludeCatalogIds = [];
314
	let excludeChecked = $container.find('input.exclude').is(':checked');
315
	if (excludeChecked) {
316
		excludeCatalogIds = catalogIds;
317
		catalogIds = [];
318
	}
319
	let brands = $container.find('.criteria-brands').val() || [];
320
	return {
321
		startPrice: Number($container.find('.startValue').val()),
322
		endPrice: Number($container.find('.endValue').val()),
323
		catalogIds: catalogIds.map(Number),
324
		excludeCatalogIds: excludeCatalogIds.map(Number),
325
		brands: brands,
326
		smartPhone: smartPhone,
327
		featuredPhone: featuredPhone
328
	};
27875 amit.gupta 329
}
330
 
331
function loadOffer(domId) {
30485 tejbeer 332
	console.log(domId);
333
	doGetAjaxRequestHandler(context + "/getCreateOffer", function(response) {
334
		$('#' + domId).html(response);
335
 
336
		DecoupledEditor
337
			.create(document.querySelector('#offer_terms'))
338
 
339
 
340
 
341
			.then(newEditor => {
342
				const toolbarContainer = document.querySelector('#toolbar-container');
343
 
344
				toolbarContainer.appendChild(newEditor.ui.view.toolbar.element);
345
 
346
				ckEditor = newEditor
347
			})
348
			.catch(error => {
349
				console.error(error);
350
			});
351
 
352
	});
27875 amit.gupta 353
}
354
function loadOfferHistory(domId, yearMonth) {
30485 tejbeer 355
	doGetAjaxRequestHandler(`${context}/offerHistory?yearMonth=${yearMonth}`, function(response) {
356
		$(domId).html(response);
357
		$(domId).find("#yearmonth").val(yearMonth);
358
	});
27875 amit.gupta 359
}
360