Subversion Repositories SmartDukaan

Rev

Rev 27879 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
27875 amit.gupta 1
$(document).ready(function () {
2
	$(document).on('change','select.criteria-brands', function() {
3
		changed = true;
4
	});
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);
11
 
12
    });
13
 
14
    $(document).on('click', 'a.mk_offer_detail', function() {
15
    	let $offerTr = $(this).closest('tr');
16
        let offerId = $offerTr.data('offerid');
17
        doGetAjaxRequestHandler(`${context}\offer-details?offerId=${offerId}`, function(data) {
18
        	$('#offerDescription .modal-content').html(data);
19
        	$("#offerDescription").modal('show');
20
        });
21
    });
22
    $(document).on('click', 'a.offer_history', function () {
23
        let dt = new Date();
24
        loadOfferHistory('#main-content', new Date().toISOString().slice(0,7));
25
    });
26
    $(document).on('click', 'input.create-offer', function () {
27
        console.log("Click called");
28
        createOfferNew();
29
    });
30
 
31
    $(document).on('click', 'a.download_offer', function () {
32
        let $offerTr = $(this).closest('tr');
33
        let offerId = $offerTr.data('offerid');
34
        let fileName = `offer-${$offerTr.find('td:first')}.csv`;
35
        doAjaxGetDownload(`${context}\offerDownload?offerId=${offerId}`, fileName);
36
    });
37
 
38
    $(document).on('change', 'input[name=schemeType]', function () {
39
		if($('input[name=schemeType]:checked').val()=='ACTIVATION') {
40
			$("div.activation-brands").show();
41
		} else {
42
			$("div.activation-brands").hide();
43
		}
44
    });
45
    $('input[name^=amountType]').on('change', function () {
46
    	let holder1 = "Qty";
47
		let holder2 = "pc(s) onwards, ";
48
    	let holder3 = "% of value";
49
    	if($(this).val()=="FIXED") {
50
    		holder3 = "per pc";
51
    	}
52
    	let slabHtml = `<div class="input-group slab">
53
        	<span class="input-group-addon">${holder1}</span>
54
        	<input  type="text" class="slabOnwardsAmount form-control"  value="0"/>
55
        	<span class="input-group-addon">${holder2}</span>
56
        	<input type="text" class="form-control payoutValue"  value="0"/>
57
        	<span class="input-group-addon">${holder3}</span>
58
        	</div>`;
59
        $(this).closest('.itemcriteriapayout').find('div.slab-container').html(slabHtml.repeat(4));
60
        //targetSlabTemplate = $('div.targetslabs').get(0).outerHTML;
61
    });
62
});
63
function changeTargetType() {
64
	let holder1 = "Rs.";
65
	let holder2 = "onwards,";
66
	let holder3 = "% of value";
67
	$allSlabContainers = $('div.slab-container');
68
	$('div.slab-payout input:radio[value="PERCENTAGE"]').prop('checked',true);
69
    if ($(this).val() == "QUANTITY") {
70
    		holder1 = "Qty";
71
    		holder2 = "pc(s) onwards, ";
72
        	$('div.slab-payout input:radio[value="FIXED"]').prop('checked',false).prop('disabled',false);
73
    } else {
74
    	$('div.slab-payout input:radio[value="FIXED"]').prop('checked',false).prop('disabled',true);
75
    }
76
    let slabHtml = `<div class="input-group slab">
77
    	<span class="input-group-addon">${holder1}</span>
78
    	<input  type="text" class="slabOnwardsAmount form-control"  value="0"/>
79
    	<span class="input-group-addon">${holder2}</span>
80
    	<input type="text" class="form-control payoutValue"  value="0"/>
81
    	<span class="input-group-addon">${holder3}</span>
82
    	</div>`;
83
    $allSlabContainers.html(slabHtml.repeat(4));
84
}
85
$(document).on('click', 'a.mk_offer_active', function(){
86
	let spanContainer = $(this).closest('span.mk_active');
87
	let offerId = spanContainer.data("id");
88
	doGetAjaxRequestHandler(`${context}/offer/active/${offerId}`, function (response) {
89
		alert("Offer is now active");
90
		spanContainer.html("Now Active");
91
    });
92
});
93
$(document).on('click', 'button.slab-add', function(){
94
	newTargetSlab = $(targetSlabTemplate);
95
	$('div.targetslabscontainer').append(newTargetSlab);	
96
	newTargetSlab.find("select.criteria-brands").toggle().next().remove();
97
	newTargetSlab.find("select.criteria-brands").chosen({no_results_text: "Oops, nothing found!"});
98
});
99
$(document).on('click', 'button.slab-remove', function(){
100
	targetSlabContainer = $('div.targetslabscontainer');
101
	if(targetSlabContainer.find(".targetslabs").length > 1) {
102
		targetSlabContainer.find(".targetslabs:last").remove();
103
	} else {
104
		alert("Cant remove single Slab");
105
	}
106
});
107
$(document).on('click', 'button.slab-copy', function(){
108
	newTargetSlab = $('div.targetslabs').eq(0).clone().appendTo('div.targetslabscontainer');
109
	selectContainers = newTargetSlab.find("select.criteria-brands");
110
	selectContainers.each((y,x)=>{
111
		$next = $(x).toggle().next();
112
		$next.find("a.search-choice-close").each(function(index,ele){
113
			x.options[$(ele).data('option-array-index') + 0].selected=true; 
114
		});
115
		$next.remove();
116
	});
117
	newTargetSlab.find("select.criteria-brands").chosen({no_results_text: "Oops, nothing found!"});
118
	//createSlabFrom(currentHtml);
119
});
120
 
