Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
24417 govind 1
<script>
37498 amit 2
    // Fragment is re-injected with .html(), which re-runs this script; clear the
3
    // namespace first so handlers replace rather than stack. Must sit OUTSIDE
4
    // ready() - that callback fires async, after the top-level binds below.
5
    $(document).off('.ticket');
35606 amit 6
    $(document).ready(function () {
7
        // Cleanup for myModal (activity/message modal)
8
        $('#myModal').on('hidden.bs.modal', function (e) {
9
            $(".activity-container .modal-body").empty();
10
        });
35602 amit 11
 
35606 amit 12
        // Cleanup for theModal (edit/assign ticket modal)
13
        $('#theModal').on('hidden.bs.modal', function (e) {
14
            $("#theModal .modal-content").empty();
35602 amit 15
            $('body').removeClass('modal-open');
16
            $('.modal-backdrop').remove();
35606 amit 17
        });
35602 amit 18
 
35606 amit 19
        // Ensure backdrop is removed on any modal close
37498 amit 20
        $(document).on('hidden.bs.modal.ticket', '.modal', function () {
35606 amit 21
            if ($('.modal:visible').length === 0) {
22
                $('body').removeClass('modal-open');
23
                $('.modal-backdrop').remove();
24
            }
25
        });
26
 
35592 amit 27
        getPartnerAheadOptions($("#typeaheadpartnernameforassignee"), function (selectedPartner) {
28
            $("#assignee-ticket-search-by-partner-name").data('id', selectedPartner.partnerId);
29
            $("#assignee-partner-name-input").val(selectedPartner.partnerId);
30
        });
31762 tejbeer 31
 
36040 ranu 32
        // Quick filter functionality for table
33
        initTableQuickFilter();
35592 amit 34
    });
36040 ranu 35
 
36
    // Table quick filter function
37
    function initTableQuickFilter() {
38
        var filterInput = jQuery('#table-quick-filter');
39
        var clearBtn = jQuery('#clear-quick-filter');
40
        var resultCount = jQuery('#filter-result-count');
41
 
42
        filterInput.on('keyup', function () {
43
            var searchText = jQuery(this).val().toLowerCase().trim();
44
            filterTable(searchText);
45
 
46
            // Show/hide clear button
47
            if (searchText.length > 0) {
48
                clearBtn.show();
49
            } else {
50
                clearBtn.hide();
51
                resultCount.text('');
52
            }
53
        });
54
 
55
        clearBtn.on('click', function () {
56
            filterInput.val('');
57
            filterTable('');
58
            jQuery(this).hide();
59
            resultCount.text('');
60
        });
61
    }
62
 
63
    function filterTable(searchText) {
64
        var table = jQuery('#ticket-table');
65
        var tbody = table.find('tbody');
66
        var rows = tbody.find('tr');
67
        var resultCount = jQuery('#filter-result-count');
68
        var visibleCount = 0;
69
        var totalCount = rows.length;
70
 
71
        // If no search text, show all rows
72
        if (!searchText) {
73
            rows.show();
74
            resultCount.text('');
75
            return;
76
        }
77
 
78
        // Filter rows based on search text
79
        rows.each(function () {
80
            var row = jQuery(this);
81
            var rowText = row.text().toLowerCase();
82
 
83
            // Check if any cell contains the search text
84
            if (rowText.indexOf(searchText) > -1) {
85
                row.show();
86
                visibleCount++;
87
            } else {
88
                row.hide();
89
            }
90
        });
91
 
92
        // Update result count
93
        if (visibleCount === 0) {
94
            resultCount.html('<span class="text-danger">No matches found</span>');
95
        } else {
96
            resultCount.text('Showing ' + visibleCount + ' of ' + totalCount + ' rows');
97
        }
98
    }
99
 
100
    // Re-apply filter when new content is loaded via AJAX (pagination, etc.)
37498 amit 101
    jQuery(document).on('ajaxComplete.ticket', function (event, xhr, settings) {
36040 ranu 102
        // Check if this is a ticket-related AJAX call
103
        if (settings.url && settings.url.indexOf('ticket') > -1) {
104
            var searchText = jQuery('#table-quick-filter').val();
105
            if (searchText) {
106
                // Small delay to ensure DOM is updated
107
                setTimeout(function () {
108
                    filterTable(searchText.toLowerCase().trim());
109
                }, 100);
110
            }
111
        }
112
    });
113
 
114
    // Clear filter when status or order dropdowns change (these change the dataset)
37498 amit 115
    jQuery(document).on('change.ticket', '#ticketStatus, #orderBy', function () {
36040 ranu 116
        clearQuickFilter();
117
    });
118
 
