| Line 4... |
Line 4... |
| 4 |
}));
|
4 |
}));
|
| 5 |
$('input[name="expireSchemeById"]').daterangepicker($.extend(getSingleDatePicker(moment("$scheme.getEndDateTime()")), {
|
5 |
$('input[name="expireSchemeById"]').daterangepicker($.extend(getSingleDatePicker(moment("$scheme.getEndDateTime()")), {
|
| 6 |
"drops": "up",
|
6 |
"drops": "up",
|
| 7 |
}));
|
7 |
}));
|
| 8 |
|
8 |
|
| 9 |
$(".add-scheme").click(function () {
|
9 |
$(document).off('click.addScheme').on('click.addScheme', ".add-scheme", function () {
|
| 10 |
$("#newItemToSchemeModal").modal({backdrop: false});
|
10 |
$("#newItemToSchemeModal").modal({backdrop: true, show: true});
|
| 11 |
});
|
11 |
});
|
| 12 |
$("#newItemToSchemeModal").on('hidden.bs.modal', function () {
|
12 |
$(document).off('hidden.bs.modal.addScheme').on('hidden.bs.modal.addScheme', '#newItemToSchemeModal', function () {
|
| 13 |
$("#addSchemeForm").trigger("reset");
|
13 |
$("#addSchemeForm").trigger("reset");
|
| 14 |
});
|
14 |
});
|
| - |
|
15 |
|
| - |
|
16 |
// Edit scheme item date window
|
| - |
|
17 |
$(document).on('click', '.edit-item-dates', function () {
|
| - |
|
18 |
var row = $(this).closest('tr');
|
| - |
|
19 |
row.find('.date-display').hide();
|
| - |
|
20 |
row.find('.date-edit').show();
|
| - |
|
21 |
row.find('.edit-item-dates').hide();
|
| - |
|
22 |
row.find('.save-item-dates, .cancel-item-dates').show();
|
| - |
|
23 |
|
| - |
|
24 |
// Initialize daterangepicker on the inline inputs
|
| - |
|
25 |
var startInput = row.find('.edit-start-date');
|
| - |
|
26 |
var endInput = row.find('.edit-end-date');
|
| - |
|
27 |
if (!startInput.data('daterangepicker')) {
|
| - |
|
28 |
var startVal = startInput.val() ? moment(startInput.val(), 'DD/MM/YYYY') : moment("$scheme.getStartDateTime()");
|
| - |
|
29 |
var endVal = endInput.val() ? moment(endInput.val(), 'DD/MM/YYYY') : moment("$scheme.getEndDateTime()");
|
| - |
|
30 |
startInput.daterangepicker($.extend(getSingleDatePicker(startVal), {"drops": "down"}));
|
| - |
|
31 |
endInput.daterangepicker($.extend(getSingleDatePicker(endVal), {"drops": "down"}));
|
| - |
|
32 |
}
|
| - |
|
33 |
});
|
| - |
|
34 |
|
| - |
|
35 |
$(document).on('click', '.cancel-item-dates', function () {
|
| - |
|
36 |
var row = $(this).closest('tr');
|
| - |
|
37 |
row.find('.date-display').show();
|
| - |
|
38 |
row.find('.date-edit').hide();
|
| - |
|
39 |
row.find('.edit-item-dates').show();
|
| - |
|
40 |
row.find('.save-item-dates, .cancel-item-dates').hide();
|
| - |
|
41 |
});
|
| - |
|
42 |
|
| - |
|
43 |
// Convert DD/MM/YYYY to ISO LocalDateTime format for the server
|
| - |
|
44 |
function toIsoDateTime(ddmmyyyy, endOfDay) {
|
| - |
|
45 |
var parts = ddmmyyyy.split('/');
|
| - |
|
46 |
if (parts.length !== 3) return ddmmyyyy;
|
| - |
|
47 |
var isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];
|
| - |
|
48 |
return isoDate + (endOfDay ? 'T23:59:59' : 'T00:00:00');
|
| - |
|
49 |
}
|
| - |
|
50 |
|
| - |
|
51 |
$(document).on('click', '.save-item-dates', function () {
|
| - |
|
52 |
var row = $(this).closest('tr');
|
| - |
|
53 |
var itemId = row.data('schemeitemid');
|
| - |
|
54 |
var startDate = row.find('.edit-start-date').val();
|
| - |
|
55 |
var endDate = row.find('.edit-end-date').val();
|
| - |
|
56 |
if (!startDate || !endDate) {
|
| - |
|
57 |
alert('Both start date and end date are required');
|
| - |
|
58 |
return;
|
| - |
|
59 |
}
|
| - |
|
60 |
var isoStart = toIsoDateTime(startDate, false);
|
| - |
|
61 |
var isoEnd = toIsoDateTime(endDate, true);
|
| - |
|
62 |
doPutAjaxRequestHandler('/scheme/item/window?schemeItemId=' + itemId
|
| - |
|
63 |
+ '&startDate=' + encodeURIComponent(isoStart)
|
| - |
|
64 |
+ '&endDate=' + encodeURIComponent(isoEnd),
|
| - |
|
65 |
function (response) {
|
| - |
|
66 |
loadSchemeDetails($scheme.getId(), "scheme-details-container");
|
| - |
|
67 |
});
|
| - |
|
68 |
});
|
| - |
|
69 |
|
| - |
|
70 |
// Modal: category -> brand -> model cascade
|
| - |
|
71 |
$('#newItemToSchemeModal').on('shown.bs.modal', function () {
|
| - |
|
72 |
$('input[name="addItemStartDate"]').daterangepicker($.extend(getSingleDatePicker(moment("$scheme.getStartDateTime()")), {
|
| - |
|
73 |
"drops": "down",
|
| - |
|
74 |
}));
|
| - |
|
75 |
$('input[name="addItemEndDate"]').daterangepicker($.extend(getSingleDatePicker(moment("$scheme.getEndDateTime()")), {
|
| - |
|
76 |
"drops": "down",
|
| - |
|
77 |
}));
|
| - |
|
78 |
|
| - |
|
79 |
// Load brands for default category
|
| - |
|
80 |
var catId = $('#modal-category-list').val();
|
| - |
|
81 |
if (catId) loadModalBrands(catId);
|
| - |
|
82 |
});
|
| - |
|
83 |
|
| - |
|
84 |
$('#modal-category-list').on('change', function () {
|
| - |
|
85 |
var catId = $(this).val();
|
| - |
|
86 |
if (catId) loadModalBrands(catId);
|
| - |
|
87 |
});
|
| - |
|
88 |
|
| - |
|
89 |
function loadModalBrands(categoryId) {
|
| - |
|
90 |
doGetAjaxRequestHandler(context + '/getBrandsByCategory?categoryId=' + categoryId, function (response) {
|
| - |
|
91 |
$('#modal-brand-list').html(response);
|
| - |
|
92 |
// Re-id the select so it doesn't clash with create-scheme page
|
| - |
|
93 |
$('#modal-brand-list select').attr('id', 'modal-tag-listing-brands');
|
| - |
|
94 |
$('#modal-tag-listing-brands').multiselect({
|
| - |
|
95 |
includeSelectAllOption: true,
|
| - |
|
96 |
multiple: true,
|
| - |
|
97 |
maxHeight: 200,
|
| - |
|
98 |
buttonWidth: '180px',
|
| - |
|
99 |
numberDisplayed: 1,
|
| - |
|
100 |
nonSelectedText: 'Brands',
|
| - |
|
101 |
nSelectedText: ' - Brands Selected',
|
| - |
|
102 |
allSelectedText: 'All Brands',
|
| - |
|
103 |
enableFiltering: true,
|
| - |
|
104 |
enableCaseInsensitiveFiltering: true
|
| - |
|
105 |
});
|
| - |
|
106 |
$('#modal-tag-listing-brands').on('change', function () {
|
| - |
|
107 |
var brands = $(this).val();
|
| - |
|
108 |
if (brands) loadModalModels(categoryId, brands);
|
| - |
|
109 |
});
|
| - |
|
110 |
});
|
| - |
|
111 |
}
|
| - |
|
112 |
|
| - |
|
113 |
function loadModalModels(categoryId, brands) {
|
| - |
|
114 |
var brandsString = brands.join(',');
|
| - |
|
115 |
doGetAjaxRequestHandler(context + '/getCatalogDescriptionByBrands?categoryId=' + categoryId + '&brands=' + brandsString, function (response) {
|
| - |
|
116 |
$('#modal-models-list').html(response);
|
| - |
|
117 |
$('#modal-models-list select').addClass('modalCatalogItems');
|
| - |
|
118 |
$('.modalCatalogItems').multiselect({
|
| - |
|
119 |
includeSelectAllOption: true,
|
| - |
|
120 |
maxHeight: 200,
|
| - |
|
121 |
buttonWidth: '220px',
|
| - |
|
122 |
numberDisplayed: 1,
|
| - |
|
123 |
nonSelectedText: 'Models',
|
| - |
|
124 |
nSelectedText: ' - Models Selected',
|
| - |
|
125 |
allSelectedText: 'All Models',
|
| - |
|
126 |
enableFiltering: true,
|
| - |
|
127 |
enableCaseInsensitiveFiltering: true
|
| - |
|
128 |
});
|
| - |
|
129 |
});
|
| - |
|
130 |
}
|
| 15 |
</script>
|
131 |
</script>
|
| 16 |
<h3 style="padding-left:3%;padding-top:2%;font-weight:bold;">Scheme Id : $scheme.getId()</h3>
|
132 |
<h3 style="padding-left:3%;padding-top:2%;font-weight:bold;">Scheme Id : $scheme.getId()</h3>
|
| 17 |
|
133 |
|
| 18 |
<div class="row" style="padding-left:3%;">
|
134 |
<div class="row" style="padding-left:3%;">
|
| 19 |
<div class="col-lg-12">
|
135 |
<div class="col-lg-12">
|
| Line 30... |
Line 146... |
| 30 |
#end
|
146 |
#end
|
| 31 |
</td>
|
147 |
</td>
|
| 32 |
#if($isAdmin && $fullAccess)
|
148 |
#if($isAdmin && $fullAccess)
|
| 33 |
<td>
|
149 |
<td>
|
| 34 |
<button class="btn btn-sm btn-primary add-scheme" data="$scheme.getId()"
|
150 |
<button class="btn btn-sm btn-primary add-scheme" data="$scheme.getId()"
|
| 35 |
style="width:100%;background-color:#007aff;color:white;padding-right: 10px"
|
151 |
style="width:100%;background-color:#007aff;color:white;padding-right: 10px">Add Item
|
| 36 |
data-toggle="modal" data-target="#newItemToSchemeModal">Add Item
|
- |
|
| 37 |
</button>
|
152 |
</button>
|
| 38 |
</td>
|
153 |
</td>
|
| 39 |
#end
|
154 |
#end
|
| 40 |
<tr>
|
155 |
<tr>
|
| 41 |
</table>
|
156 |
</table>
|
| 42 |
<table class="table table-striped table-advance table-hover">
|
157 |
<table class="table table-striped table-advance table-hover">
|
| 43 |
<tbody>
|
158 |
<tbody>
|
| 44 |
<tr>
|
159 |
<tr>
|
| 45 |
<th>Model ID</th>
|
160 |
<th>Model ID</th>
|
| 46 |
<th>Model Name</th>
|
161 |
<th>Model Name</th>
|
| - |
|
162 |
<th>Start Date</th>
|
| - |
|
163 |
<th>End Date</th>
|
| - |
|
164 |
<th>Updated By</th>
|
| - |
|
165 |
<th>Updated On</th>
|
| 47 |
#if($isAdmin && $fullAccess)
|
166 |
#if($isAdmin && $fullAccess)
|
| 48 |
<th>Action</th>
|
167 |
<th>Action</th>
|
| 49 |
#end
|
168 |
#end
|
| 50 |
</tr>
|
169 |
</tr>
|
| - |
|
170 |
#if($schemeItems && $schemeItems.size()>0)
|
| - |
|
171 |
#foreach( $item in $schemeItems)
|
| - |
|
172 |
<tr data-schemeitemid="$item.getId()" data-catalogid="$item.getCatalogId()">
|
| - |
|
173 |
<td>$item.getCatalogId()</td>
|
| - |
|
174 |
<td>#if($scheme.getCatalogStringMap().containsKey($item.getCatalogId()))$scheme.getCatalogStringMap().get($item.getCatalogId())#else-#end</td>
|
| - |
|
175 |
<td>
|
| - |
|
176 |
<span class="date-display">#if($item.getStartDate())$dateFormatter.format($item.getStartDate())#else-#end</span>
|
| - |
|
177 |
<input type="text" class="form-control date-edit edit-start-date" style="display:none; width:160px" value="#if($item.getStartDate())$dateFormatter.format($item.getStartDate())#end">
|
| - |
|
178 |
</td>
|
| - |
|
179 |
<td>
|
| - |
|
180 |
<span class="date-display">#if($item.getEndDate())$dateFormatter.format($item.getEndDate())#else-#end</span>
|
| - |
|
181 |
<input type="text" class="form-control date-edit edit-end-date" style="display:none; width:160px" value="#if($item.getEndDate())$dateFormatter.format($item.getEndDate())#end">
|
| - |
|
182 |
</td>
|
| - |
|
183 |
<td>#if($item.getUpdatedBy())$item.getUpdatedBy()#else-#end</td>
|
| - |
|
184 |
<td>#if($item.getUpdatedOn())$dateTimeFormatter.format($item.getUpdatedOn())#else-#end</td>
|
| - |
|
185 |
#if($isAdmin && $fullAccess)
|
| - |
|
186 |
<td>
|
| - |
|
187 |
<button class="btn btn-xs btn-info edit-item-dates">Edit</button>
|
| - |
|
188 |
<button class="btn btn-xs btn-success save-item-dates" style="display:none">Save</button>
|
| - |
|
189 |
<button class="btn btn-xs btn-default cancel-item-dates" style="display:none">Cancel</button>
|
| - |
|
190 |
<button class="btn btn-xs btn-danger delete-schemes" data-schemeid="$scheme.getId()"
|
| - |
|
191 |
data-catalogid="$item.getCatalogId()">Delete</button>
|
| - |
|
192 |
</td>
|
| - |
|
193 |
#end
|
| - |
|
194 |
</tr>
|
| - |
|
195 |
#end
|
| 51 |
#if($scheme.getCatalogStringMap().size()>0)
|
196 |
#elseif($scheme.getCatalogStringMap().size()>0)
|
| 52 |
#foreach( $catalogIdDescriptionEntry in $scheme.getCatalogStringMap().entrySet())
|
197 |
#foreach( $catalogIdDescriptionEntry in $scheme.getCatalogStringMap().entrySet())
|
| 53 |
<tr data-catalogid="$catalogIdDescriptionEntry.getKey()">
|
198 |
<tr data-catalogid="$catalogIdDescriptionEntry.getKey()">
|
| 54 |
<td>$catalogIdDescriptionEntry.getKey()</td>
|
199 |
<td>$catalogIdDescriptionEntry.getKey()</td>
|
| 55 |
<td>$catalogIdDescriptionEntry.getValue()</td>
|
200 |
<td>$catalogIdDescriptionEntry.getValue()</td>
|
| - |
|
201 |
<td colspan="4">-</td>
|
| 56 |
#if($isAdmin && $fullAccess)
|
202 |
#if($isAdmin && $fullAccess)
|
| 57 |
<td>
|
203 |
<td>
|
| 58 |
<button class="btn btn-primary delete-schemes" data-schemeid="$scheme.getId()"
|
204 |
<button class="btn btn-primary delete-schemes" data-schemeid="$scheme.getId()"
|
| 59 |
data-catalogid="$catalogIdDescriptionEntry.getKey()">Delete
|
205 |
data-catalogid="$catalogIdDescriptionEntry.getKey()">Delete
|
| 60 |
</button>
|
206 |
</button>
|
| Line 112... |
Line 258... |
| 112 |
<br><br>
|
258 |
<br><br>
|
| 113 |
#end
|
259 |
#end
|
| 114 |
#end
|
260 |
#end
|
| 115 |
#end
|
261 |
#end
|
| 116 |
</div>
|
262 |
</div>
|
| 117 |
<div id="newItemToSchemeModal" class="modal" role="dialog">
|
263 |
<div id="newItemToSchemeModal" class="modal fade" role="dialog" tabindex="-1">
|
| 118 |
<div class="modal-dialog">
|
264 |
<div class="modal-dialog modal-lg">
|
| 119 |
|
- |
|
| 120 |
<!-- Modal content-->
|
- |
|
| 121 |
<div class="modal-content">
|
265 |
<div class="modal-content">
|
| 122 |
<div class="modal-header">
|
266 |
<div class="modal-header">
|
| 123 |
<button type="button" class="close" data-dismiss="modal">×</button>
|
267 |
<button type="button" class="close" data-dismiss="modal">×</button>
|
| 124 |
<h4 class="modal-title"><b>Add Item To Scheme</b></h4>
|
268 |
<h4 class="modal-title"><b>Add Item To Scheme (ID: $scheme.getId())</b></h4>
|
| 125 |
</div>
|
269 |
</div>
|
| 126 |
<div class="modal-body">
|
270 |
<div class="modal-body">
|
| 127 |
<form id="addSchemeForm">
|
271 |
<form id="addSchemeForm">
|
| - |
|
272 |
<input type="hidden" value="$scheme.getId()" id="schemeids">
|
| 128 |
<div class="form-group row">
|
273 |
<div class="row">
|
| 129 |
<div class="col-lg-4" style="display: none;">
|
274 |
<div class="col-lg-4">
|
| 130 |
<label for="schemeId">SchemeId</label>
|
275 |
<div class="form-group">
|
| - |
|
276 |
<label><b>Category</b> <span style="color:red">*</span></label>
|
| 131 |
<input type="number" class="form-control" value="$scheme.getId()" id="schemeids"
|
277 |
<select class="form-control input-sm" id="modal-category-list">
|
| - |
|
278 |
#foreach($category in $categories)
|
| - |
|
279 |
<option value="$category.getId()">$category.getLabel()</option>
|
| 132 |
readonly>
|
280 |
#end
|
| - |
|
281 |
</select>
|
| - |
|
282 |
</div>
|
| - |
|
283 |
</div>
|
| - |
|
284 |
<div class="col-lg-4">
|
| - |
|
285 |
<div class="form-group">
|
| - |
|
286 |
<label><b>Brands</b> <span style="color:red">*</span></label>
|
| - |
|
287 |
<div id="modal-brand-list"></div>
|
| - |
|
288 |
</div>
|
| 133 |
</div>
|
289 |
</div>
|
| 134 |
<div class="col-lg-4">
|
290 |
<div class="col-lg-4">
|
| - |
|
291 |
<div class="form-group">
|
| - |
|
292 |
<label><b>Models</b> <span style="color:red">*</span></label>
|
| 135 |
<label for="ItemId"><b>ItemId</b></label>
|
293 |
<div id="modal-models-list">
|
| - |
|
294 |
<select class="form-control modalCatalogItems" multiple="multiple"></select>
|
| - |
|
295 |
</div>
|
| - |
|
296 |
</div>
|
| - |
|
297 |
</div>
|
| - |
|
298 |
</div>
|
| - |
|
299 |
<div class="row">
|
| - |
|
300 |
<div class="col-lg-6">
|
| - |
|
301 |
<div class="form-group">
|
| - |
|
302 |
<label><b>Start Date</b> <small>(optional, defaults to scheme start: $dateFormatter.format($scheme.getStartDateTime()))</small></label>
|
| - |
|
303 |
<input type="text" class="form-control" id="addItemStartDate" name="addItemStartDate" placeholder="dd/mm/yyyy"/>
|
| - |
|
304 |
</div>
|
| - |
|
305 |
</div>
|
| - |
|
306 |
<div class="col-lg-6">
|
| - |
|
307 |
<div class="form-group">
|
| - |
|
308 |
<label><b>End Date</b> <small>(optional, defaults to scheme end: $dateFormatter.format($scheme.getEndDateTime()))</small></label>
|
| 136 |
<input type="text" class="form-control" id="catalogids" placeholder="Item Id"/>
|
309 |
<input type="text" class="form-control" id="addItemEndDate" name="addItemEndDate" placeholder="dd/mm/yyyy"/>
|
| - |
|
310 |
</div>
|
| 137 |
</div>
|
311 |
</div>
|
| 138 |
</div>
|
312 |
</div>
|
| - |
|
313 |
<div class="alert alert-info" style="margin-top:5px; padding:8px;">
|
| - |
|
314 |
Item dates must be within scheme window: <b>$dateFormatter.format($scheme.getStartDateTime())</b> to <b>$dateFormatter.format($scheme.getEndDateTime())</b>.
|
| - |
|
315 |
Non-overlapping windows are enforced per model within this scheme.
|
| - |
|
316 |
</div>
|
| 139 |
</form>
|
317 |
</form>
|
| 140 |
</div>
|
318 |
</div>
|
| 141 |
<div class="modal-footer">
|
319 |
<div class="modal-footer">
|
| 142 |
<button type="button" class="btn btn-primary add-item">Add-Item</button>
|
- |
|
| 143 |
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
320 |
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
| - |
|
321 |
<button type="button" class="btn btn-primary add-item">Add Item</button>
|
| 144 |
</div>
|
322 |
</div>
|
| 145 |
</div>
|
323 |
</div>
|
| 146 |
|
- |
|
| 147 |
</div>
|
324 |
</div>
|
| 148 |
</div>
|
325 |
</div>
|
| 149 |
</div>
|
326 |
</div>
|