121
$(document).on('click', '.btn.multiselect', function(){
122
	if(changed) {
123
		let brands = $(this).closest('.item-criteria').find('select').val();
124
		$brandsContainer = $(this);
125
		var url = `${context}/entity?brands=${brands.join(",")}&categoryId=3&limit=0`;
126
		$select = $brandsContainer.closest('.item-criteria').find('.criteria-catalogids');
127
		$select.html('');
128
		if(brands.length > 0) {
129
			doGetAjaxRequestHandler(url, function(response) {
130
				data = JSON.parse(response);
131
				for(i = 0; i < data.length; i++) {
132
					$select.append(`<option value="${data[i].catalogId_i}">${data[i].title_s}</option>`);
133
				}
134
				$select.multiselect('rebuild');
135
			});
136
		} else {
137
			$select.html('');
138
			$select.multiselect('rebuild');
139
		}
140
		changed = !changed;
141
	}
142
});
143
 
144
function createOfferNew() {
145
    let validated = true;
146
    let createOfferRequest = {};
147
    createOfferRequest['name'] = $("#offer_name").val();
148
    createOfferRequest['startDate'] = startDate;
149
    createOfferRequest['endDate'] = endDate;
150
    createOfferRequest['offerNotes'] = $("#offer_notes").val();
151
    createOfferRequest['terms'] = $("#offer_terms").val();
152
    createOfferRequest['targetType'] = $("input[name=targetType]:checked").val();
153
    createOfferRequest['schemeType'] = $("input[name=schemeType]:checked").val();
154
    if(createOfferRequest['schemeType']=='ACTIVATION') {
155
    	createOfferRequest['activationBrands'] = $("div.activation-brands select").val().join(",") || null;
156
    } else {
157
    	createOfferRequest['activationBrands'] = null;
158
 
159
    }
160
    createOfferRequest['sellinPercentage'] = $("#sellinPercentage").val();
161
    createOfferRequest['brandShareTerms'] = $('#brandShare').val();
162
    createOfferRequest['partnerCriteria'] = {};
163
    createOfferRequest['partnerCriteria']['fofoIds'] = ($("#partners").val() || []).map(Number);
164
    createOfferRequest['partnerCriteria']['partnerTypes'] = ($("select.criteria-partner-type").val() || []);
165
    createOfferRequest['partnerCriteria']['regionIds'] = ($("select.criteria-warehouseregion").val() || []).map(Number);
166
 
167
    createOfferRequest['itemCriteria'] = itemCriteria($('div.itemCriteria'));
168
    createOfferRequest['itemCriteria']['isSmartPhone'] = $("input[name=smartphone]").is(":checked");
169
    createOfferRequest['itemCriteria']['isFeaturedPhone'] = $("input[name=featuredphone]").is(":checked");
170
    let targetSlabs = [];
171
    $('div.targetslabs').each(function (index, ele) {
172
        let $targetSlab = $(ele);
173
        let targetOnwardsValue = $targetSlab.find('.payoutTarget').val();
174
        let targetDescription = $targetSlab.find('.targetDescription').val();
175
        let itemCriteriaPayouts = [];
176
        if (isNaN(targetOnwardsValue) || targetOnwardsValue < 0) {
177
            validated = false;
178
            alert(`Invalid Number - ${targetOnwardsValue}`);
179
        } else {
180
            if (index == 0 || targetOnwardsValue > 0) {
181
                let $itemCriteriaPayoutContainers = $targetSlab.find('.itemcriteriapayout');
182
                $itemCriteriaPayoutContainers.each(function (index, itemCriteriaPayoutContainer) {
183
                    let $itemCriteriaPayoutContainer = $(itemCriteriaPayoutContainer);
184
                    let amountType = $itemCriteriaPayoutContainer.find('input[name^=amountType]:checked').val();
185
                    let payoutSlabs = [];
186
                    let itemCriteria1 = itemCriteria($itemCriteriaPayoutContainer);
187
                    let $payoutSlabContainers = $itemCriteriaPayoutContainer.find('.slab');
188
                    let itemCriteriaChanged = itemCriteria1['isSmartPhone'] || itemCriteria1['isFeaturedPhone']
189
                        && itemCriteria1['catalogIds'].length > 0 && itemCriteria1['brands'].length > 0;
190
                    if (itemCriteriaChanged || index == 0) {
191
                        $payoutSlabContainers.each(function (slabContainerIndex, slabContainer) {
192
                            let $slab = $(slabContainer);
193
 
194
                            let slabOnwardsAmount = $slab.find('.slabOnwardsAmount').val();
195
                            if (isNaN(slabOnwardsAmount) || slabOnwardsAmount < 0) {
196
                                validated = false;
197
                                alert(`Invalid Payout Slab Amount - ${slabOnwardsAmount}`);
198
                            } else {
199
                                if (slabContainerIndex == 0 || slabOnwardsAmount > 0) {
200
                                    let payoutAmount = $slab.find('.payoutValue').val();
201
                                    if (isNaN(payoutAmount) || payoutAmount <= 0) {
202
                                        validated = false;
203
                                        alert(`Invalid Payout Slab Amount - ${slabOnwardsAmount}`);
204
                                    }
205
                                    let payoutSlab = {
206
                                        onwardsAmount: Number(slabOnwardsAmount),
207
                                        payoutAmount: Number(payoutAmount)
208
                                    }
209
                                    payoutSlabs.push(payoutSlab);
210
                                }
211
                            }
212
                        });
213
                        let itemCriteriaPayout = {
214
                            itemCriteria: itemCriteria1,
215
                            payoutSlabs: payoutSlabs,
216
                            amountType: amountType
217
                        };
218
                        itemCriteriaPayouts.push(itemCriteriaPayout);
219
                    }
220
                });
221
                targetSlabs.push({
222
                    onwardsAmount: targetOnwardsValue,
223
                    targetDescription : targetDescription, 
224
                    itemCriteriaPayouts: itemCriteriaPayouts
225
                });
226
            }
227
        }
228
    });
229
    createOfferRequest['targetSlabs'] = targetSlabs;
230
    if (validated && confirm("Confirm creating scheme offer")) {
231
        console.log("Validated");
232
        console.log(createOfferRequest);
233
        doPostAjaxRequestWithJsonHandler(`${context}/createOffer`, JSON.stringify(createOfferRequest), function (response) {
234
            alert("Offer created successfully");
235
            let dt = new Date();
236
            loadOfferHistory('#main-content', new Date().toISOString().slice(0,7));
237
        });
238
    } else {
239
        console.log("Invalid Offer");
240
    }
241
}
242
 