119
    function clearQuickFilter() {
120
        jQuery('#table-quick-filter').val('');
121
        jQuery('#clear-quick-filter').hide();
122
        jQuery('#filter-result-count').text('');
123
    }
24417 govind 124
</script>
35626 amit 125
<style>
126
    .pagination-wrapper {
127
        display: flex;
128
        align-items: center;
129
        justify-content: space-between;
130
        padding: 10px 0;
131
        flex-wrap: wrap;
132
    }
133
    .pagination-wrapper .pagination {
134
        margin: 0;
135
    }
136
    .pagination-wrapper .page-size-select {
137
        width: auto;
138
        display: inline-block;
139
    }
140
    .pagination-info {
141
        color: #666;
142
    }
143
    .search-form {
144
        margin-bottom: 15px;
145
    }
146
    .search-form .form-group {
147
        margin-bottom: 0;
148
    }
149
    tr.ticket-unread {
150
        background-color: #f0f7ff !important;
151
        font-weight: bold;
152
    }
153
    tr.ticket-unread td {
154
        font-weight: bold;
155
    }
156
    .unread-badge {
157
        display: inline-block;
158
        width: 8px;
159
        height: 8px;
160
        background-color: #007bff;
161
        border-radius: 50%;
162
        margin-right: 4px;
163
        vertical-align: middle;
164
    }
165
    .last-activity-preview {
166
        font-size: 11px;
167
        color: #666;
168
        font-weight: normal;
169
        display: block;
170
        white-space: nowrap;
171
        overflow: hidden;
172
        text-overflow: ellipsis;
173
        max-width: 200px;
174
    }
36040 ranu 175
 
176
    /* Quick filter styles */
177
    #table-quick-filter {
178
        border-left: none;
179
    }
180
 
181
    #table-quick-filter:focus {
182
        border-color: #66afe9;
183
        box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
184
    }
185
 
186
    #clear-quick-filter {
187
        border-left: none;
188
    }
189
 
190
    .input-group-addon {
191
        background-color: #fff;
192
        border-right: none;
193
    }
194
 
195
    #filter-result-count {
196
        font-size: 13px;
197
    }
198
 
199
    #ticket-table tbody tr.filter-highlight td {
200
        background-color: #fff3cd !important;
201
    }
35626 amit 202
</style>
35571 amit 203
#parse("activity-modal-styles.vm")
24417 govind 204
<section class="wrapper">
35592 amit 205
    <div class="row">
206
        <div class="col-lg-12">
207
            <h3 class="page-header"><i class="icon_document_alt"></i>TICKET</h3>
208
            <ol class="breadcrumb">
209
                <li><i class="fa fa-home"></i><a href="${rc.contextPath}/dashboard">Home</a></li>
210
                <li><i class="icon_document_alt"></i>My Ticket</li>
211
            </ol>
212
        </div>
213
    </div>
35626 amit 214
 
215
    ## Search Form
216
    <div class="row search-form">
217
        <div class="col-lg-12">
36040 ranu 218
            #*<form id="ticket-search-form" class="form-inline" onsubmit="return false;">
35626 amit 219
                <div class="form-group">
220
                    <input type="text" id="ticket-search-input" class="form-control" style="width: 300px;"
221
                           placeholder="Search ticket ID, partner, category, creator..."
222
                           value="$!searchText">
223
                </div>
224
                <button type="submit" class="btn btn-primary" id="ticket-search-btn">Search</button>
225
                <a href="javascript:void(0)" class="btn btn-default" id="ticket-search-clear"
226
                   style="#if(!$searchText || $searchText == '')display:none;#end">Clear</a>
36040 ranu 227
            </form>*#
228
            <div class="row" style="margin-bottom: 10px;">
229
                <div class="col-lg-4">
230
                    <div class="input-group">
231
                        <span class="input-group-addon"><i class="fa fa-search"></i></span>
232
                        <input type="text" id="table-quick-filter" class="form-control"
233
                               placeholder="Filter current page...">
234
                        <span class="input-group-btn">
235
                    <button class="btn btn-default" type="button" id="clear-quick-filter" style="display:none;">
236
                        <i class="fa fa-times"></i>
237
                    </button>
238
                </span>
239
                    </div>
240
                </div>
241
                <div class="col-lg-2">
242
                    <span id="filter-result-count" class="text-muted" style="line-height: 34px;"></span>
243
                </div>
244
            </div>
35626 amit 245
        </div>
246
    </div>
247
 
35592 amit 248
    <div class="row">
249
        <div class="col-lg-2 form-group">
250
            <select class="form-control input-sm" id="ticketStatus" name="ticketStatus" placeholder="Type">
251
                #foreach($ticketStatus in $ticketStatusValues)
