Subversion Repositories SmartDukaan

Rev

Rev 34913 | Rev 35592 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 34913 Rev 35569
Line 1... Line 1...
1
var TEAM_ACTIVITY = ["COMMUNICATION_OUT", "COMMUNICATION_INTERNAL",
1
var TEAM_ACTIVITY = ["COMMUNICATION_OUT", "COMMUNICATION_INTERNAL",
2
	"ESCALATED", "ASSIGNED", "CATEGORY_CHANGED"];
2
	"ESCALATED", "ASSIGNED", "CATEGORY_CHANGED"];
-
 
3
 
-
 
4
// Activity type constants for consistent usage
-
 
5
var ActivityType = {
-
 
6
	OPENED: "OPENED",
-
 
7
	COMMUNICATION_IN: "COMMUNICATION_IN",
-
 
8
	COMMUNICATION_OUT: "COMMUNICATION_OUT",
-
 
9
	COMMUNICATION_INTERNAL: "COMMUNICATION_INTERNAL",
-
 
10
	RESOLVED: "RESOLVED",
-
 
11
	RESOLVED_ACCEPTED: "RESOLVED_ACCEPTED",
-
 
12
	RESOLVED_REJECTED: "RESOLVED_REJECTED",
-
 
13
	ESCALATED: "ESCALATED",
-
 
14
	ASSIGNED: "ASSIGNED",
-
 
15
	CATEGORY_CHANGED: "CATEGORY_CHANGED"
-
 
16
};
-
 
17
 
-
 
18
// Helper function to normalize boolean values from various sources
-
 
19
function toBool(val) {
-
 
20
	return val === true || val === "true";
-
 
21
}
-
 
22
 
-
 
23
// Helper function to escape HTML and prevent XSS
-
 
24
function escapeHtml(text) {
-
 
25
	if (text == null) return '';
-
 
26
	var div = document.createElement('div');
-
 
27
	div.textContent = text;
-
 
28
	return div.innerHTML;
-
 
29
}
-
 
30
 
3
$(function() {
31
$(function() {
4
 
32
 
5
	$(document).on('click', ".create-ticket-category", function() {
33
	$(document).on('click', ".create-ticket-category", function() {
6
		console.log("create ticket category clicked......");
34
		console.log("create ticket category clicked......");
7
		loadCreateCategory("main-content");
35
		loadCreateCategory("main-content");
Line 232... Line 260...
232
	$(document).on('click', "#activities", function() {
260
	$(document).on('click', "#activities", function() {
233
		var ticketId = $(this).data('ticketid');
261
		var ticketId = $(this).data('ticketid');
234
		var assignee = $(this).data('assignee');
262
		var assignee = $(this).data('assignee');
235
		var internal = $(this).data('internal');
263
		var internal = $(this).data('internal');
236
		var roleType = $(this).data('role');
264
		var roleType = $(this).data('role');
-
 
265
		var isCrmUser = $(this).data('crm');
237
		console.log(assignee);
266
		console.log(assignee);
238
		loadActivities(ticketId, assignee, internal, roleType);
267
		loadActivities(ticketId, assignee, internal, roleType, isCrmUser);
239
	});
268
	});
240
	$(document).on('click', ".my-ticket", function() {
269
	$(document).on('click', ".my-ticket", function() {
241
		loadMyTicket("main-content", null, null, null, null, null);
270
		loadMyTicket("main-content", null, null, null, null, null);
242
	});
271
	});
243
	$(document).on('click', "#close-ticket", function() {
272
	$(document).on('click', "#close-ticket", function() {
Line 260... Line 289...
260
				return false;
289
				return false;
261
			}
290
			}
262
			var ticketId = $("#ticketIdforactivity").val();
291
			var ticketId = $("#ticketIdforactivity").val();
263
			var assignee = $("#assigneeUser").val();
292
			var assignee = $("#assigneeUser").val();
264
			var roleType = $("#role").val();
293
			var roleType = $("#role").val();
-
 
294
			var isCrmUser = $("#crmUser").val();
265
			count = 0;
295
			count = 0;
266
			console.log(message, ticketId, assignee);
296
			console.log(message, ticketId, assignee);
267
 
297
 
268
			createActivity(message, ticketId, assignee, internal, roleType,
298
			createActivity(message, ticketId, assignee, internal, roleType, isCrmUser,
269
				documentIds);
299
				documentIds);
270
		});
300
		});
271
 
301
 
272
	$(document).on('click', ".uploadFile", function() {
302
	$(document).on('click', ".uploadFile", function() {
273
		$("#file1").trigger('click');
303
		$("#file1").trigger('click');
Line 1187... Line 1217...
1187
				alert("Position created successfully");
1217
				alert("Position created successfully");
1188
				loadCreatePosition(domId);
1218
				loadCreatePosition(domId);
1189
			}
1219
			}
1190
		});
1220
		});
1191
}
1221
}
1192
function createActivity(message, ticketId, assigneeId, internal, roleType,
1222
function createActivity(message, ticketId, assigneeId, internal, roleType, isCrmUser,
1193
	documentIds) {
1223
	documentIds) {
1194
 
1224
 
1195
	var params = {
1225
	var params = {
1196
		"message": message,
1226
		"message": message,
1197
		"ticketId": ticketId,
1227
		"ticketId": ticketId,
Line 1215... Line 1245...
1215
		documentIds.splice(0, documentIds.length);
1245
		documentIds.splice(0, documentIds.length);
1216
 
1246
 
1217
		console.log(documentIds)
1247
		console.log(documentIds)
1218
		$(".fileList li").remove();
1248
		$(".fileList li").remove();
1219
		var assigneeName = response.firstName;
1249
		var assigneeName = response.firstName;
1220
		loadActivities(ticketId, assigneeName, internal, roleType)
1250
		loadActivities(ticketId, assigneeName, internal, roleType, isCrmUser)
1221
	});
1251
	});
1222
}
1252
}
1223
function loadEditTicket(ticketId) {
1253
function loadEditTicket(ticketId) {
1224
	doGetAjaxRequestHandler(context + "/cs/edit-ticket?ticketId=" + ticketId,
1254
	doGetAjaxRequestHandler(context + "/cs/edit-ticket?ticketId=" + ticketId,
1225
		function(response) {
1255
		function(response) {
Line 1254... Line 1284...
1254
		response) {
1284
		response) {
1255
		$('#' + domId).html(response);
1285
		$('#' + domId).html(response);
1256
	});
1286
	});
1257
}
1287
}
1258
 