243
function itemCriteria($container) {
244
    let catalogIds = $container.find('.criteria-catalogids').val() || [];
245
    let excludeCatalogIds = [];
246
    let excludeChecked = $container.find('input.exclude').is(':checked');
247
    if(excludeChecked) {
248
    	excludeCatalogIds = catalogIds;
249
    	catalogIds = [];
250
    }
251
    let brands = $container.find('.criteria-brands').val() || [];
252
    return {
253
        startPrice: Number($container.find('.startValue').val()),
254
        endPrice: Number($container.find('.endValue').val()),
255
        catalogIds: catalogIds.map(Number),
256
        excludeCatalogIds : excludeCatalogIds.map(Number),
257
        brands: brands,
258
        isSmartPhone: false,
259
        isFeaturedPhone: false
260
    };
261
}
262
 
263
function loadOffer(domId) {
264
    console.log(domId);
265
    doGetAjaxRequestHandler(context + "/getCreateOffer", function (response) {
266
        $('#' + domId).html(response);
267
    });
268
}
269
function loadOfferHistory(domId, yearMonth) {
270
    doGetAjaxRequestHandler(`${context}/offerHistory?yearMonth=${yearMonth}`, function (response) {
271
        $(domId).html(response);
272
        $(domId).find("#yearmonth").val(yearMonth);
273
    });
274
}
275