252
                    #if($ticketStatus=="RESOLVED")
253
                        #if($roleType)
254
                            #if($selectedticketStatus==$ticketStatus)
255
                                <option value="$ticketStatus" selected>$ticketStatus</option>
256
                            #else
257
                                <option value="$ticketStatus">$ticketStatus</option>
258
                            #end
259
                        #end
260
                    #else
261
                        #if($selectedticketStatus==$ticketStatus)
262
                            <option value="$ticketStatus" selected>$ticketStatus</option>
263
                        #else
264
                            <option value="$ticketStatus">$ticketStatus</option>
265
                        #end
266
                    #end
267
                #end
268
            </select>
269
        </div>
270
        <div class="col-lg-2 form-group">
271
            <select class="form-control input-sm" id="orderBy" name="orderBy" placeholder="Type">
272
                #foreach($orderby in $orderByValues)
273
                    #if($orderby=="UNSORTED")
274
                    #else
275
                        #if($selectedorderby==$orderby)
276
                            #if($orderby=="ASCENDING")
277
                                <option value="$orderby" selected>OLD TO NEW</option>
278
                            #else
279
                                <option value="$orderby" selected>NEW TO OLD</option>
280
                            #end
281
                        #else
282
                            #if($orderby=="ASCENDING")
283
                                <option value="$orderby">OLD TO NEW</option>
284
                            #else
285
                                <option value="$orderby">NEW TO OLD</option>
286
                            #end
287
                        #end
288
                    #end
289
                #end
290
            </select>
291
        </div>
292
        #if($roleType)
293
        <div class="col-lg-6 form-group pull-right">
36040 ranu 294
            ## Quick Filter for Table
295
 
296
            #*<div class="col-lg-6">
35592 amit 297
                <select class="form-control" id="assigneesearchType" name="assigneesearchType"
298
                        placeholder="Search Type">
299
                    <option value="" disabled selected>Search Type</option>
300
                    #foreach($searchType1 in $ticketSearchTypes)
301
                        #if($ticketSearchType.getValue()==$searchType1.getValue())
302
                            <option value="$searchType1" selected>$ticketSearchType.getValue()</option>
303
                        #else
304
                            <option value="$searchType1">$searchType1.getValue()</option>
305
                        #end
306
                    #end
307
                </select>
36040 ranu 308
            </div>*#
35592 amit 309
 
310
 
36040 ranu 311
            #*<div class="col-lg-6">
35592 amit 312
                <input type="hidden" id="assignee-partner-name-input" name="assignee-partner-name-input" value="">
313
                <div class="assigneebyPartnerName" style="display: none;">
314
                    <div class="input-group">
315
                        <input placeholder="Partner Name" type="text" class="typeahead form-control"
316
                               id="typeaheadpartnernameforassignee" value="" name="Item" data-provide="typeahead"
317
                               autocomplete="off">
318
                        <span class="input-group-btn">
319
	      			<button class="btn btn-primary" id="assignee-ticket-search-by-partner-name" type="button"
320
                            data-id="">Go!</button>
24787 govind 321
	    		</span>
35592 amit 322
                    </div>
323
                </div>
324
                <div class="assigneebyTicketId" style="display: none;">
325
                    <div class="input-group">
326
                        <input placeholder="Ticket Id" type="text" class="form-control" id="assignee-search-by-ticketId"
327
                               value="">
328
                        <span class="input-group-btn">
329
	      			<button class="btn btn-primary" id="assignee-retailer-details-search-button-by-ticketId"
330
                            type="button">Go!</button>
24787 govind 331
	    		</span>
35592 amit 332
                    </div>
333
                </div>
36040 ranu 334
            </div>*#
35592 amit 335
        #end
24417 govind 336
    </div>
35592 amit 337
    </div>
31762 tejbeer 338
 
36040 ranu 339
 
35626 amit 340
    <div id="ticket-content-area">
341
    #parse("ticket-content.vm")
35592 amit 342
    </div>
343
 
344
</section>
24417 govind 345
<div id="ticket-details-container" style="background:white;background-color:white;">
346
</div>
35571 amit 347
#set($showFileUpload = true)
348
#parse("activity-modal.vm")
35594 amit 349
 
350
## Edit ticket modal for CRM users to assign tickets
351
#if($isCrmUser)
352
<div class="edit-container">
35602 amit 353
    <div class="modal fade text-center" id="theModal" tabindex="-1" role="dialog" data-backdrop="true" data-keyboard="true">
354
        <div class="modal-dialog" role="document">
35594 amit 355
            <div class="modal-content">
356
            </div>
357
        </div>
358
    </div>
359
</div>
360
#end