1288
 
1259
function loadActivities(ticketId, assignee, internal, roleType) {
1289
function loadActivities(ticketId, assignee, internal, roleType, isCrmUser) {
1260
 
1290
 
1261
	$(".activity-container .modal-body").empty();
1291
	// Show loading spinner
-
 
1292
	$(".activity-container .modal-body").html('<div class="text-center" style="padding:20px;"><i class="fa fa-spinner fa-spin fa-2x"></i><br>Loading...</div>');
1262
	$("#activityMessage").val("");
1293
	$("#activityMessage").val("");
1263
	$("#ticketIdforactivity").val(ticketId);
1294
	$("#ticketIdforactivity").val(ticketId);
1264
	$("#role").val(roleType);
1295
	$("#role").val(roleType);
-
 
1296
	$("#crmUser").val(isCrmUser);
1265
	$(".activity-container .modal-title").html(
1297
	$(".activity-container .modal-title").html(
1266
		"Activity history for Ticket Id " + ticketId)
1298
		"Activity history for Ticket Id " + ticketId)
1267
	console.log(ticketId);
1299
	console.log(ticketId);
1268
	doGetAjaxRequestHandler(
1300
	doGetAjaxRequestHandler(
1269
		context + "/cs/getActivities?ticketId=" + ticketId,
1301
		context + "/cs/getActivities?ticketId=" + ticketId,
1270
		function(response) {
1302
		function(response) {
-
 
1303
			$(".activity-container .modal-body").empty(); // Clear loading spinner
1271
			response = JSON.parse(response);
1304
			response = JSON.parse(response);
1272
			console.log(response);
1305
			console.log(response);
1273
 
1306
 
1274
			for (var i = 0; i < response.length; i++) {
1307
			for (var i = 0; i < response.length; i++) {
1275
				console.log(response[i].activityAttachment.length);
1308
				console.log(response[i].activityAttachment.length);
1276
				var activityAttachment = []
1309
				var activityAttachment = []
1277
				var attachments = "";
1310
				var attachments = "";
1278
				if (response[i].activityAttachment.length > 0) {
1311
				if (response[i].activityAttachment.length > 0) {
1279
					response
-
 
1280
					for (var j = 0; j < response[i].activityAttachment.length; j++) {
1312
					for (var j = 0; j < response[i].activityAttachment.length; j++) {
-
 
1313
						var docName = escapeHtml(response[i].activityAttachment[j].documentName);
1281
						var assigneeAttachment = "<a href=\"javascript:void(0)\" style=\"color:#337ab7;float:right;\"onclick=\"downloadDocument("
1314
						var assigneeAttachment = "<a href=\"javascript:void(0)\" style=\"color:#337ab7;float:right;\"onclick=\"downloadDocument("
1282
							+ response[i].activityAttachment[j].documentId
1315
							+ response[i].activityAttachment[j].documentId
1283
							+ ",\`"
1316
							+ ",\`"
1284
							+ response[i].activityAttachment[j].documentName
1317
							+ docName
1285
							+ "\`)\">"
1318
							+ "\`)\">"
1286
							+ response[i].activityAttachment[j].documentName
1319
							+ docName
1287
							+ "&nbsp;<i class=\"fa fa-download\"></i>"
1320
							+ "&nbsp;<i class=\"fa fa-download\"></i>"
1288
							+ "</a>"
1321
							+ "</a>"
1289
						activityAttachment.push(assigneeAttachment);
1322
						activityAttachment.push(assigneeAttachment);
1290
					}
1323
					}
1291
					attachments = activityAttachment.join("");
1324
					attachments = activityAttachment.join("");
1292
					console.log(attachments);
1325
					console.log(attachments);
1293
				}
1326
				}
-
 
1327
 
1294
				if (response[i].type == "OPENED"
1328
				var activityType = response[i].type;
1295
					|| response[i].type == "COMMUNICATION_IN") {
1329
				var escapedMessage = escapeHtml(response[i].message);
-
 
1330
				var formattedTime = moment(response[i].createTimestamp).format('DD/MM/YYYY, h:mm:ss a');
-
 
1331
 
-
 
1332
				if (activityType == ActivityType.OPENED || activityType == ActivityType.COMMUNICATION_IN) {
1296
 
1333
 
1297
					var partnerMessage = "<div class=\"incoming_msg\">"
1334
					var partnerMessage = "<div class=\"incoming_msg\">"
1298
						+ "<div class=\"received_msg\">"
1335
						+ "<div class=\"received_msg\">"
1299
						+ "<div class=\"received_withd_msg\">" + "<p>"
1336
						+ "<div class=\"received_withd_msg\">" + "<p>"
1300
						+ response[i].message + "</p><div>"
1337
						+ escapedMessage + "</p><div>"
1301
						+ `${attachments}`
1338
						+ `${attachments}`
1302
						+ "</div> <span class=\"time_date\"> "
1339
						+ "</div> <span class=\"time_date\"> "
1303
						+ moment(response[i].createTimestamp).format('DD/MM/YYYY, h:mm:ss a')
1340
						+ formattedTime
1304
						+ "</span></div>" + "</div>" + "</div>";
1341
						+ "</span></div>" + "</div>" + "</div>";
1305
					$(".activity-container .modal-body").append(
1342
					$(".activity-container .modal-body").append(
1306
						partnerMessage);
1343
						partnerMessage);
1307
 
1344
 
1308
				} else if (response[i].type == "COMMUNICATION_OUT") {
1345
				} else if (activityType == ActivityType.COMMUNICATION_OUT) {
-
 
1346
					var senderName = escapeHtml(response[i].name ? response[i].name : "Support");
1309
					var assigneeMessage = "<div class=\"outgoing_msg\">"
1347
					var assigneeMessage = "<div class=\"outgoing_msg\">"
1310
						+ "<div class=\"sent_msg\">"
1348
						+ "<div class=\"sent_msg\">"
1311
						+ "<span style=color:green>"
1349
						+ "<span style=color:green>"
1312
						+ "~"
1350
						+ "~"
1313
						+ (response[i].name ? response[i].name
-
 
1314
							: "Support") + "<p>"
1351
						+ senderName + "<p>"
1315
						+ response[i].message + "</span> </p><div>"
1352
						+ escapedMessage + "</span> </p><div>"
1316
						+ `${attachments}`
1353
						+ `${attachments}`
1317
						+ "</div> <span class=\"time_date\">"
1354
						+ "</div> <span class=\"time_date\">"
1318
						+ moment(response[i].createTimestamp).format('DD/MM/YYYY, h:mm:ss a')
1355
						+ formattedTime
1319
						+ "</span> </div>" + "</div>";
1356
						+ "</span> </div>" + "</div>";
1320
					$(".activity-container .modal-body").append(
1357
					$(".activity-container .modal-body").append(
1321
						assigneeMessage);
1358
						assigneeMessage);
1322
 
1359
 
1323
				} else if (response[i].name
1360
				} else if (response[i].name && activityType == ActivityType.COMMUNICATION_INTERNAL) {
1324
					&& response[i].type == "COMMUNICATION_INTERNAL") {
1361
					var senderName = escapeHtml(response[i].name);
1325
					var assigneeMessage = "<div class=\"outgoing_msg\">"
1362
					var assigneeMessage = "<div class=\"outgoing_msg\">"
1326
						+ "<div class=\"sent_msg\">"
1363
						+ "<div class=\"sent_msg\">"
1327
						+ "<span style=color:green>"
1364
						+ "<span style=color:green>"
1328
						+ "~"
1365
						+ "~"
1329
						+ response[i].name
1366
						+ senderName
1330
						+ "<p style=\"color: white;background: #b75454;\">"
1367
						+ "<p style=\"color: white;background: #b75454;\">"
1331
						+ response[i].message + "</span> </p> <div>"
1368
						+ escapedMessage + "</span> </p> <div>"
1332
						+ `${attachments}`
1369
						+ `${attachments}`
1333
						+ "</div> <span class=\"time_date\">"
1370
						+ "</div> <span class=\"time_date\">"
1334
						+ moment(response[i].createTimestamp).format('DD/MM/YYYY, h:mm:ss a')
1371
						+ formattedTime
1335
						+ "</span> </div>" + "</div>";
1372
						+ "</span> </div>" + "</div>";
1336
					$(".activity-container .modal-body").append(
1373
					$(".activity-container .modal-body").append(
1337
						assigneeMessage);
1374
						assigneeMessage);
1338
 
1375
 
1339
				} else {
1376
				} else {
1340
					var assigneeMessage = "<div class=\"outgoing_msg\">"
1377
					var assigneeMessage = "<div class=\"outgoing_msg\">"
1341
						+ "<div class=\"sent_msg\">" + "<p>"
1378
						+ "<div class=\"sent_msg\">" + "<p>"
1342
						+ response[i].message + "</span> </p> <div>"
1379
						+ escapedMessage + "</span> </p> <div>"
1343
						+ `${attachments}`
1380
						+ `${attachments}`
1344
						+ "</div> <span class=\"time_date\">"
1381
						+ "</div> <span class=\"time_date\">"
1345
						+ moment(response[i].createTimestamp).format('DD/MM/YYYY, h:mm:ss a')
1382
						+ formattedTime
1346
						+ "</span> </div>" + "</div>";
1383
						+ "</span> </div>" + "</div>";
1347
					$(".activity-container .modal-body").append(
1384
					$(".activity-container .modal-body").append(
1348
						assigneeMessage);
1385
						assigneeMessage);
1349
 
1386
 
1350
				}
1387
				}
1351
 
1388
 
1352
			}
1389
			}
-
 
1390
			// Only show internal checkbox to CRM users (they can choose internal/external)
-
 
1391
			// Non-CRM users always send internal, so hide the checkbox
1353
			if (roleType == "true" || roleType == true) {
1392
			if (toBool(roleType) && toBool(isCrmUser)) {
1354
				$('.internalCheckBox').css('display', 'block');
1393
				$('.internalCheckBox').css('display', 'block');
1355
				if (internal == true || internal == "true") {
-
 
1356
					$('#internalCommunication').prop('checked', true);
-
 
1357
				} else {
-
 
1358
					$('#internalCommunication').prop('checked', false);
1394
				$('#internalCommunication').prop('checked', toBool(internal));
1359
				}
-
 
1360
 
-
 
1361
			} else {
1395
			} else {
1362
				$('.internalCheckBox').css('display', 'none');
1396
				$('.internalCheckBox').css('display', 'none');
-
 
1397
				// Non-CRM users always send internal
-
 
1398
				$('#internalCommunication').prop('checked', true);
1363
			}
1399
			}
1364
		});
1400
		});
1365
}
1401
}
1366
 
1402
 
1367
function downloadDocument(documentId, documentName) {
1403
function downloadDocument(documentId, documentName) {