PageSourceSearch

https://customer.vitelglobal.com/plugin/js/myapp.js

js vitelglobal.com collected 2026-09-24 10:19:51 UTC 145,623 bytes, 3,849 lines download raw bytes

1var myapp = angular.module('myApp', ['ngRoute','dirPagination','720kb.datepicker','checklist-model','textAngular','ngSanitize','infinite-scroll','ng-fusioncharts']);
2var base_url = "https://customer.vitelglobal.com/";
3/* ---- Service Function ---- */
4
5/* ---- Alert Msg and Pagination function ---- */
6myapp.service('myService', function () {
7	// this.resMessage = function (scope,timeout,errcode) {
8	// 	scope.alertMsg = true;
9	// 	if(errcode == 200){ scope.class = "alert-success"; }else{ scope.class = "alert-danger"; }
10	// 	timeout(function () { scope.alertMsg = false; }, 3000);
11    // }
12	this.resMessage = function(scope,timeout,errcode,errmsg){
13		// $('.modal-backdrop').hide();
14		// document.getElementById("vg_body").style.overflow = 'inherit';
15		if(errcode == 200){
16			// swal({
17			// 	html: `<h4>Success.</h4>`,
18			// 	icon: "success",
19			// 	timer: 3000,
20			// 	showConfirmButton:false,
21			// });
22
23			new swal({
24			    type: 'success',
25			    title: '<h4>'+errmsg+'</h4>',
26			    showConfirmButton: fal
26se,
27			    timer: 3000,
28			    buttonsStyling: false
29			})
30		}
31		else{
32			// swal({
33			// 	html: '<h4>Failed '+errmsg+'</h4>',
34			// 	icon: "error",
35			// 	timer: 3000,
36			// 	showConfirmButton:false,
37			// });
38
39			new swal({
40			    type: 'error',
41			    title: '<h4>'+errmsg+'</h4>',
42			    showConfirmButton: false,
43			    timer: 3000,
44			    buttonsStyling: false
45			})
46		}
47
48	}
49	this.info = function(){
50		swal({
51			html: `<h4>Please select any Row to edit.</h4>`,
52			icon: "info",
53			 timer: 3000,
54			 showConfirmButton:false,
55		});
56	}
57	this.pagination = function (scope,pageno,pagesize,datalength,totalcount) {
58		scope.totalCount = totalcount;
59		scope.cpage = pageno;
60		scope.startval = (pageno-1)*pagesize+1;
61		scope.endval = datalength.length+(pagesize*(pageno - 1));
62		if(datalength.length == 0){ scope.startval = 0;}
63    }	
64});
65
66/* ---- fileupload function ---- */
67myapp.directive('fileModel', ['$parse', function ($parse) {
68    return {
69        restrict: 'A',
70        link: function(scope, element, attrs) {
71            var model = $parse(attrs.fileModel);
72            var modelSetter = model.assign;
73            
74            element.bind('change', function(){
75                scope.$apply(function(){
76                    modelSetter(scope, element[0].files[0]);
77                });
78            });
79        }
80    };
81}]);
82myapp.directive("fileInput", function($parse){  
83	return{  
84		 link: function($scope, element, attrs){  
85			  element.on("change", function(event){  
86				   var files = event.target.files;  
87				   //console.log(files[0].name);  
88				   $parse(attrs.fileInput).assign($scope, element[0].files);  
89				   $scope.$apply();  
90			  });  
91		 }  
92	}  
93});
94myapp.directive('allowDecimalNumbers', function () {  
95	return {  
96		restrict: 'A',  
97		link: function (scope, elm, attrs, ctrl) {  
98			elm.on('keydown', function (event) {  
99				var $input = $(this);  
100				var value = $input.val();  
101				value = value.replace(/[^0-9\.]/g, '')  
102				$input.val(value);  
103				if (event.which == 64 || event.which == 16) {  
104					// numbers  
105					return false;  
106				} if ([9, 8, 13, 27, 37, 38, 39, 40, 110].indexOf(event.which) > -1) {  
107					// backspace, enter, escape, arrows  
108					return true;  
109				} else if (event.which >= 48 && event.which <= 57) {  
110					// numbers  
111					return true;  
112				} else if (event.which >= 96 && event.which <= 105) {  
113					// numpad number  
114					return true;  
115				} else if ([46, 110, 190].indexOf(event.which) > -1) {  
116					// dot and numpad dot  
117					return true;  
118				} else {  
119					event.preventDefault();  
120					return false;  
121				}  
122			});  
123		}  
124	}  
125});
126
127myapp.filter('customJoin', function() {
128  return function(input) {
129	var arr = input.join(', '); return arr;
130  };
131});
132
133
134/* ---- CONTROLLER FUNCTION ---- */
135//For Login Page - Start
136myapp.controller("loginController", function($scope,$http,$window,$timeout,myService) {
137	$scope.loginData = function (formdata, varResult){
138		var config = { params: { formdata : formdata } };
139		$http.post(base_url+"login/checklogin", null, config).then(function(response){	
140			if(response.data.errcode == 200){
141				$window.location.href = base_url+response.data.errmsg;
142			}
143			else{
144				$scope[varResult] = response.data.errmsg; 
145				myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
146			}
147		});	
148	};
149	
150	$scope.forgetPass = function (forget, varResult){
151		var config = { params: { formdata : forget } };
152		$http.post(base_url+"login/forget_password", null, config).then(function(response){ 	
153			if(response.data.errcode == 200){
154				$('#exampleModal').modal('hide');
155				$('#forgot_username').val('');
156				$('#forgot_captcha').val('');
157			}				
158			$scope[varResult] = response.data.errmsg;
159			 myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); 
160			 
161		});	
162	};
163	
164});
165//For Login Page - End
166
167//For Dashboard Page - Start
168myapp.controller("dashboardController", function($scope,$http,$timeout,$window) 
169{		
170	var tdate = new Date();
171	var dd = tdate.getDate(); //yields day
172	var MM = tdate.getMonth(); //yields month
173	var yyyy = tdate.getFullYear(); //yields year
174	var currentDate=  yyyy + "-" + ( MM+1) + "-" + dd;
175	$scope.list_given_in = {inc_internal:'1',starttime:'00',endtime:'23',starttime:'00',endtime:'23',startdate:currentDate,enddate:currentDate,callbound:'in'};
176	$scope.list_given_out = {inc_internal:'1',starttime:'00',endtime:'23',starttime:'00',endtime:'23',startdate:currentDate,enddate:currentDate,callbound:'out'};
177	
178	$scope.inboundCalltotal = function () 
179	{
180		$scope.loader = true; var config = {params: { page:1, size:$scope.pageSize, formdata : $scope.list_given_in}};
181		$http.post(base_url+"call_records/tabledata", null, config).then(function(response)
182		{
183			// console.log("inbound total data"+response.data.tableData);
184			// console.log("inbound total count"+response.data.totalCount);
185			$scope.inboundcallcount = response.data.totalCount;
186			$scope.outboundCalltotal();
187		});
188	};
189	$scope.inboundCalltotal();
190	$scope.outboundCalltotal = function () 
191	{
192		$scope.loader = true; var config = {params: { page:1, size:$scope.pageSize, formdata : $scope.list_given_out}};
193		$http.post(base_url+"call_records/tabledata", null, config).then(function(response){
194			$scope.outboundcallcount = response.data.totalCount;
195		});
196	};
197	
198	
199	$scope.getCallsData = function () 
200	{
201		// Create a new Date object with the desired date
202		var date = new Date($scope.startdate);
203
204
205		var utcTimestamp = date.getTime();
206		var estOffset = 9.5 * 60 * 60 * 1000; 
207		var estTimestamp = utcTimestamp + estOffset;
208        var estDate = new Date(estTimestamp);
209
210		// Define an array of weekday names
211		var daysOfWeek = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
212
213		// Get the day index (0-6) from the date object
214		var dayIndex = estDate.getDay();
215
216		// Get the day name from the daysOfWeek array using the day index
217		var dayName = daysOfWeek[dayIndex];
218		document.getElementById("selecteddayname1").innerHTML = document.getElementById("selecteddayname").innerHTML = dayName;
219		// Format the date to "Jul 06, 2023" using the built-in Date methods
220		var formattedDate = date.toLocaleDateString("en-US", { month: "short", day: "2-digit", year: "numeric" });
221		var formattedDate = estDate.toLocaleDateString("en-US", { month: "short", day: "2-digit", year: "numeric" });
222		document.getElementById("selecteddate").innerHTML = document.getElementById("selecteddate1").innerHTML = formattedDate;
223		// Output the formatted date
224		console.log(formattedDate); // Output: "Thu Jul 06, 2023"
225		$scope.list_given_in = {inc_internal:'1',starttime:'00',endtime:'23',starttime:'00',endtime:'23',startdate:$scope.startdate,enddate:$scope.startdate,callbound:'in'};
226		$scope.list_given_out = {inc_internal:'1',starttime:'00',endtime:'23',starttime:'00',endtime:'23',startdate:$scope.startdate,enddate:$scope.startdate,callbound:'out'};
227	
228		$scope.inboundCalltotal();
229		//$scope.outboundCalltotal();
230	};
231		
232	$scope.recordCount = 0; 	
233
234	$http.get(base_url+"dashboard/user_detail").then(function(response) 
235	{ 
236		// console.log(response);
237		$scope.user = response.data.user; 
238		$scope.service = response.data.service; 
239		$scope.ticket = response.data.ticket; 
240		$scope.login = response.data.login_detail;
241		//console.log('dhdjhj',$scope.user.two_factor_authentication);
242		if($scope.user.two_factor_authentication == 'Y')
243		{
244			//$('#myModal').modal('hide'); 
245		}
246		else
247		{
248			//$('#myModal').modal('show'); 
249		}
250	}); 
251	
252	$http.get(base_url+"manage_users/userdetail").then(function(response) { $scope.subusers = response.data; });
253
254	
255	$scope.satext = '';
256	$scope.getExtensionData = function()
257	{
258		$scope.loader = true; 
259		var config = { params: { ext:$scope.selectedextension } };
260		$http.post(base_url+"user_extensions/getExtensionSelected", null, config).then(function(response)
261		{ 
262			$scope.loader = false; 
263			window.location.reload();
264		});
265	}
266	
267	
268	
269	$scope.getAlert = function()
270	{
271		//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
272		swal({
273				html: `<h4>Please Select Extension.</h4>`,
274				icon: "error",
275				timer: 3000,
276				showConfirmButton:false,
277			});
278	}
279	$http.get(base_url+"user_extensions/subext_list").then(function(response)
280	{ 
281		$scope.cc = response.data.assignext; console.log(response.data);
282		$timeout(function () { $scope.satext = $scope.selectedextension = response.data.selectedext;  }, 3000);
283		var today = new Date();
284	var dd = String(today.getDate()).padStart(2, '0');
285	var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
286	var yyyy = today.getFullYear();
287	
288	today = yyyy + '-' + mm + '-' + dd;
289
290	$scope.callreports = {startdate:today,enddate:today,sd:response.data.selectedext};
291	$scope.pageno = 1; // initialize page no to 1
292	$scope.selectables = [ {value: 25},{value: 50},{value: 100}, {value: 200}, {value: 300}, {value: 500} ];
293	$scope.pageSize = "25"; 
294	
295		$scope.loader = true; var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
296		$http.post(base_url+"call_records/individual_tabledata", null, config).then(function(response){
297			// console.log(response);
298		 $scope.loader = false; $scope.tableData = true;
299			$scope.callreport = response.data.tabledata; $scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
300			$scope.answered = response.data.answered; $scope.noanswer = response.data.noanswered; $scope.busy = response.data.busy; $scope.voicemail = response.data.voicemail;
301			//myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.callreport,response.data.totalCount);
302			if(response.data.errmsg != ''){ $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,202); }
303		});
304	
305		
306	});
307});
308//For Dashboard  Page - End
309
310//For Contact Info Page - Start
311
312//For Contact Info Page - End
313
314//For User Document Page - Start
315myapp.controller("userdocuController", function($scope,$http,$timeout,myService) {	
316
317
318	$scope.sortReverse = false; 
319  $scope.sortColumn = function(column) {
320    if ($scope.sortType === column) {
321      $scope.sortReverse = !$scope.sortReverse; 
322    } else {
323      $scope.sortType = column;
324      $scope.sortReverse = false;
325    }
326  };
327  $scope.sortclass = function (column) {
328        if($scope.sortType === column){
329            return $scope.sortReverse ? 'arrow-dow' : 'arrow-up'
330        }
331        return '';
332    }
333
334
335	$scope.pageno = 1; // initialize page no to 1
336	$scope.selectables = [ {value: 200}, {value: 400}, {value: 600}, {value: 800} ];
337	$scope.pageSize = "200"; 
338	
339	$scope.searchKey = '';	
340	$scope.searchData = function(){ $scope.loadDocu(); }	
341	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.loadDocu(); }	
342	$scope.loadDocu = function () 
343	{
344		var config = {params:{page:$scope.pageno, size:$scope.pageSize, keyword:$scope.searchKey}};
345		$http.post(base_url+"user_document/tabledata", null, config).then(function(response){
346			$scope.userdoc = response.data.tabledata;
347			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.userdoc,response.data.totalCount);
348		});
349		
350	};
351	$scope.loadDocu();
352});
353//For User Document Page - End
354//for push notifications - start
355
356myapp.controller("pushnotifcontroller", function($scope,$http,$timeout,myService) {	
357	$scope.createnotif = function(push, varResult) { 
358		$scope.loader = true; var config = {params:{formdata:push}};
359		$http.post(base_url+"Push_notifications_test/index", null, config).then(function(response){ 
360			console.log(response.data);
361			//$scope.listnotif();
362			$scope.showNotification(response.data);
363		});	
364			
365    };
366	// $scope.listnotif = function() { 
367	// 	$http.post(base_url+"Push_notifications/index", null).then(function(response){ 
368	// 		console.log(response.data);
369	// 		$scope.showNotification(response.data);
370	// 	});	
371			
372    // };
373	$scope.showNotification = function(data){
374		if (Notification.permission !== "granted") {		
375		Notification.requestPermission();
376	} else {
377		if(data.result == true) {
378					var data_notif = data.notif;
379					for (var i = data_notif.length - 1; i >= 0; i--) {
380						var theurl = data_notif[i]['url'];
381						var notifikasi = new Notification(data_notif[i]['title'], {
382							icon: data_notif[i]['icon'],
383							body: data_notif[i]['msg'],
384						});
385						notifikasi.onclick = function () {
386							window.open(theurl); 
387							notifikasi.close();     
388						};
389						// setTimeout(function(){
390						// 	notifikasi.close();
391						// }, 8000);
392					};
393				} else {
394				}
395	}
396}
397});
398
399//for push notifications- end
400//For Manage User Page - Start
401myapp.controller("manageuserController", function($scope,$http,$timeout,myService) {
402
403	$scope.sortReverse = false; 
404  $scope.sortColumn = function(column) {
405    if ($scope.sortType === column) {
406      $scope.sortReverse = !$scope.sortReverse; 
407    } else {
408      $scope.sortType = column;
409      $scope.sortReverse = false;
410    }
411  };
412  $scope.sortclass = function (column) {
413        if($scope.sortType === column){
414            return $scope.sortReverse ? 'arrow-dow' : 'arrow-up'
415        }
416        return '';
417    }
418
419    
420	$http.get(base_url+"my_account/user_detail").then(function(response) {         
421		$scope.countuser = response.data;
422	});
423	
424	$scope.loadData = function(){
425		$http.get(base_url+"manage_users/userdetail").then(function(response){  $scope.users = response.data; });
426	}
427	
428	$scope.roles = [{id: 'Admin', name: 'Admin'},{id: 'Suser', name: 'Sub User'}];
429	$scope.status = [{id: 'Active', name: 'Active'},{id: 'inactive', name: 'Inactive'}];
430	
431	$scope.add = function(currentRow) {
432		$scope.user = {"status":''}; 
433		//$scope.showTable = true; 
434		$scope.addBtn = true; 
435		$scope.editBtn = false;		
436		$('#vg_subuser').modal('show');
437	}
438	
439	$scope.edit = function(currentRow) {
440		$scope.currentrow = currentRow; $scope.user = angular.copy($scope.currentrow);
441		//$scope.showTable = true; 
442		$scope.addBtn = false; 
443		$scope.editBtn = true;
444		$('#vg_subuser').modal('show');
445	}
446	
447	$scope.cancel = function() {
448		$scope.loadData(); $scope.showTable = false; $scope.addBtn = false; $scope.editBtn = false;
449	}
450	
451	$scope.removeData = function(index) {
452		 swal({
453	            type: 'warning',
454	            title: '<h4>Are you sure you want to delete User?</h4>',
455	            showConfirmButton: true,
456	            confirmButtonText: "Yes, Delete!",
457	            showCancelButton:true,
458	            buttonsStyling: true,
459	            showLoaderOnConfirm: true,
460	          }).then((result) => {
461	            if (result.value) {
462					$scope.loader = true; var config = { params: { formdata : index } };
463					$http.post(base_url+"manage_users/deletedata", null, config).then(function(response){ $scope.loader = false;																
464						if(response.data.errcode == 200){ $scope.loadData(); }
465						$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
466					});	
467	            } else if (result.dismiss === 'cancel') {
468	                swal(
469	                  'Cancelled',
470	                  'Your stay here :)',
471	                  'error'
472	                )
473	            }
474	        })
475
476    };
477	
478	$scope.createData = function(user, varResult) {
479		$scope.loader = true; var config = { params: { formdata : user } };
480		$http.post(base_url+"manage_users/insertdata", null, config).then(function(response){ $scope.loader = false; 												
481			if(response.data.errcode == 200){ $scope.loadData(); 
482				$scope.showTable = false; 
483			}
484				$('#vg_subuser').modal('hide');
485			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
486		});			
487    };
488	
489	$scope.updateData = function(user,varResult) {
490		$scope.loader = true; var config = { params: { formdata : user } };
491		$http.post(base_url+"manage_users/updatedata", null, config).then(function(response){ $scope.loader = false; 																
492			if(response.data.errcode == 200){ $scope.loadData(); 
493				$scope.showTable = false; 
494			}
495				$('#vg_subuser').modal('hide');
496			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
497		});			
498    };
499	
500	$scope.loadData();
501});	
502//For Manage User Page - End
503
504//For User Permission Page - Start
505myapp.controller("permissionController", function($scope,$http,$timeout,$location,myService) {
506	$urid = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
507	if($urid != ''){ $scope.suid = $urid; }else{ $scope.suid = '0'; }
508	$http.get(base_url+"permission/menudata").then(function(response) {
509		$scope.menus = response.data.menu;
510		$scope.actions = response.data.action;
511		$scope.mmenuid = response.data.mm;
512		$scope.smenuid = response.data.sm;
513		$scope.edit = response.data.edit;
514		$scope.del = response.data.del;
515		$scope.down = response.data.down;
516		$scope.other = response.data.other;
517		$scope.ex1 = response.data.ex1;
518		$scope.ex2 = response.data.ex2;
519		$scope.ex3 = response.data.ex3;
520		$scope.ex4 = response.data.ex4;
521		$scope.ex5 = response.data.ex5;  
522	});
523	
524	$http.post(base_url+"permission/subuserlist").then(function(response){ $scope.userlists = response.data; });
525	
526	$scope.selectUser = function(val){
527		$scope.loader = true;	 var config = {params:{suser:val}}; $scope.chkVal = false;
528		$http.post(base_url+"permission/usermenu", null, config).then(function(response) { $scope.loader = false;	
529			$scope.username = response.data.username;
530			if(response.data != ''){
531				$scope.user = {
532					pmid:response.data.parent.split(","),
533					cmid:response.data.child.split(","),
534					edit:response.data.edit.split(","),
535					remove:response.data.remove.split(","),
536					download:response.data.download.split(","),
537					other:response.data.other.split(","),
538					ex1:response.data.ex1.split(","),
539					ex2:response.data.ex2.split(","),
540					ex3:response.data.ex3.split(","),
541					ex4:response.data.ex4.split(","),
542					ex5:response.data.ex5.split(",")
543					// ex4:response.data.ex4.split(",")
544					// ex5:response.data.ex5.split(",")
545				};
546			}
547			else{
548				$scope.user = {pmid:'',cmid:'',edit:'',remove:'',download:'',other:'',ex1:'',ex2:'',ex3:'',ex4:'',ex5:''};
549			}
550		});
551	}
552	$scope.selectUser($urid);
553	
554	$scope.checkAll = function() {
555    	if($scope.chkVal == true){
556			$scope.user.pmid = angular.copy($scope.mmenuid);
557			$scope.user.cmid = angular.copy($scope.smenuid);
558			$scope.user.edit = angular.copy($scope.edit);
559			$scope.user.remove = angular.copy($scope.del);
560			$scope.user.download = angular.copy($scope.down);
561			$scope.user.other = angular.copy($scope.other);
562			$scope.user.ex1 = angular.copy($scope.ex1);
563			$scope.user.ex2 = angular.copy($scope.ex2);
564			$scope.user.ex3 = angular.copy($scope.ex3);
565			$scope.user.ex4 = angular.copy($scope.ex4);
566			$scope.user.ex5 = angular.copy($scope.ex5);
567		}
568		else{
569			$scope.user.pmid = '';
570			$scope.user.cmid = '';
571			$scope.user.edit = '';
572			$scope.user.remove = '';
573			$scope.user.download = '';
574			$scope.user.other = '';
575			$scope.user.ex1 = '';
576			$scope.user.ex2 = '';
577			$scope.user.ex3 = '';
578			$scope.user.ex4 = '';
579			$scope.user.ex5 = '';
580		}
581  	};
582	
583	$scope.saveChanges = function(user,varResult) {
584		var check_len=$("input:checkbox:checked").length;
585
586			if(check_len =='' || check_len<=0)
587			{
588				$scope.ajaxResult = "Please select atleast one Menu to assign"; myService.resMessage($scope,$timeout,202,$scope.ajaxResult);
589				return false;
590			}
591			else
592			{	
593		$scope.loader = true; var config = {params:{ menu_id:user,suser:$scope.suid }};
594		$http.post(base_url+"permission/save_menuid", null, config).then(function(response){ $scope.loader = false;								
595			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
596		});
597	}
598	};
599
600
601// 	$scope.checkParentMenu = function(parentId){
602
603//     if(!$scope.user.pmid){
604//         $scope.user.pmid = [];
605//     }
606
607//     if($scope.user.pmid.indexOf(parentId) === -1){
608//         $scope.user.pmid.push(parentId);
609//     }
610// };
611
612
613// $scope.toggleParent = function(parentMenu) {
614
615//     if (!$scope.user.cmid) {
616//         $scope.user.cmid = [];
617//     }
618
619//     // If parent is unchecked → remove all child menus
620//     if ($scope.user.pmid.indexOf(parentMenu.id) === -1) {
621
622//         angular.forEach($scope.menus, function(menu) {
623//             if (menu.menu_pid == parentMenu.id) {
624//                 let index = $scope.user.cmid.indexOf(menu.id);
625//                 if (index !== -1) {
626//                     $scope.user.cmid.splice(index, 1);
627//                 }
628//             }
629//         });
630//     }
631// };
632
633$scope.checkParentMenu = function(parentId){
634
635    if(!$scope.user.pmid){
636        $scope.user.pmid = [];
637    }
638
639    if(!$scope.user.cmid){
640        $scope.user.cmid = [];
641    }
642
643    // delay to sync with checklist-model
644    setTimeout(function(){
645
646        // check if ANY child is selected
647        let hasChild = $scope.menus.some(function(menu){
648            return menu.menu_pid == parentId &&
649                   $scope.user.cmid.indexOf(menu.id) !== -1;
650        });
651
652        let pIndex = $scope.user.pmid.indexOf(parentId);
653
654        if(hasChild){
655            // ensure parent checked
656            if(pIndex === -1){
657                $scope.user.pmid.push(parentId);
658            }
659        } else {
660            // no submenu selected → uncheck parent
661            if(pIndex !== -1){
662                $scope.user.pmid.splice(pIndex, 1);
663            }
664        }
665
666        if(!$scope.$$phase){
667            $scope.$apply();
668        }
669
670    }, 0);
671};
672
673
674$scope.uncheckChildren = function(parentId){
675
676    if(!$scope.user.cmid){
677        $scope.user.cmid = [];
678    }
679
680    setTimeout(function(){
681
682        if($scope.user.pmid.indexOf(parentId) === -1){
683
684            angular.forEach($scope.menus, function(menu){
685                if(menu.menu_pid == parentId){
686
687                    let index = $scope.user.cmid.indexOf(menu.id);
688                    if(index !== -1){
689                        $scope.user.cmid.splice(index, 1);
690                    }
691
692                }
693            });
694
695            if(!$scope.$$phase){
696                $scope.$apply();
697            }
698        }
699
700    }, 0);
701};
702
703});
704//For User Permission Page - End
705
706//For Assign CDR Page - Start
707myapp.controller("assigncdrController", function($scope,$http,$timeout,$location,myService) {
708	$urid = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
709	
710	$http.get(base_url+"assign_cdr/extension").then(function(response) { 
711		//console.log(response);
712		$scope.extension = response.data.extension.split(",");
713		$scope.disName = response.data.disName.split(",");
714
715		let extensionMap = $scope.extension.reduce((map, ext, idx) => {
716			map[ext] = $scope.disName[idx] || " ";
717			return map;
718		}, {});
719
720		// Optionally assign to scope if needed for UI display
721		$scope.extensionMap = extensionMap;
722		//console.log('gdgg',extensionMap);
723	});
724	
725	$http.get(base_url+"assign_cdr/userlist").then(function(response) { 
726		$scope.userlists = response.data; $scope.userlist = {"user_id":$urid};
727	});
728	
729	$scope.assignExt = function(userid) {
730		$scope.loader = true; var config = {params:{suser:userid}};
731		$http.post(base_url+"assign_cdr/assignext", null, config).then(function(response) { $scope.loader = false;
732			if(response.data.assigned_lines != 0){
733				$scope.user = {extension: response.data.assigned_lines.split(",")};
734			}else{
735				$scope.user = {extension:''};
736			}
737		});
738	}
739	
740	$scope.assignExt($urid);
741	$scope.selectUser = function(userlist){ $scope.assignExt(userlist.user_id); };
742	
743	$scope.checkAll = function() {
744    	if($scope.chkVal == true){
745			$scope.user.extension = angular.copy($scope.extension);
746		}else{
747			$scope.user.extension = '';
748		}
749  	};
750	
751	$scope.saveChanges = function(ext,seluser,varResult) { 
752		var check_len=$("input:checkbox:checked").length;
753
754		if(check_len =='' || check_len<=0)
755		{
756			$scope.ajaxResult = "Please select atleast one Extention"; myService.resMessage($scope,$timeout,202,$scope.ajaxResult);
757			return false;
758		}
759		else
760		{	
761		$scope.loader = true; var config = {params:{ ext, user_id:seluser.user_id }};
762		$http.post(base_url+"assign_cdr/save_assignext", null, config).then(function(response){	 $scope.loader = false;			
763			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
764		});
765	}
766	};	
767});
768//For Assign CDR Page - End
769
770//For Assign Extension Page - Start
771myapp.controller("userextController", function($scope,$http,$timeout,$location,myService) {
772	$urid = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
773	// $http.get(base_url+"manage_userext/extension").then(function(response) { 
774	// 	$scope.extension = response.data.extension.split(",");
775	// });
776
777	$http.get(base_url+"assign_cdr/extension").then(function(response) { 
778		$scope.extension = response.data.extension.split(",");
779		$scope.disName = response.data.disName.split(",");
780
781		let extensionMap = $scope.extension.reduce((map, ext, idx) => {
782			map[ext] = $scope.disName[idx] || " ";
783			return map;
784		}, {});
785
786		// Optionally assign to scope if needed for UI display
787		$scope.extensionMap = extensionMap;
788	});
789	
790	$http.get(base_url+"manage_userext/userlist").then(function(response) { 
791		$scope.userlists = response.data; $scope.userlist = {"user_id":$urid};
792	});
793	
794	$scope.assignExt = function(userid) {
795		$scope.loader = true; var config = {params:{suser:userid}};
796		$http.post(base_url+"manage_userext/userext", null, config).then(function(response) { $scope.loader = false;
797			if(response.data.assigned_lines != 0){
798				$scope.user = {extension: response.data.assigned_lines.split(",")};
799			}else{
800				$scope.user = {extension:''};
801			}
802		});
803	}
804	
805	$scope.assignExt($urid);
806	$scope.selectUser = function(userlist){ $scope.assignExt(userlist.user_id); };
807	
808	$scope.checkAll = function() {
809    	if($scope.chkVal == true){
810			$scope.user.extension = angular.copy($scope.extension);
811		}
812		else{
813			$scope.user.extension = '';
814		}
815  	};
816	
817	$scope.saveChanges = function(ext,seluser,varResult) {
818		var check_len=$("input:checkbox:checked").length;
819
820		if(check_len =='' || check_len<=0)
821		{
822			$scope.ajaxResult = "Please select atleast one Extention"; myService.resMessage($scope,$timeout,202,$scope.ajaxResult);
823			return false;
824		}
825		else
826		{	
827		$scope.loader = true; var config = {params:{ ext, user_id:seluser.user_id }};
828		$http.post(base_url+"manage_userext/save_userext", null, config).then(function(response){ $scope.loader = false;												
829			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
830		});
831	}
832	};
833});
834//For Assign Extension Page - End
835
836
837
838//For Time Zone Page - Start
839myapp.controller("timezoneController", function($scope,$http,$timeout,myService) {	
840	$http.get(base_url+"time_zone/timezones").then(function(response){ $scope.zones = response.data; });
841	$http.get(base_url+"my_account/user_detail").then(function(response){ 
842		$scope.selzone = {"time_zone":response.data.time_zone} });
843	
844	$scope.timeZone = function(zone,varResult) {
845		$scope.loader = true; var config = { params: { formdata : zone } };
846		$http.post(base_url+"time_zone/updatedata", null, config).then(function(response){	$scope.loader = false;															
847			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
848		});			
849    };
850});
851//For Time Zone Page - End
852
853//For Fail2Ban Page - Start
854myapp.controller("failtoban", function($scope,$http,$timeout,myService) 
855{		
856	$scope.command= function(status)
857	{
858		if(status == 'B' || status=='U'){
859			$scope.displayipaddress = true;
860		}
861		else{
862			$scope.displayipaddress = false;
863		} 
864	}
865
866	$scope.sub_failtoban = function(val)
867	{ 
868
869	console.log(val.commands) 
870		$scope.loader = true;
871		var config = {params:{fail:val}};
872		$http.post(base_url+"user_dids/manage_failtoban", null, config).then(function(response) 
873		{ 
874			$scope.loader = false; 
875			$scope.iplistsblocked = true;
876			$scope.ajaxResult = response.data.errmsg; 
877			$scope.failtobanlist = response.data.allip; 
878			if(val.commands!='S'){
879			myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
880			}
881			if(response.data.errcode == 200)
882			{
883				$scope.ext = {};  $scope.did = {}; $scope.extlist = {};
884			
885				
886			}
887		});
888	}
889
890});
891
892
893myapp.controller("firewall", function($scope,$http,$timeout,myService) 
894{		
895	// $scope.command= function(status)
896	// {
897	// 	if(status == 'B' || status=='U'){
898	// 		$scope.displayipaddress = true;
899	// 	}
900	// 	else{
901	// 		$scope.displayipaddress = false;
902	// 	} 
903	// }
904
905	$scope.sub_failtobanlist = function()
906	{  
907		$scope.bl= "S";
908		$scope.loader = true;
909		var config = {params:{fail:$scope.bl}};
910		$http.post(base_url+"user_dids/manage_firewall", null, config).then(function(response) 
911		{ 
912			$scope.loader = false; 
913			$scope.iplistsblocked = true;
914			$scope.ajaxResult = response.data.errmsg; 
915			$scope.failtobanlist = response.data.allip; 
916			$scope.failtobanallowlist = response.data.allowip; 
917			// myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
918			// if(response.data.errcode == 200)
919			// {
920			// 	$scope.ext = {};  $scope.did = {}; $scope.extlist = {};
921			
922				
923			// }
924		});
925	}
926
927	$scope.sub_failtobanlist();
928
929	$scope.sub_failtobann = function(did)
930	{  
931		$scope.b= "B";
932		$scope.loader = true;
933		var config = {params:{fail:did,commands:$scope.b}};
934		$http.post(base_url+"user_dids/manage_firewall", null, config).then(function(response) 
935		{ 
936			$scope.loader = false; 
937			$scope.iplistsblocked = true;
938			$scope.ajaxResult = response.data.errmsg; 
939			$scope.failtobanlist = response.data.allip; 
940			myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
941			if(response.data.errcode == 200)
942			{
943				$scope.ext = {};  $scope.did = {}; $scope.extlist = {};
944				$scope.sub_failtobanlist();
945			
946				
947			}
948		});
949	}
950
951	$scope.sub_failtounbann = function(did)
952	{  
953
954		$scope.ub= "U";
955		$scope.loader = true;
956			var config = {params:{fail:did,commands:$scope.ub}};
957		$http.post(base_url+"user_dids/manage_firewall", null, config).then(function(response) 
958		{ 
959			$scope.loader = false; 
960			$scope.iplistsblocked = true;
961			$scope.ajaxResult = response.data.errmsg; 
962			$scope.failtobanlist = response.data.allip; 
963			myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
964			if(response.data.errcode == 200)
965			{
966				$scope.ext = {};  $scope.dids = {}; $scope.extlist = {};
967				$scope.sub_failtobanlist();
968			
969				
970			}
971		});
972	}
973
974});
975//For Fail2Ban Page - End
976
977//For Daily Graph Page - Start
978myapp.controller("dailyGraph", function($scope,$http,$timeout,myService) 
979{	
980	$scope.myDataSource = {}; $scope.callreports = {startdate:'', enddate:'', inc_internal:'1'}; $scope.tableData = false;
981	$scope.previousdayReport = function () 
982	{
983		$scope.loader = true; var config = {params:{formdata:$scope.callreports}};
984		$http.post(base_url+"call_records/daily_report_graph", null, config).then(function(response){ $scope.loader = false; $scope.tableData = true;
985			$scope.categories = response.data.categories; $scope.dataset = response.data.dataset;
986			$scope.chart = {caption: "Daily Consolidate Report", subcaption: "", xaxisname: "Extension", yaxisname: "No of Calls", plotToolText:"$seriesname - $dataValue", numvisibleplot: "40", labeldisplay: "auto", theme: "fusion"};
987			$scope.myDataSource = {chart:$scope.chart,categories:$scope.categories,dataset:$scope.dataset};
988		});
989	};
990});
991
992//For Call Reports(CDR's) Page - Start
993myapp.controller("callreportsController", function($scope,$http,$timeout,myService) 
994{		
995	$scope.pageno = 1; // initialize page no to 1
996	$scope.selectables = [ {value: 1000},{value: 1500},{value: 2000}, {value: 2500}, {value: 3000}, {value: 3500} ];
997	$scope.pageSize = "500"; 
998	$scope.callreports = {inc_internal:'0',starttime:'00',endtime:'23'};
999	
1000	$http.get(base_url+"schedule_report/get_cdrgroup").then(function(response)
1001	{
1002		$scope.consolidate_data = response.data.userdata; //$scope.extlist = response.data.extlist;
1003	});
1004	
1005	//Search Keywords in Table
1006	$scope.searchKey = '';	
1007	$scope.searchAction = function(callreports){ $scope.callreports = callreports; $scope.callRecords(); }
1008	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.callRecords(); }	
1009	$scope.callRecords = function () 
1010	{
1011		const selectBox = document.getElementById("callstatus");
1012		const selectedOptions = Array.from(selectBox.options).filter(option => option.selected);
1013		const selectedValues = selectedOptions.map(option => option.value);
1014		console.log(selectedValues);
1015		
1016		$scope.callreports = angular.extend($scope.callreports,{callstatus:selectedValues});
1017		$scope.loader = true; 
1018		var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
1019		$http.post(base_url+"call_records/tabledata", null, config).then(function(response)
1020		{ $scope.loader = false; $scope.tableData = true;
1021			$scope.callreport = response.data.tabledata; $scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
1022			$scope.inbounddur = response.data.inbounddur; $scope.outbounddur = response.data.outbounddur;
1023			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.callreport,response.data.totalCount); $scope.user = {callreport:''};
1024			if(response.data.errmsg != ''){ $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,202); }
1025		});
1026	};
1027	
1028	
1029	$scope.getInboundValue = function(val){
1030		if(val == 1){ $scope.callreports = angular.extend($scope.callreports,{callbound:''}); }else{ $scope.callreports = angular.extend($scope.callreports,{line:'',dline:'',sd:''}); }
1031	};
1032	
1033	$scope.user = {callreport:''};
1034	$scope.checkAll = function() {
1035    	if($scope.chkVal == true){
1036			$scope.user = {callreport: angular.copy($scope.callreport)};
1037		}else{
1038			$scope.user = {callreport:''};
1039		}
1040  	};
1041	
1042	$scope.voiceMailPlay = function(exten,exten1,exten2,exten3)
1043	{
1044		var fold1 = exten2.replace(/~/g, "/"); //alert(fold1);
1045		var fold = fold1.replace("~", "/");
1046		var urls = fold1;//exten+".vitelglobal.com/"+exten1+fold;
1047		$scope.loader = true; var config = {params: { path : fold1}};
1048		$http.post(base_url+"call_records/getCdrFile", null, config).then(function(response){ 
1049			$scope.loader = false; $('#voicemaillisten').modal('show');
1050			document.getElementById("extplay").innerHTML = '<audio  id="myAudio" controls autoplay controlsList="nodownload"><source src="'+decodeURIComponent(response.data.tabledata)+'" type="audio/wav"></audio>';
1051		});
1052	}
1053	
1054	$scope.transcript = function(exten,exten1,exten2,exten3,unid,src,dst,calldate)
1055	{
1056
1057		$scope.srccc = src;
1058		$scope.dsttt = dst;
1059		$scope.calldateee = calldate;
1060		var fold1 = exten2.replace(/~/g, "/"); //alert(fold1);
1061		var fold = fold1.replace("~", "/");
1062		var urls = fold1;//exten+".vitelglobal.com/"+exten1+fold;
1063
1064        $scope.path = fold1;
1065        $scope.uniqueId = unid;
1066
1067		$scope.loader = true; var config = {params: { path : fold1,unid:unid}};
1068		$http.post(base_url+"call_records/transcript", null, config).then(function(response)
1069		{ 
1070			$scope.loader = false; 
1071			if(response.data.errcode == 200)
1072			{
1073				$('#transcriptshow').modal('show');
1074				$scope.transdata = response.data.errmsg; 
1075
1076				$scope.analysis = response.data.analysis; 
1077
1078				console.log("qweq2",$scope.analysis)
1079
1080			    $scope.paragraph = response.data.paragraph; 
1081
1082
1083				// $scope.transcriptdata = $scope.transdata.results.channels[0].alternatives[0].transcript;
1084				// $scope.confidence = $scope.transdata.results.channels[0].alternatives[0].confidence;
1085				//$scope.words = $scope.transdata.results.channels[0].alternatives[0].words;
1086                 console.log($scope.transdata);
1087			}
1088			else
1089			{
1090				$scope.transdata = ""; 
1091				swal({
1092						type: 'error',
1093						html: "Unable to transcript, Please contact Vitelglobal Support.",
1094						timer: 3000,
1095						showConfirmButton: false
1096					});
1097			}
1098		});
1099	}
1100
1101
1102
1103		//      $scope.downloadTxt = function () {
1104		//     const cleanText = $scope.paragraph.replace(/<br\s*\/?>/gi, '\n');
1105		//     const blob = new Blob([cleanText], { type: 'text/plain' });
1106		//     const url = window.URL.createObjectURL(blob);
1107		//     const a = document.createElement('a');
1108		//     a.href = url;
1109		//     a.download = 'Transcriptanalysis.txt';
1110		//     a.click();
1111		//     window.URL.revokeObjectURL(url);
1112		// };
1113
1114			$scope.downloadTxt = function () {
1115			    const paragraphText = $scope.paragraph.replace(/<br\s*\/?>/gi, '\n');
1116			    const analysisText = $scope.analysis.replace(/<br\s*\/?>/gi, '\n');
1117			    
1118			    const combinedText = "Transcript:\n" + paragraphText + "\n\nAnalysis:\n" + analysisText;
1119			    
1120			    const blob = new Blob([combinedText], { type: 'text/plain' });
1121			    const url = window.URL.createObjectURL(blob);
1122			    const a = document.createElement('a');
1123			    a.href = url;
1124			    a.download = 'TranscriptAnalysis.txt';
1125			    a.click();
1126			    window.URL.revokeObjectURL(url);
1127			};
1128
1129
1130// 	$scope.sections = [];
1131
1132// $scope.$watch('analysis', function(newVal) {
1133//     if (newVal) {
1134//         // Remove all <br>, <br/>, and <br /> tags
1135//         var cleanText = newVal.replace(/<br\s*\/?>/gi, '');
1136
1137//         $scope.sections = cleanText.split(/\n(?=\d\.\s)/).map(function(part) {
1138//             var splitIndex = part.indexOf(':');
1139//             return {
1140//                 title: part.substring(3, splitIndex).trim(),
1141//                 content: part.substring(splitIndex + 1).trim()
1142//             };
1143//         });
1144//     }
1145// });
1146
1147// $scope.sections = [];
1148
1149// let synth = window.speechSynthesis;
1150// let currentUtterance = null;
1151
1152// $scope.$watch('analysis', function(newVal) {
1153//   if (newVal) {
1154//     // Remove <br> tags
1155//     var cleanText = newVal.replace(/<br\s*\/?>/gi, '');
1156
1157//     $scope.sections = cleanText.split(/\n(?=\d\.\s)/).map(function(part) {
1158//       var splitIndex = part.indexOf(':');
1159//       return {
1160//         title: part.substring(3, splitIndex).trim(),
1161//         content: part.substring(splitIndex + 1).trim(),
1162//         isSpeaking: false
1163//       };
1164//     });
1165//   }
1166// });
1167
1168// $scope.sections = [];
1169
1170// let synth = window.speechSynthesis;
1171// let currentUtterance = null;
1172// let voices = [];
1173
1174// // Load available voices and find a female one
1175// function loadVoices() {
1176//   voices = synth.getVoices();
1177
1178//   // You can customize this list to prefer specific female voices
1179//   const preferredFemaleVoices = [
1180//     "Google UK English Female",
1181//     "Samantha",
1182//     "Victoria",
1183//     "Karen",
1184//     "Susan"
1185//   ];
1186
1187//   // Try to select a female voice by name match
1188//   $scope.femaleVoice = voices.find(v =>
1189//     preferredFemaleVoices.includes(v.name) || /female/i.test(v.name)
1190//   );
1191// }
1192// loadVoices();
1193
1194// if (speechSynthesis.onvoiceschanged !== undefined) {
1195//   speechSynthesis.onvoiceschanged = loadVoices;
1196// }
1197
1198// $scope.toggleSpeech = function(section, index) {
1199//   // If already speaking, stop
1200//   if (section.isSpeaking) {
1201//     synth.cancel();
1202//     section.isSpeaking = false;
1203//     return;
1204//   }
1205
1206//   // Stop any other section speaking
1207//   $scope.sections.forEach((sec, idx) => {
1208//     if (idx !== index) sec.isSpeaking = false;
1209//   });
1210
1211//   // Cancel any previous speech
1212//   synth.cancel();
1213
1214//   let utterance = new SpeechSynthesisUtterance(section.content);
1215//   utterance.lang = 'en-US';
1216//   section.isSpeaking = true;
1217
1218//   utterance.onend = function() {
1219//     $scope.$apply(function() {
1220//       section.isSpeaking = false;
1221//     });
1222//   };
1223
1224//   currentUtterance = utterance;
1225//   synth.speak(utterance);
1226// };
1227
1228$scope.sections = [];
1229
1230let synth = window.speechSynthesis;
1231let currentUtterance = null;
1232let voices = [];
1233
1234// Load voices and pick a female voice
1235function loadVoices() {
1236  voices = synth.getVoices();
1237
1238  const preferredFemaleVoices = [
1239    "Google UK English Female",
1240    "Samantha",
1241    "Victoria",
1242    "Karen",
1243    "Susan"
1244  ];
1245
1246  $scope.femaleVoice = voices.find(v =>
1247    preferredFemaleVoices.includes(v.name) || /female/i.test(v.name)
1248  );
1249}
1250
1251// Try loading voices
1252loadVoices();
1253
1254// Ensure voices are loaded after voiceschanged event
1255if (speechSynthesis.onvoiceschanged !== undefined) {
1256  speechSynthesis.onvoiceschanged = loadVoices;
1257}
1258
1259$scope.$watch('analysis', function(newVal) {
1260  if (newVal) {
1261    // Remove <br> tags
1262    var cleanText = newVal.replace(/<br\s*\/?>/gi, '');
1263
1264    $scope.sections = cleanText.split(/\n(?=\d\.\s)/).map(function(part) {
1265      var splitIndex = part.indexOf(':');
1266      return {
1267        title: part.substring(3, splitIndex).trim(),
1268        content: part.substring(splitIndex + 1).trim(),
1269        isSpeaking: false
1270      };
1271    });
1272  }
1273});
1274
1275$scope.toggleSpeech = function(section, index) {
1276  if (section.isSpeaking) {
1277    synth.cancel();
1278    section.isSpeaking = false;
1279    return;
1280  }
1281
1282  // Stop all other sections
1283  $scope.sections.forEach((sec, idx) => {
1284    if (idx !== index) sec.isSpeaking = false;
1285  });
1286
1287  synth.cancel();
1288
1289  let utterance = new SpeechSynthesisUtterance(section.content);
1290  utterance.lang = 'en-US';
1291
1292  // Use the selected female voice if available
1293  if ($scope.femaleVoice) {
1294    utterance.voice = $scope.femaleVoice;
1295  }
1296
1297  section.isSpeaking = true;
1298
1299  utterance.onend = function () {
1300    $scope.$apply(() => {
1301      section.isSpeaking = false;
1302    });
1303  };
1304
1305  currentUtterance = utterance;
1306  synth.speak(utterance);
1307};
1308
1309
1310// 	$scope.sections = $scope.analysis.split(/\n(?=\d\.\s)/).map(function(part) {
1311//     var splitIndex = part.indexOf(':');
1312//     return {
1313//         title: part.substring(3, splitIndex).trim(),
1314//         content: part.substring(splitIndex + 1).trim()
1315//     };
1316// });
1317
1318    // $scope.parseAnalysis = function(text) {
1319    //     const parts = text.split(/\n(?=\d\.\s)/); // split at new lines starting with "1. ", "2. ", etc.
1320    //     $scope.sections = []; // Reset in case of re-use
1321
1322    //     parts.forEach(function(part) {
1323    //         const splitIndex = part.indexOf(':');
1324    //         const title = part.substring(3, splitIndex).trim(); // Skip number + dot + space
1325    //         const content = part.substring(splitIndex + 1).trim();
1326    //         $scope.sections.push({ title: title, content: content });
1327    //     });
1328    // };
1329
1330    // // Call the function immediately to populate sections
1331    // $scope.parseAnalysis($scope.analysis);
1332
1333
1334
1335	$scope.submitForm = function() 
1336	{
1337		if ($scope.email) 
1338		{
1339			$scope.loader = true; 
1340			//var config = {params: { path : $scope.path,unid:$scope.uniqueId,email:$scope.email}};
1341
1342			//var config = {params: { paragraph : $scope.paragraph,analysis : $scope.analysis,email:$scope.email}};
1343
1344			// var postData = {
1345			//     paragraph: $scope.paragraph,
1346			//     analysis: $scope.analysis,
1347			//     email: $scope.email
1348			// };
1349
1350		
1351         var fd = new FormData();
1352		fd.append("paragraph", angular.toJson($scope.paragraph));
1353		fd.append("analysis", angular.toJson($scope.analysis));
1354		fd.append("email", angular.toJson($scope.email));
1355
1356		fd.append("src", angular.toJson($scope.srccc));
1357		fd.append("dst", angular.toJson($scope.dsttt));
1358		fd.append("calldate", angular.toJson($scope.calldateee));
1359       
1360
1361        var config = {
1362            transformRequest: angular.identity,
1363            headers: {
1364                'Content-Type': undefined
1365            }
1366        };
1367
1368
1369			$http.post(base_url + "call_records/transcript_ToEmail",fd,config).then(function(response) {
1370				$scope.showEmailForm = false;
1371				// console.log(response);
1372				if(response.status == 200)
1373				{
1374					$scope.email = "";
1375					swal({
1376						type: 'success',
1377						html: `<h4>Mail sent successfully!</h4>`,
1378						timer: 3000,
1379						showConfirmButton: false
1380					});
1381				}
1382				else
1383				{
1384					swal({
1385						type: 'error',
1386						html: response.data.errmsg,
1387						timer: 3000,
1388						showConfirmButton: false
1389					});
1390				}
1391				$scope.loader = false;
1392			});
1393			
1394        }
1395	};
1396	
1397	$scope.closeActionNew = function(){ $('#voicemaillisten').modal('hide'); $('#transcriptshow').modal('hide'); var vid = document.getElementById("myAudio");  vid.pause(); }
1398	$scope.closeAction = function(){ $('#pdfModal').hide(); }
1399	$scope.exportForm = function(){ $('#pdfModal').show(); }
1400	$scope.exportPDF = function (emailid,varResult){
1401		$scope.loader = true; var config = {params: { formdata : $scope.callreports, emailid:emailid}};
1402		$http.post(base_url+"call_records/pdf_generate", null, config).then(function(response){ 
1403			$('#pdfModal').hide(); $scope.loader = false; $scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); 
1404		});
1405	};
1406	
1407	$scope.previousdayReport = function () 
1408	{		
1409		$scope.loader = true; var config = {params: { formdata : $scope.callreports}};
1410		$http.post(base_url+"call_records/previousday_report", null, config).then(function(response){
1411			$scope.loader = false; $scope.tableData = true; 
1412			$scope.callrecords = response.data.tabledata; 
1413			$scope.totalclcount = response.data.totalclcount;  
1414			$scope.totcldura = response.data.totcldura;
1415			$scope.recordCount = $scope.callrecords.tabledata.length;
1416		});
1417	};
1418
1419	$scope.emails = {
1420		email: ''
1421	};
1422
1423	$scope.invalidEmails = [];
1424
1425	$scope.validateEmails = function () 
1426	{
1427		const emailList = $scope.emails.email.split(',').map(email => email.trim());
1428		const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
1429
1430		$scope.invalidEmails = emailList.filter(email => email && !emailPattern.test(email));
1431	};
1432
1433	$scope.sendEmail = function () 
1434	{
1435		$scope.validateEmails();
1436
1437		if ($scope.invalidEmails.length > 0) 
1438		{
1439			swal({
1440			type: 'error',
1441			html: `<h4>Invalid Email(s): ${$scope.invalidEmails.join(', ')}</h4>`,
1442			timer: 4000,
1443			showConfirmButton: true,
1444			});
1445			return;
1446		}
1447
1448		$scope.loader = true;
1449		var config = {
1450			params: {
1451			formdata: $scope.callreports, emails: $scope.emails.email
1452			}
1453		};
1454
1455		$http.post(base_url + "call_records/sendEmail_previousday_report", null, config).then(function (response) 
1456		{
1457			$scope.loader = false;
1458			$('#staticBackdrop').modal('hide');
1459			swal({
1460				type: response.data.status,
1461				html: `<h4>${response.data.message}</h4>`,
1462				timer: 3000,
1463				showConfirmButton: false,
1464			});
1465		});
1466	};
1467
1468	
1469	$scope.inc_internal = '1';
1470	$scope.datewiseReport = function () {		
1471		$scope.loader = true; var config = {params: { formdata : $scope.callreports}};
1472		$http.post(base_url+"call_records/bwtdates_report", null, config).then(function(response)
1473		{
1474			$scope.loader = false; console.log(response.data);
1475			if(response.data.errcode == 202){ 
1476				//$scope.ajaxResult = "Between Dates cannot be more than a week"; myService.resMessage($scope,$timeout,202); 
1477				swal({
1478				type: 'error',
1479				html: `<h4>Between Dates cannot be more than a week.</h4>`,
1480				timer: 3000,
1481				showConfirmButton:false,
1482			});
1483			}else{ $scope.tableData = true; $scope.calldates = response.data.dates;$scope.extdata = response.data.extdata; $scope.recordCount = $scope.extdata.length; }
1484		});
1485	};
1486	
1487	$scope.consolidatedReport = function () {
1488		$scope.loader = true; var config = {params: { formdata : $scope.callreports}};
1489		$http.post(base_url+"call_records/consolidated_report", null, config).then(function(response){
1490			$scope.loader = false; $scope.tableData = true; $scope.callrecords = response.data; $scope.recordCount = $scope.callrecords.length;
1491		});
1492	};
1493});
1494
1495function downloadAction()
1496{
1497	var download = document.getElementById("download").value;
1498	if(download != ''){ 
1499		document.downloadNow.submit(); return true;
1500	}else{ 
1501		alert("Select atleast one record!"); return false; 
1502	}
1503}
1504//For Call Reports(CDR's) Page - End
1505
1506//For Individual Call Reports(CDR's) Page - Start
1507myapp.controller("smsreports", function($scope,$http,$timeout,myService) 
1508{
1509
1510	$scope.pageno = 1; // initialize page no to 1
1511	$scope.selectables = [ {value: 500}, {value: 800}, {value: 1000}, {value: 1500}, {value: 2000} ];
1512	$scope.pageSize = "500";
1513	
1514	$scope.callreports = {starttime:'00',endtime:'23',sms_internal: 'BOTH'};
1515	
1516	$scope.loadDocu = function () 
1517	{
1518		$scope.loader = true; var config = {params:{page:1, size:5000, keyword:$scope.searchKey}};
1519		$http.post(base_url+"user_extensions/tabledata", null, config).then(function(response){ $scope.loader = false;
1520			$scope.userext = response.data.tabledata; $scope.outcid = response.data.outcid;
1521			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.userext,response.data.totalCount);
1522		});
1523	};
1524	$scope.loadDocu();
1525
1526
1527	$scope.onExtensionChange = function(selectedExtension) {
1528	  var selectedExt = $scope.userext.find(function(ext) {
1529	    return ext.extension === selectedExtension;
1530	  });
1531	  if (selectedExt) {
1532	    $scope.extdisname = selectedExt.name
1533	  }
1534  };
1535
1536	
1537	$scope.smsRecords = function () 
1538	{
1539		 
1540		if($scope.callreports.sd != '' && $scope.callreports.sd != undefined && $scope.callreports.inc_internal != '' && $scope.callreports.inc_internal != undefined)
1541		{
1542			if($scope.callreports.messagetype == '' || $scope.callreports.messagetype == undefined)
1543			{
1544				$scope.callreports = angular.extend($scope.callreports,{messagetype:'O'});
1545			}
1546			$scope.callreports = angular.extend($scope.callreports,{messagetype:$scope.callreports.inc_internal});
1547			//console.log($scope.callreports.inc_internal);
1548			$scope.loader = true; var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
1549			$http.post(base_url+"call_records/sms_data", null, config).then(function(response){ $scope.loader = false; $scope.tableData = true;
1550				$scope.smsreport = response.data.tabledata;
1551				$scope.smscounts = response.data.totalCount;
1552				$scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
1553				myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.smsreport,response.data.totalCount);
1554				//if(response.data.errmsg != ''){ $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,202); }
1555			});
1556		}
1557		else
1558		{
1559			//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
1560			if($scope.callreports.sd == null || $scope.callreports.sd == undefined){
1561				swal({
1562					html: `<h4>Please Select Extension.</h4>`,
1563					icon: "error",
1564					timer: 3000,
1565					showConfirmButton:false,
1566				});
1567			}
1568
1569			else if($scope.callreports.sd == null || $scope.callreports.inc_internal == undefined){
1570				swal({
1571					html: `<h4>Please Select Inc Internal.</h4>`,
1572					icon: "error",
1573					timer: 3000,
1574					showConfirmButton:false,
1575				});
1576			}
1577			
1578		}
1579	};
1580	
1581	$scope.setCurrent = function(pageno){ $scope.pageno = pageno; $scope.smsConsolidateRecords(); }	
1582	$scope.smsConsolidateRecords = function(smsrecords)
1583	{
1584		$scope.loader = true; var config = {params: {formdata : smsrecords}};
1585		$http.post(base_url+"call_records/sms_data_consolidate", null, config).then(function(response)
1586		{ 
1587			$scope.loader = false; $scope.tableData = true;
1588			$scope.smsconsolidatereport = response.data.tabledata;
1589			$scope.smsconsolidatecounts = response.data.totalCount;
1590		});
1591	};
1592	
1593	$scope.viewAction = function(report)
1594	{
1595		$scope.callreports = angular.extend($scope.callreports,{sd:report.src,messagetype:'O'}); console.log($scope.callreports);
1596		$scope.loader = true; var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
1597		$http.post(base_url+"call_records/sms_data_did", null, config).then(function(response)
1598		{ 
1599			$scope.loader = false; $scope.tableData = true;
1600			$scope.smsreport = response.data.tabledata;
1601			$scope.smscounts = response.data.totalCount;
1602			$scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
1603			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.smsreport,response.data.totalCount);
1604			$('#voicemaillisten').modal('show');
1605		});
1606		
1607	}
1608	$scope.closeActionNew = function(){ $('#voicemaillisten').modal('hide'); }
1609});
1610
1611//For Individual Call Reports(CDR's) Page - Start
1612myapp.controller("smsreportsconsolidate", function($scope,$http,$timeout,myService) 
1613{
1614	$scope.callreports = {starttime:'00',endtime:'23',messagetype:'O',sms_internal: 'BOTH'};
1615	$scope.pageno = 1; // initialize page no to 1
1616	$scope.selectables = [ {value: 2000}, {value: 3000}, {value: 4000}, {value: 5000}, {value: 6000} ];
1617	$scope.pageSize = "2000";
1618	$scope.pageSMSData = function(pageno){ $scope.pageno = pageno; console.log($scope.callreports); $scope.viewAction($scope.callreports); }	
1619	$scope.pageSMSINData = function(pageno){ $scope.pageno = pageno; console.log($scope.callreports); $scope.viewINAction($scope.callreports); }	
1620	
1621	
1622	$scope.smsConsolidateRecords = function(smsrecords)
1623	{
1624		$scope.loader = true; var config = {params: {formdata : smsrecords}};
1625		$http.post(base_url+"call_records/sms_data_consolidate", null, config).then(function(response)
1626		{ 
1627			$scope.loader = false; $scope.tableData = true;
1628			$scope.smsconsolidatereport = response.data.tabledata;
1629			$scope.smsconsolidatecounts = response.data.totalCount;
1630			$scope.smsconsolidateoutcounts = response.data.totaloutboundcounts;
1631			$scope.smsconsolidateincounts = response.data.totalinboundcounts;
1632		});
1633	};
1634	
1635	$scope.viewAction = function(report)
1636	{
1637		//console.log(report);
1638		$scope.callreports = angular.extend($scope.callreports,{sd:report.src,messagetype:'O'}); console.log($scope.callreports);
1639		$scope.loader = true; var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
1640		$http.post(base_url+"call_records/sms_data_did", null, config).then(function(response)
1641		{ 
1642			$scope.loader = false; $scope.tableData = true; 
1643			$scope.smsreport = response.data.tabledata;
1644			$scope.smscounts = response.data.totalCount;
1645			$scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
1646			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.smsreport,response.data.totalCount);
1647			$('#voicemaillisten').modal('show');
1648		});
1649		
1650	}
1651	$scope.viewINAction = function(report)
1652	{
1653		//console.log(report);
1654		$scope.callreports = angular.extend($scope.callreports,{sd:report.src,messagetype:'I'}); console.log($scope.callreports);
1655		$scope.loader = true; var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
1656		$http.post(base_url+"call_records/sms_data_did", null, config).then(function(response)
1657		{ 
1658			$scope.loader = false; $scope.tableData = true; 
1659			$scope.smsreport = response.data.tabledata;
1660			$scope.smscounts = response.data.totalCount;
1661			$scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
1662			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.smsreport,response.data.totalCount);
1663			$('#voicemaillistenIN').show();
1664		});
1665		
1666	}
1667	$scope.closeActionNew = function(){ $('#voicemaillisten').modal('hide'); $('#voicemaillistenIN').hide(); }
1668});
1669//For Individual Call Reports(CDR's) Page - Start
1670myapp.controller("callreportsIndividual", function($scope,$http,$timeout,myService) 
1671{	
1672
1673
1674   $scope.extnumberseg = document.getElementById('extnumberseg').value;
1675
1676   $http.get(base_url + "call_records/extnumberseg/" + $scope.extnumberseg)
1677    .then(function(response) {
1678        $scope.extnumbersegdata = response.data;
1679
1680       // console.log($scope.extnumbersegdata)
1681    });
1682  
1683	$scope.satext = '';
1684	$scope.getExtensionData = function()
1685	{
1686		$scope.loader = true; 
1687		var config = { params: { ext:$scope.selectedextension } };
1688		$http.post(base_url+"user_extensions/getExtensionSelected", null, config).then(function(response)
1689		{ 
1690			$scope.loader = false; 
1691			window.location.reload();
1692		});
1693	}
1694	
1695	$http.get(base_url+"user_extensions/subext_list").then(function(response)
1696	{ 
1697		$scope.cc = response.data.assignext;
1698		//setTimeout(function(){ $scope.satext = $scope.selectedextension = response.data.selectedext; }, 2000);
1699		$timeout(function () { $scope.satext = $scope.selectedextension = response.data.selectedext;  }, 3000);
1700	});
1701	
1702	$scope.getAlert = function()
1703	{
1704		//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
1705		swal({
1706				html: `<h4>Please Select Extension.</h4>`,
1707				type: "error",
1708				timer: 3000,
1709				showConfirmButton:false,
1710			});
1711
1712	}
1713	$scope.ext = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
1714	$scope.pageno = 1; // initialize page no to 1
1715	$scope.selectables = [ {value: 500},{value: 700},{value: 900}, {value: 1000}, {value: 1500}, {value: 2000} ];
1716	$scope.pageSize = "500"; 
1717	$scope.callreports = {sd:$scope.ext};
1718	
1719	//Search Keywords in Table
1720	$scope.searchKey = '';	
1721	$scope.searchData = function(){ $scope.callRecords(); }	
1722	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.callRecords(); }	
1723	$scope.pageSMSData = function(pageno){ $scope.pageno = pageno; $scope.smsRecords(); }	
1724	$scope.callRecords = function () 
1725	{
1726		$scope.loader = true; var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
1727		$http.post(base_url+"call_records/individual_tabledata", null, config).then(function(response){ $scope.loader = false; $scope.tableData = true;
1728			$scope.callreport = response.data.tabledata; $scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
1729			$scope.answered = response.data.answered; $scope.noanswer = response.data.noanswered; $scope.busy = response.data.busy; $scope.voicemail = response.data.voicemail;
1730			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.callreport,response.data.totalCount);
1731			if(response.data.errmsg != ''){ $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,202); }
1732		});
1733	};
1734	if($scope.ext != ''){ $scope.callRecords(); }
1735	
1736	$scope.smsRecords = function () 
1737	{
1738		$scope.loader = true; 
1739		var config = {params: { page:$scope.pageno, size:$scope.pageSize, formdata : $scope.callreports}};
1740		$http.post(base_url+"call_records/sms_data", null, config).then(function(response){ $scope.loader = false; $scope.tableData = true;
1741			 $scope.totalCounts = response.data.totalCount;
1742			 $scope.smsreport = response.data.tabledata; $scope.inbound = response.data.inbound; $scope.outbound = response.data.outbound;
1743			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.smsreport,response.data.totalCount);
1744			//if(response.data.errmsg != ''){ $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,202); }
1745			
1746		});
1747	};
1748	
1749	$scope.voiceMailPlay = function(exten,exten1,exten2,exten3)
1750	{
1751		var fold1 = exten2.replace(/~/g, "/"); //alert(fold1);
1752		var fold = fold1.replace("~", "/");
1753		var urls = fold1;//exten+".vitelglobal.com/"+exten1+fold;
1754		var config = {params: { path : fold1}};
1755		$http.post(base_url+"call_records/getCdrFile", null, config).then(function(response)
1756		{ 
1757			$('#voicemaillisten').modal('show');
1758			document.getElementById("extplay").innerHTML = '<audio id="myAudio" controls autoplay controlsList="nodownload"><source src="'+response.data.tabledata+'" type="audio/wav"></audio>';
1759		});
1760	}
1761	$scope.closeActionNew = function(){ $('#voicemaillisten').modal('hide'); var vid = document.getElementById("myAudio");  vid.pause();}
1762	
1763	$scope.closeAction = function(){ $('#pdfModal').hide(); }
1764	$scope.exportForm = function(){ $('#pdfModal').show(); }
1765	$scope.exportPDF = function (emailid,varResult){
1766		$scope.loader = true; var config = {params: { formdata : $scope.callreports, emailid:emailid}};
1767		$http.post(base_url+"call_records/pdf_generate", null, config).then(function(response){ 
1768			$('#pdfModal').hide(); $scope.loader = false; $scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); 
1769		});
1770	};
1771	
1772	$scope.searchAction = function(callreports){ $scope.callreports = callreports; $scope.callRecords(); }
1773	
1774	$scope.user = {callreport:''};
1775	$scope.checkAll = function() {
1776    	if($scope.chkVal == true){
1777			$scope.user = {callreport: angular.copy($scope.callreport)};
1778		}else{
1779			$scope.user = {callreport:''};
1780		}
1781  	};
1782});
1783//For Individual Call Reports(CDR's) Page - End
1784
1785//For Schedule Report Page - Start
1786myapp.controller("scheduleReport", function($scope,$http,$timeout,myService) 
1787{	
1788	$scope.weekly = [{id:"D",name:"Daily"},{id:"W",name:"Weekly"},{id:"M",name:"Monthly"}]; 
1789	$scope.call_type = 'C';
1790	$scope.getConsolidate = function(){
1791		$http.get(base_url+"schedule_report/get_consoliddata").then(function(response){
1792			$scope.consolidate_data = response.data.userdata; 
1793			$scope.extlist = response.data.extlist;
1794			if(response.data.status == 'S'){ $scope.selectedType = true;}
1795		});
1796	};
1797	$scope.getConsolidate();
1798
1799
1800
1801	$scope.setSelectedUser = function(user) 
1802	{
1803		$scope.selectedUser = user;
1804	};
1805
1806	
1807	
1808	$scope.addConsolidate = function(list){ 
1809		$scope.consolid = {cid:'',hour:'00',minutes:'00',extlist:'Y',status:'0',call_type:'C'}; 
1810		$scope.selectedType = true; 
1811		$scope.consTab = true; 
1812
1813		window.scrollTo(0, 0);
1814    
1815		// Use a timeout to ensure the reset is noticed by the browser
1816		setTimeout(function() {
1817			// Scroll to the target div
1818			document.getElementById('targetDiv').scrollIntoView({ behavior: 'smooth' });
1819		}, 100);
1820		
1821	}
1822	$scope.editConsolidate = function(list)
1823	{ 
1824		$scope.consolid = list;
1825
1826		// Convert wstring ("Daily", etc.) back to IDs
1827		const nameToIdMap = {
1828			"Daily": "D",
1829			"Weekly": "W",
1830			"Monthly": "M"
1831		};
1832
1833		const weekIds = (list.wstring || []).map(name => nameToIdMap[name]);
1834		localStorage.setItem('checkedValues', JSON.stringify(weekIds));
1835
1836		if (list.status == '0') {
1837			$scope.selectedType = true;
1838		}
1839		$scope.consTab = true;
1840	}
1841	
1842	$scope.toggleWeekSelection = function(week) 
1843	{
1844		let checked = localStorage.getItem('checkedValues');
1845		let selectedWeeks = checked ? JSON.parse(checked) : [];
1846
1847		const index = selectedWeeks.indexOf(week.id);
1848
1849		if (index === -1) {
1850			selectedWeeks.push(week.id);
1851		} else {
1852			selectedWeeks.splice(index, 1);
1853		}
1854
1855		localStorage.setItem('checkedValues', JSON.stringify(selectedWeeks));
1856	};
1857
1858	$scope.consolidatedUpdate = function(consolid,varResult)
1859	{
1860
1861		var weekly = JSON.parse(localStorage.getItem('checkedValues')) || [];
1862		//console.log("Checked Values:", weekly);
1863		consolid.weekly = weekly;
1864
1865		$scope.loader = true; var config = { params: { formdata : consolid} };
1866		$http.post(base_url+"schedule_report/consolidUpdate", null, config).then(function(response){ $scope.loader = false;								
1867			if(response.data.errcode == 200){ $scope.getConsolidate(); 
1868				$scope.consTab = false;
1869				 localStorage.removeItem('checkedValues');
1870
1871    		// Optionally, clear the 'weekly' array if needed
1872             // weekly = [];
1873			 }
1874			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
1875		});
1876    };
1877	
1878	$scope.consolidatedDelete = function(consolid,varResult){
1879		$scope.loader = true; var config = { params: { formdata : consolid} };
1880		$http.post(base_url+"schedule_report/consolidDelete", null, config).then(function(response){ $scope.loader = false;								
1881			$scope.getConsolidate(); $scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
1882		});
1883    };
1884});
1885
1886
1887myapp.controller("newscheduleReport", function($scope,$http,$timeout,myService) 
1888{	
1889	$scope.weekly = [{id:"D",name:"Daily"},{id:"W",name:"Weekly"},{id:"M",name:"Monthly"}]; 
1890	$scope.call_type = 'C';
1891	$scope.getConsolidate = function(){
1892		$http.get(base_url+"schedule_message_report/get_consoliddata").then(function(response){
1893			$scope.consolidate_data = response.data.userdata; $scope.extlist = response.data.extlist;
1894			if(response.data.status == 'S'){ $scope.selectedType = true;}
1895		});
1896	};
1897	$scope.getConsolidate();
1898	
1899	$scope.addConsolidate = function(list){ 
1900		$scope.consolid = {cid:'',hour:'00',minutes:'00',extlist:'Y',status:'0',call_type:'C'}; 
1901		$scope.selectedType = true; 
1902		$scope.consTab = true; 
1903
1904		window.scrollTo(0, 0);
1905    
1906		// Use a timeout to ensure the reset is noticed by the browser
1907		setTimeout(function() {
1908			// Scroll to the target div
1909			document.getElementById('targetDiv').scrollIntoView({ behavior: 'smooth' });
1910		}, 100);
1911		
1912	}
1913	$scope.editConsolidate = function(list){ console.log($scope.consolid); $scope.consolid = list; if(list.status == '0'){ $scope.selectedType = true;} $scope.consTab = true; }
1914	
1915	$scope.consolidatedUpdate = function(consolid,varResult){
1916		$scope.loader = true; var config = { params: { formdata : consolid} };
1917		$http.post(base_url+"schedule_message_report/consolidUpdate", null, config).then(function(response){ $scope.loader = false;								
1918			if(response.data.errcode == 200){ $scope.getConsolidate(); $scope.consTab = false; }
1919			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
1920		});
1921    };
1922	
1923	$scope.consolidatedDelete = function(consolid,varResult){
1924		$scope.loader = true; var config = { params: { formdata : consolid} };
1925		$http.post(base_url+"schedule_message_report/consolidDelete", null, config).then(function(response){ $scope.loader = false;								
1926			$scope.getConsolidate(); $scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
1927		});
1928    };
1929});
1930//For Schedule Report Page - End
1931
1932//For CDR Group Page - Start
1933myapp.controller("cdrgroup", function($scope,$http,$timeout,myService) 
1934{	
1935	$scope.weekly = [{id:"D",name:"Daily"},{id:"W",name:"Weekly"},{id:"M",name:"Monthly"}]; 
1936	$scope.call_type = 'C'; 
1937	$scope.getConsolidate = function()
1938	{
1939		$http.get(base_url+"schedule_report/get_cdrgroup").then(function(response)
1940		{
1941			$scope.consolidate_data = response.data.userdata; $scope.extlist = response.data.extlist;
1942			//if(response.data.status == 'S'){ $scope.selectedType = true;}
1943		});
1944	};
1945	$scope.getConsolidate();
1946	
1947	$scope.addConsolidate = function(list){ 
1948		$scope.consolid = {cid:'',hour:'00',minutes:'00',extlist:'Y',status:'0',call_type:'C'}; 
1949		$scope.selectedType = true; 
1950		$scope.consTab = true; 
1951
1952		window.scrollTo(0, 0);
1953    
1954		// Use a timeout to ensure the reset is noticed by the browser
1955		setTimeout(function() {
1956			// Scroll to the target div
1957			document.getElementById('targetDiv').scrollIntoView({ behavior: 'smooth' });
1958		}, 100);
1959		
1960	}
1961	$scope.editConsolidate = function(list)
1962	{  
1963		$scope.consolid = list; console.log($scope.extlist);  $scope.selectedType = true; $scope.consTab = true; 
1964		setTimeout(function() {
1965			// Scroll to the target div
1966			document.getElementById('targetDiv').scrollIntoView({ behavior: 'smooth' });
1967		}, 100);
1968	}
1969	
1970	$scope.consolidatedUpdate = function(consolid,varResult)
1971	{
1972		$scope.loader = true; var config = { params: { formdata : consolid} };
1973		$http.post(base_url+"schedule_report/cdrgroupUpdate", null, config).then(function(response){ $scope.loader = false;								
1974			if(response.data.errcode == 200){ $scope.getConsolidate(); $scope.consTab = false; }
1975			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
1976		});
1977    };
1978	
1979	$scope.consolidatedDelete = function(consolid,varResult)
1980	{
1981		if(confirm("Are you sure you want to delete group?"))
1982		{
1983			$scope.loader = true; var config = { params: { formdata : consolid} };
1984			$http.post(base_url+"schedule_report/cdrgroupDelete", null, config).then(function(response){ $scope.loader = false;								
1985				$scope.getConsolidate(); $scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
1986			});
1987		}
1988    };
1989});
1990//For CDR Group Report Page - End
1991
1992//For Show Ticket Page - Start
1993myapp.controller("showticketController", function($scope,$http,$timeout,myService) {	
1994
1995const queryString = window.location.search;
1996const urlParams = new URLSearchParams(queryString);
1997const tstatus = urlParams.get('tstatus');
1998
1999 $scope.sortReverse = false; 
2000  $scope.sortColumn = function(column) {
2001    if ($scope.sortType === column) {
2002      $scope.sortReverse = !$scope.sortReverse; 
2003    } else {
2004      $scope.sortType = column;
2005      $scope.sortReverse = false;
2006    }
2007  };
2008  $scope.sortclass = function (column) {
2009        if($scope.sortType === column){
2010            return $scope.sortReverse ? 'arrow-dow' : 'arrow-up'
2011        }
2012        return '';
2013    }
2014
2015	$scope.pageno = 1; // initialize page no to 1
2016	$scope.selectables = [ {value: 2000}, {value: 4000}, {value: 6000} ];
2017	$scope.pageSize = "2000";
2018	if(tstatus == "C"){ $scope.tickstatus = "C"; $scope.activeBtn = "C"; }else { $scope.tickstatus = "O"; $scope.activeBtn = "O";}
2019	
2020	
2021	$scope.searchKey = '';	
2022	$scope.searchData = function()
2023	{ 
2024		$scope.loadInvoice($scope.pageno,$scope.searchKey,$scope.tickstatus); 
2025	}	
2026	$scope.pageData = function(pageno)
2027	{ 
2028		$scope.pageno = pageno;
2029		$scope.loadInvoice($scope.pageno,$scope.searchKey,$scope.tickstatus); 
2030	}	
2031	
2032	$scope.loadInvoice = function (pageno,key,tstatus)
2033	{
2034		$scope.loader = true;
2035		var config = {params: { 
2036			page:$scope.pageno, 
2037			size:$scope.pageSize, 
2038			keyword:key, 
2039			status:tstatus }};
2040		$http.post(base_url+"support/tabledata", null, config).then(function(response)
2041		{
2042			console.log(response.data); $scope.loader = false;
2043			$scope.tickets = response.data.tabledata; $scope.tickstatus = tstatus;
2044			//myService.pagination($scope,pageno,$scope.pageSize,$scope.tickets,response.data.totalCount);
2045			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.tickets,response.data.totalCount);
2046		});
2047	};
2048	
2049	$http.get(base_url+"my_account/user_detail").then(function(response){ $scope.user = response.data; });
2050	$scope.getTicket = function(status){ $scope.loadInvoice($scope.pageno,$scope.searchKey,status); $scope.activeBtn = status; }
2051	$scope.loadInvoice($scope.pageno,$scope.searchKey,$scope.tickstatus);
2052});
2053//For Show Ticket Page - End
2054
2055//For Create Ticket Page - Start
2056myapp.controller("createticketController", function($scope,$http,$timeout,myService)
2057{	
2058	$scope.satext = '';
2059	$scope.getExtensionData = function()
2060	{
2061		$scope.loader = true; 
2062		var config = { params: { ext:$scope.selectedextension } };
2063		$http.post(base_url+"user_extensions/getExtensionSelected", null, config).then(function(response)
2064		{ 
2065			$scope.loader = false; 
2066			window.location.reload();
2067		});
2068	}
2069	
2070	$http.get(base_url+"user_extensions/subext_list").then(function(response)
2071	{ 
2072		$scope.cc = response.data.assignext;
2073		//setTimeout(function(){ $scope.satext = $scope.selectedextension = response.data.selectedext; }, 2000);
2074		$timeout(function () { $scope.satext = $scope.selectedextension = response.data.selectedext; }, 3000);
2075		
2076	});
2077	
2078	$scope.getAlert = function()
2079	{
2080		//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
2081
2082		swal({
2083				html: `<h4>Please Select Extension.</h4>`,
2084				type: "error",
2085				timer: 3000,
2086				showConfirmButton:false,
2087			});
2088
2089	}
2090
2091	$http.get(base_url+"support/category").then(function(response){ $scope.category = response.data; });
2092
2093	// Get Category Updated Code
2094	$scope.subCateDiv = false;
2095	$scope.get_subCategory = function (p_id)
2096	{
2097		// $scope.loader = true;
2098		var config = {params: { p_id : p_id }};
2099		$http.post(base_url+"support/category1", null, config).then(function(response)
2100		{
2101			// $scope.loader = false;
2102			$scope.category1 = response.data;
2103			$scope.subCateDiv = true;
2104		});
2105	};
2106
2107	$http.get(base_url+"support/priority").then(function(response){ $scope.priority = response.data; });
2108
2109	$scope.selectedCategory = null;
2110
2111	$scope.selectCategory = function(category) 
2112	{
2113		$scope.selectedCategory = category;
2114		$scope.get_subCategory(category);
2115	};
2116
2117
2118});
2119//For Show Ticket Page - End	
2120						
2121//For Open Ticket Page - Start		
2122myapp.controller("openticketController", function($scope,$http,$timeout,$location,myService) {	
2123	$tid = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
2124	$scope.loadData = function() {
2125		var config = { params: { ticketid : $tid } };
2126		$http.post(base_url+"open_ticket/ticketdata", null, config).then(function(response){
2127			// console.log(response);
2128			$scope.ticket = response.data.ticketdetail;
2129			$scope.comments = response.data.ticketcomment;
2130			$scope.documents = response.data.ticketdocument;
2131		});
2132	}
2133	
2134	$scope.status = [ {value: "Open"}, {value: "Closed"} ];
2135	$scope.changeStatus = function(status,varResult) {
2136    	var config = { params: {status:status, tid:$tid} };
2137		$http.post(base_url+"open_ticket/change_status", null, config).then(function(response){	
2138			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); $scope.statusAct=false;
2139		});
2140  	};
2141	$scope.loadData();
2142	// setInterval(function () { $scope.loadData(); }, 10000);
2143});
2144//For Open Ticket Page - End
2145
2146//For List of Extensions  Page - Start
2147myapp.controller("userextsettingsAlert", function($scope,$http,$timeout,myService) 
2148{
2149	
2150});	
2151//For List of Extensions  Page - Start
2152myapp.controller("userextsettingsController", function($scope,$http,$timeout,myService) 
2153{	
2154	$scope.satext = ''; $scope.caller = {};
2155	$http.get(base_url+"user_extensions/subext_list").then(function(response)
2156	{ 
2157		$scope.cc = response.data.assignext;
2158		//setTimeout(function(){ $scope.satext = $scope.selectedextension = response.data.selectedext; $scope.caller.extension = response.data.selectedext; $scope.settingsUpdate(); $scope.getCallerID(); }, 2000);
2159		$timeout(function () { $scope.satext = $scope.selectedextension = response.data.selectedext; $scope.caller.extension = response.data.selectedext; $scope.settingsUpdate(); $scope.getCallerID(); }, 3000);
2160		
2161	});
2162	
2163	$scope.call_screens_options = [{id: '0', name: 'Disable'},{id: 'nomemory', name: 'Screen Caller: No Memory'},{id: 'memory', name: 'Screen Caller: Memory'}];
2164	
2165	$scope.getExtensionData = function()
2166	{
2167		$scope.loader = true; 
2168		var config = { params: { ext:$scope.selectedextension } };
2169		$http.post(base_url+"user_extensions/getExtensionSelected", null, config).then(function(response)
2170		{ 
2171			$scope.loader = false; 
2172			window.location.reload();
2173		});
2174	}
2175	
2176	
2177	
2178	$scope.getAlert = function()
2179	{
2180		//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
2181		swal({
2182				html: `<h4>Please Select Extension.</h4>`,
2183				type: "error",
2184				timer: 3000,
2185				showConfirmButton:false,
2186			});
2187	}
2188	
2189	$scope.settingsUpdate = function() 
2190	{
2191		//alert($scope.satext);
2192		$scope.loader = true;
2193		var config = { params: { ext : $scope.satext } };
2194		$http.post(base_url+"user_extensions/editsetting", null, config).then(function(response)
2195		{ $scope.loader = false;																
2196			if(response.data.errcode == 200)
2197			{
2198				$scope.formdata = response.data.errmsg;
2199			}else{
2200				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2201			}
2202		});
2203	};
2204	
2205	$scope.featuresUpdate = function(formdata, varResult) 
2206	{
2207		$scope.loader = true; var config = { params: { formdata:formdata } };
2208		$http.post(base_url+"user_extensions/featuresUpdate", null, config).then(function(response){ $scope.loader = false; 
2209			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2210		});
2211    };
2212	$scope.getCallerID = function(ext)
2213	{ 
2214		$scope.loader = true; 
2215		$http.get(base_url+"user_extensions/edit_callerid").then(function(response){ $scope.loader = false;																
2216			$scope.didlist = response.data; //$scope.caller = {extension:ext.extension, callerid:ext.outboundcid};
2217		});
2218	}
2219	
2220	
2221	$scope.updateCallerID = function(callerid)
2222	{ 
2223		$scope.loader = true; var config = { params: { formdata : callerid} };
2224		$http.post(base_url+"user_extensions/update_callerid", null, config).then(function(response)
2225		{ 
2226			$scope.loader = false;															
2227			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2228		});
2229	}
2230});
2231
2232//For List of Extensions  Page - Start
2233myapp.controller("userextVoicemailController", function($scope,$http,$timeout,myService) 
2234{	
2235	$scope.satext = '';
2236	$http.get(base_url+"user_extensions/subext_list").then(function(response)
2237	{ 
2238		$scope.cc = response.data.assignext;
2239		//setTimeout(function(){ $scope.satext = $scope.selectedextension = response.data.selectedext; $scope.voiceMaillist(response.data.selectedext); }, 2000);
2240		$timeout(function () { $scope.satext = $scope.selectedextension = response.data.selectedext;  $scope.voiceMaillist(response.data.selectedext); }, 3000);
2241	});
2242	
2243	$scope.getExtensionData = function()
2244	{
2245		$scope.loader = true; 
2246		var config = { params: { ext:$scope.selectedextension } };
2247		$http.post(base_url+"user_extensions/getExtensionSelected", null, config).then(function(response)
2248		{ 
2249			$scope.loader = false; 
2250			window.location.reload();
2251		});
2252	}
2253	
2254	function downloadMails()
2255	{
2256		var download = document.getElementById("download").value;
2257		if(download != ''){ 
2258			document.downloadNow.submit(); return true;
2259		}else{ 
2260			alert("Select atleast one record!"); return false; 
2261		}
2262	}
2263	
2264	$scope.deleteVoicemail = function(formdata,varResult)
2265	{
2266		var download = document.getElementById("download").value;
2267		if(download != '')
2268		{ 
2269			if(confirm("Are you sure you want to delete voicemail?"))
2270			{
2271				$scope.loader = true; $scope.arrayText = [];
2272				angular.forEach(formdata, function(value, key){ $scope.arrayText.push(value['dlink']); $scope.arrayText.push(value['dlink1']); });
2273				var jsonstr = JSON.stringify($scope.arrayText); var config = { params: { formdata : jsonstr } };
2274				$http.post(base_url+"user_extensions/delete_all", null, config).then(function(response){ $scope.loader = false; 
2275					if(response.data.errcode == 200){ $scope.voiceMaillist(response.data.ext); $scope.chkVal = false; }
2276					$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2277				});
2278			}
2279		}
2280		else
2281		{ 
2282			//$scope.ajaxResult = 'Select Atleast One!'; myService.resMessage($scope,$timeout,202); 
2283
2284			swal({
2285				html: `<h4>Select Atleast One!</h4>`,
2286				type: "error",
2287				timer: 3000,
2288				showConfirmButton:false,
2289			});
2290		}
2291	}
2292	
2293	$scope.checkAll = function() {
2294    	if($scope.chkVal == true){
2295			$scope.user = {extension: angular.copy($scope.extension)};
2296		}else{
2297			$scope.user = {extension:''};
2298		}
2299  	};
2300	
2301	$scope.voiceMailDelete = function(ext,ext1,exten)
2302	{
2303		if(confirm("Are you sure you want to delete voicemail?"))
2304		{
2305			$scope.loader = true; var config = { params: { ext:ext,ext1:ext1 } };
2306			$http.post(base_url+"user_extensions/delete_voice", null, config).then(function(response){ $scope.loader = false;															
2307				$scope.voiceMaillist(exten); $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2308			});
2309		}
2310	}
2311	
2312	$scope.voiceMailPlayFromBiling = function(exten,exten1,exten2,exten3)
2313	{
2314		var fold1 = exten2.replace("~", "/");
2315		var fold = fold1.replace("~", "/");
2316		var urls = exten+".vitelglobal.com/"+exten1+fold;
2317		console.log(urls);
2318		$scope.loader = true; 
2319		var config = {params: { path : urls,ext:$scope.voicemaillistext}};
2320		$http.post(base_url+"call_records/getCdrFileNew", null, config).then(function(response){ 
2321					// console.log(response);																  
2322			$scope.loader = false; $('#voicemaillisten').modal('show');
2323			document.getElementById("extplay").innerHTML = '<audio  id="myAudio" controls autoplay controlsList="nodownload"><source src="'+response.data.tabledata+'" type="audio/wav"></audio>';
2324		});
2325	}
2326	
2327	$scope.closeActionNew = function(){ $('#voicemaillisten').modal('hide'); var vid = document.getElementById("myAudio");  vid.pause(); }
2328	
2329	$scope.getAlert = function()
2330	{
2331		//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
2332		swal({
2333				html: `<h4>Please Select Extension!</h4>`,
2334				type: "error",
2335				timer: 3000,
2336				showConfirmButton:false,
2337			});
2338	}
2339
2340	
2341	$scope.voiceMaillist = function(ext)
2342	{
2343		$scope.voicemaillistext = ext;
2344		$scope.loader = true; var config = { params: { ext : ext } };
2345		$http.post(base_url+"user_extensions/voicemail_list", null, config).then(function(response){ $scope.loader = false;													
2346			 $scope.totalCount = response.data.totalCount; $scope.user = {extension:''};
2347			if(response.data.errcode == 200){
2348				$scope.extension = response.data.errmsg; $scope.voicemailList = true;  $scope.headopens = true;
2349			}else{
2350				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2351			}
2352		});
2353	}
2354});	
2355//For List of Extensions  Page - Start
2356myapp.controller("userextFollowsettingsController", function($scope,$http,$timeout,myService) 
2357{	
2358	$scope.satext = ''; $scope.autopro = {};
2359	$http.get(base_url+"user_extensions/subext_list").then(function(response)
2360	{ 
2361		$scope.cc = response.data.assignext;
2362		//setTimeout(function(){ $scope.satext = $scope.selectedextension = response.data.selectedext; $scope.autopro = angular.extend($scope.autopro,{extension:response.data.selectedext}); $scope.settingsUpdate(); $scope.voiceMail(); }, 2000);
2363		$timeout(function () { $scope.satext = $scope.selectedextension = response.data.selectedext; $scope.autopro = angular.extend($scope.autopro,{extension:response.data.selectedext}); $scope.settingsUpdate(); $scope.voiceMail(); }, 3000);
2364	});
2365	
2366	$scope.updateAutoProvision = function(callerid)
2367	{ 
2368		$scope.loader = true; var config = { params: { formdata : callerid} };
2369		var phonedevice = document.getElementById("phonedevice").value;
2370		var model = document.getElementById('phonemodel').value;
2371		if(model == "CISCO-7821" || model == "CISCO-7841" || model == "CISCO-8845" || model == "CISCO-8832")
2372		{
2373			phonedevice = "CISCOSPA";
2374		}
2375		if(phonedevice == "CISCOSPA")
2376		{
2377			$http.post(base_url+"user_extensions/auto_provision", null, config).then(function(response){ $scope.loader = false;															
2378				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2379				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2380			});
2381		}
2382		else if(phonedevice == "CISCO")
2383		{
2384		
2385			
2386			$http.post(base_url+"user_extensions/auto_provision_cisco", null, config).then(function(response){ $scope.loader = false;															
2387				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2388				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2389			});
2390		}
2391		else if(phonedevice == "POLYCOM")
2392		{
2393			$http.post(base_url+"user_extensions/auto_provision_polycom", null, config).then(function(response){ $scope.loader = false;															
2394				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2395				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2396			});
2397		}
2398		else if(phonedevice == "YEALINK")
2399		{
2400			$http.post(base_url+"user_extensions/auto_provision_yealink", null, config).then(function(response){ $scope.loader = false;															
2401				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2402				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2403			});
2404		}
2405		else if(phonedevice == "GreandStream")
2406		{
2407			$http.post(base_url+"user_extensions/auto_provision_greandstream", null, config).then(function(response){ $scope.loader = false;															
2408				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2409				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2410			});
2411		}
2412		else if(phonedevice == "Telekonnectors")
2413		{ 
2414			$http.post(base_url+"user_extensions/auto_provision_telekonnectors", null, config).then(function(response){ $scope.loader = false;															
2415				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2416				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2417			});
2418		}
2419		
2420	}
2421	
2422	$scope.getExtensionData = function()
2423	{
2424		$scope.loader = true; 
2425		var config = { params: { ext:$scope.selectedextension } };
2426		$http.post(base_url+"user_extensions/getExtensionSelected", null, config).then(function(response)
2427		{ 
2428			$scope.loader = false; 
2429			window.location.reload();
2430		});
2431	}
2432	
2433	
2434	$scope.getAlert = function()
2435	{
2436		//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
2437		swal({
2438				html: `<h4>Please Select Extension!</h4>`,
2439				type: "error",
2440				timer: 3000,
2441				showConfirmButton:false,
2442			});
2443	}
2444	
2445	$scope.settingsUpdate = function() 
2446	{
2447		//alert($scope.satext);
2448		$scope.loader = true;
2449		var config = { params: { ext : $scope.satext } };
2450		$http.post(base_url+"user_extensions/editsetting", null, config).then(function(response)
2451		{ $scope.loader = false;																
2452			if(response.data.errcode == 200)
2453			{
2454				$scope.formdata = response.data.errmsg; console.log(response.data);
2455			}else{
2456				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2457			}
2458		});
2459	};
2460	
2461	$scope.voiceMail = function(){
2462		//$scope.voicemailname = ext;
2463		$scope.loader = true; var config = { params: { ext : $scope.satext } };
2464		$http.post(base_url+"user_extensions/editvoicemail", null, config).then(function(response){ $scope.loader = false;															
2465			if(response.data.errcode == 200){
2466				$scope.setting = response.data.errmsg; 
2467			}else{
2468				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2469			}
2470		});
2471	}
2472	
2473	
2474	$scope.settingUpdate = function(formdata, varResult) { 
2475		$scope.loader = true; var config = { params: { formdata : formdata } };
2476		$http.post(base_url+"user_extensions/voicemailUpdate", null, config).then(function(response){ $scope.loader = false;																
2477			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2478		});			
2479    };
2480	
2481	
2482	$scope.followUpdate = function(formdata, varResult) 
2483	{
2484		$scope.cnf = 'DISABLED'; $scope.btnlist = 0;
2485		if(document.getElementById('fwme_enable').checked){ $scope.cnf = 'ENABLED'; }
2486		if(formdata.follow_me_list != '' && $scope.cnf == 'ENABLED'){ $scope.btnlist = 1; }
2487		if(formdata.follow_me_list == '' && $scope.cnf == 'DISABLED'){ $scope.btnlist = 1; }
2488		
2489		if($scope.btnlist == 1){
2490			$scope.loader = true; var config = { params: { formdata:formdata,cnf:$scope.cnf } };
2491			$http.post(base_url+"user_extensions/followUpdate", null, config).then(function(response){ $scope.loader = false; 
2492				if(response.data.errcode == 200){ $scope.loadDocu(); }
2493				$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2494			});
2495		}else{
2496			$scope.errormsg = "Please enter Follow Me List & select User Confirmation"; $timeout(function (){ $scope.errormsg = ''; }, 3000);
2497		}	
2498    };
2499	
2500	$scope.call_screens = [{id: '0', name: 'Disable'},{id: 'nomemory', name: 'Screen Caller: No Memory'},{id: 'memory', name: 'Screen Caller: Memory'}];
2501	
2502	$scope.call_screens_options = [{id: '0', name: 'Disable'},{id: 'nomemory', name: 'Screen Caller: No Memory'},{id: 'memory', name: 'Screen Caller: Memory'}];
2503	
2504	$scope.firstfors = [ {value: '0'},{value: '1'},{value: '2'},{value: '3'},{value: '4'},{value: '5'},{value: '6'},{value: '7'},{value: '8'},{value: '9'},{value: '10'},{value: '11'},{value: '12'},{value: '13'},{value: '14'},{value: '15'},{value: '16'},{value: '17'},{value: '18'},{value: '19'},{value: '20'},{value: '21'},{value: '22'},{value: '23'},{value: '24'},{value: '25'},{value: '26'},{value: '27'},{value: '28'},{value: '29'},{value: '30'}];
2505	
2506	$scope.listfors = [ {value: '0'},{value: '1'},{value: '2'},{value: '3'},{value: '4'},{value: '5'},{value: '6'},{value: '7'},{value: '8'},{value: '9'},{value: '10'},{value: '11'},{value: '12'},{value: '13'},{value: '14'},{value: '15'},{value: '16'},{value: '17'},{value: '18'},{value: '19'},{value: '20'},{value: '21'},{value: '22'},{value: '23'},{value: '24'},{value: '25'},{value: '26'},{value: '27'},{value: '28'},{value: '29'},{value: '30'},{value: '31'},{value: '32'},{value: '33'},{value: '34'},{value: '35'},{value: '36'},{value: '37'},{value: '38'},{value: '39'},{value: '40'},{value: '41'},{value: '42'},{value: '43'},{value: '44'},{value: '45'},{value: '46'},{value: '47'},{value: '48'},{value: '49'},{value: '50'},{value: '51'},{value: '52'},{value: '53'},{value: '54'},{value: '55'},{value: '56'},{value: '57'},{value: '58'},{value: '59'},{value: '60'}];
2507	
2508	$scope.strategys = [ {value: 'ringallv2'},{value: 'ringallv2-prim'},{value: 'ringall'},{value: 'ringall-prim'},{value: 'hunt'},{value: 'hunt-prim'},{value: 'memoryhunt'},{value: 'memoryhunt-prim'},{value: 'firstavailable'},{value: 'firstnotonphone'}];
2509	
2510	$scope.formats = [{id: '.WAV', name: 'Default (.WAV)'},{id: '.wav', name: 'Best Quality (.wav)'},{id: '.gsm', name: 'Smallest Download (.gsm)'}];
2511});
2512//For List of Extensions  Page - Start
2513myapp.controller("userextlistController", function($scope,$http,$timeout,myService) 
2514{	
2515
2516	$scope.sortReverse = false; 
2517  $scope.sortColumn = function(column) {
2518    if ($scope.sortType === column) {
2519      $scope.sortReverse = !$scope.sortReverse; 
2520    } else {
2521      $scope.sortType = column;
2522      $scope.sortReverse = false;
2523    }
2524  };
2525  $scope.sortclass = function (column) {
2526        if($scope.sortType === column){
2527            return $scope.sortReverse ? 'arrow-dow' : 'arrow-up'
2528        }
2529        return '';
2530    }
2531
2532	$scope.pageno = 1; // initialize page no to 1
2533	$scope.selectables = [ {value: 500},{value: 600},{value: 700}, {value: 800}, {value: 900}, {value: 1000} ];
2534	$scope.pageSize = "500"; 
2535	$scope.voicemaillistext = '';
2536	$scope.searchKey = '';	
2537	$scope.searchData = function(){ $scope.loadDocu(); }	
2538	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.loadDocu(); }	
2539	$scope.loadDocu = function () {
2540		$scope.loader = true; var config = {params:{page:$scope.pageno, size:$scope.pageSize, keyword:$scope.searchKey}};
2541		$http.post(base_url+"user_extensions/tabledata", null, config).then(function(response){ $scope.loader = false;
2542			// console.log(response);
2543			$scope.userext = response.data.tabledata; $scope.outcid = response.data.outcid;
2544			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.userext,response.data.totalCount);
2545		});
2546	};
2547	$scope.loadDocu();
2548
2549// 	$scope.getextno = function(extension) {
2550//            var config = {params:{ext:extension}};
2551// 		$http.post(base_url+"user_extensions/getnoticeperiod", null, config).then(function(response){
2552// 			$scope.getnotice = response.data; 
2553// 		});
2554  
2555// };
2556
2557// $scope.noticePeriods = {}; // Object to store notice periods by extension
2558
2559// $scope.getextno = function(extension) {
2560//     var config = { params: { ext: extension } };
2561//     $http.post(base_url + "user_extensions/getnoticeperiod", null, config)
2562//         .then(function(response) {
2563//             $scope.noticePeriods[extension] = response.data; // Store result in the object
2564//         }, function(error) {
2565//             console.error("Error fetching notice period for extension", extension, ":", error);
2566//         });
2567// };
2568
2569// $scope.noticePeriods = {}; // Initialize cache
2570
2571// $scope.getextno = function (extension) {
2572//     if (!$scope.noticePeriods.hasOwnProperty(extension)) {
2573//         $scope.noticePeriods[extension] = null; // Default state
2574//     }
2575
2576//     var config = { params: { ext: extension } };
2577//     $http.post(base_url + "user_extensions/getnoticeperiod", null, config)
2578//         .then(function (response) {
2579//             console.log("Fetched for", extension, ":", response.data); // Debug log
2580//             $scope.noticePeriods[extension] = response.data; // Update cache
2581//         }, function (error) {
2582//             console.error("Error fetching notice period:", error);
2583//             $scope.noticePeriods[extension] = ''; // Fallback
2584//         });
2585// };
2586
2587
2588	
2589	$scope.call_screens = [{id: '0', name: 'Disable'},{id: 'nomemory', name: 'Screen Caller: No Memory'},{id: 'memory', name: 'Screen Caller: Memory'}];
2590	
2591	$scope.firstfors = [ {value: '0'},{value: '1'},{value: '2'},{value: '3'},{value: '4'},{value: '5'},{value: '6'},{value: '7'},{value: '8'},{value: '9'},{value: '10'},{value: '11'},{value: '12'},{value: '13'},{value: '14'},{value: '15'},{value: '16'},{value: '17'},{value: '18'},{value: '19'},{value: '20'},{value: '21'},{value: '22'},{value: '23'},{value: '24'},{value: '25'},{value: '26'},{value: '27'},{value: '28'},{value: '29'},{value: '30'}];
2592	
2593	$scope.listfors = [ {value: '0'},{value: '1'},{value: '2'},{value: '3'},{value: '4'},{value: '5'},{value: '6'},{value: '7'},{value: '8'},{value: '9'},{value: '10'},{value: '11'},{value: '12'},{value: '13'},{value: '14'},{value: '15'},{value: '16'},{value: '17'},{value: '18'},{value: '19'},{value: '20'},{value: '21'},{value: '22'},{value: '23'},{value: '24'},{value: '25'},{value: '26'},{value: '27'},{value: '28'},{value: '29'},{value: '30'},{value: '31'},{value: '32'},{value: '33'},{value: '34'},{value: '35'},{value: '36'},{value: '37'},{value: '38'},{value: '39'},{value: '40'},{value: '41'},{value: '42'},{value: '43'},{value: '44'},{value: '45'},{value: '46'},{value: '47'},{value: '48'},{value: '49'},{value: '50'},{value: '51'},{value: '52'},{value: '53'},{value: '54'},{value: '55'},{value: '56'},{value: '57'},{value: '58'},{value: '59'},{value: '60'}];
2594	
2595	$scope.strategys = [ {value: 'ringallv2'},{value: 'ringallv2-prim'},{value: 'ringall'},{value: 'ringall-prim'},{value: 'hunt'},{value: 'hunt-prim'},{value: 'memoryhunt'},{value: 'memoryhunt-prim'},{value: 'firstavailable'},{value: 'firstnotonphone'}];
2596	
2597	$scope.formats = [{id: '.WAV', name: 'Default (.WAV)'},{id: '.wav', name: 'Best Quality (.wav)'},{id: '.gsm', name: 'Smallest Download (.gsm)'}];
2598		
2599	$scope.editAction = function(ext){
2600		$scope.loader = true; var config = { params: { ext : ext.extension } };
2601		$http.post(base_url+"user_extensions/editsetting", null, config).then(function(response){ $scope.loader = false;																
2602			if(response.data.errcode == 200){
2603				$scope.formdata = response.data.errmsg; $('#formModal').modal('show');
2604			}else{
2605				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2606			}
2607		});
2608	}
2609	
2610	$scope.editSMSText = function(ext)
2611	{
2612		$scope.smstext = ext; $('#smsTextPopup').show();
2613	}
2614
2615	$scope.closeActionst = function()
2616	{ 
2617		$('#smsTextPopup').hide(); 
2618		
2619	}
2620	
2621	$scope.aiFeature = function(ext)
2622	{
2623		$scope.aiext = ext; 
2624		//$scope.trans.extension = $scope.aiext;
2625		$scope.aiext.transcript_status = +ext.transcript_status; 
2626        $scope.aiext.transcript_view   = ext.transcript_view === 'Y' ? 1 : 0;
2627        $scope.aiext.transcript_voicemail = +ext.transcript_voicemail;
2628
2629		console.log($scope.aiext)
2630
2631		$('#aiextPopup').show();
2632	}
2633	
2634	$scope.zohoIntegration = function(ext)
2635	{
2636		$scope.zohotext = ext; 
2637
2638		console.log($scope.zohotext)
2639
2640		$('#zohoPopup').show();
2641	}
2642	
2643	$scope.startZohoConnection = function(ext)
2644	{ 
2645		$scope.loader = true; 
2646		var config = { params: { ext : ext } };
2647		$('#zohoPopup').hide(); 
2648		/*$http.post(base_url+"user_extensions/update_smstext", null, config).then(function(response)
2649		{ 
2650			$scope.loader = false;																
2651			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2652			$('#smsTextPopup').hide(); 
2653		});*/
2654	}
2655	
2656	
2657	$scope.updateSMSTest = function(ext)
2658	{ 
2659		$scope.loader = true; 
2660		var config = { params: { ext : ext } };
2661		$http.post(base_url+"user_extensions/update_smstext", null, config).then(function(response)
2662		{ 
2663			$scope.loader = false;																
2664			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2665			$('#smsTextPopup').hide(); 
2666		});
2667	}
2668	
2669	$scope.editJobDivaText = function(ext)
2670	{
2671		$scope.smstext = ext;
2672		// $('#jobDivaTextPopup').show();
2673		$('#jobDivaTextPopup').modal('show'); 	
2674	}
2675
2676	$scope.closeJobAction = function()
2677	{ 
2678		$('#jobDivaTextPopup').modal('hide'); 
2679		 console.log("Satheesh");  
2680	}
2681
2682	$scope.closeActiontra = function()
2683	{ 
2684		$('#aiextPopup').hide(); 
2685	}
2686	
2687	
2688	$scope.updateJobdiva = function(ext)
2689	{ 
2690		$scope.loader = true; 
2691		var config = { params: { ext : ext } };
2692		$http.post(base_url+"user_extensions/update_jobdivaext", null, config).then(function(response)
2693		{ 
2694			$scope.loader = false;		
2695			console.log(response.data.errmsg);
2696			$('#jobDivaTextPopup').modal('hide'); 														
2697			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2698		});
2699	}
2700	
2701	$scope.followAction = function(ext){
2702		$scope.loader = true; var config = { params: { ext : ext.extension } };
2703		$http.post(base_url+"user_extensions/editFollowme", null, config).then(function(response){ $scope.loader = false;																
2704			if(response.data.errcode == 200){
2705				$scope.formdata = response.data.errmsg; $('#followModal').modal('show'); 
2706			}else{
2707				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2708			}
2709		});
2710	}
2711
2712
2713	$scope.deleteVoicemail = function(formdata,varResult)
2714	{
2715		var download = document.getElementById("download").value;
2716		if(download != '')
2717		{ 
2718			if(confirm("Are you sure you want to delete voicemail?"))
2719			{
2720				$scope.loader = true; $scope.arrayText = [];
2721				angular.forEach(formdata, function(value, key){ $scope.arrayText.push(value['dlink']); $scope.arrayText.push(value['dlink1']); });
2722				var jsonstr = JSON.stringify($scope.arrayText); var config = { params: { formdata : jsonstr } };
2723				$http.post(base_url+"user_extensions/delete_all", null, config).then(function(response){ $scope.loader = false; 
2724					if(response.data.errcode == 200){ $scope.voiceMaillist(response.data.ext); $scope.chkVal = false; }
2725					$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode);
2726				});
2727			}
2728		}
2729		else
2730		{ 
2731			$scope.ajaxResult = 'Select Atleast One!'; myService.resMessage($scope,$timeout,202); 
2732		}
2733	}
2734	
2735	$scope.voiceMail = function(ext){
2736		$scope.voicemailname = ext;
2737		$scope.loader = true; var config = { params: { ext : ext.extension } };
2738		$http.post(base_url+"user_extensions/editvoicemail", null, config).then(function(response){ $scope.loader = false;															
2739			if(response.data.errcode == 200){
2740				$scope.setting = response.data.errmsg; $('#voiceModal').modal('show');
2741			}else{
2742				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2743			}
2744		});
2745	}
2746	
2747	$scope.getCallerID = function(ext)
2748	{ 
2749		console.log(ext); $scope.callerselected = '';
2750		$scope.loader = true; $scope.caller = {extension:'',callerid:''};
2751		$http.get(base_url+"user_extensions/edit_callerid").then(function(response)
2752		{ 
2753			$scope.loader = false;																
2754			$scope.didlist = response.data; $scope.callerselected = ext.outboundcid;console.log($scope.callerselected);
2755			$scope.caller = {extension:ext.extension, callerid:ext.outboundcid}; $('#callerIDModal').modal('show');
2756		});
2757	}
2758	$scope.autopro = {};
2759	$scope.getAutoProvision = function(ext)
2760	{ 
2761		$scope.autopro = {extension:ext.extension}; 
2762		$('#autoProvisionModal').modal('show');
2763	}
2764	
2765	$scope.updateCallerID = function(callerid){ 
2766		$scope.loader = true; var config = { params: { formdata : callerid} };
2767		$http.post(base_url+"user_extensions/update_callerid", null, config).then(function(response){ $scope.loader = false;															
2768			if(response.data.errcode == 200){ $scope.loadDocu(); $('#callerIDModal').modal('hide'); }
2769			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2770		});
2771	}
2772
2773
2774	$scope.updateTranscript = function(transcript,ajaxresult){ 
2775		console.log("werdwe")
2776		// transcript.extension = $scope.aiext;
2777		$scope.loader = true; var config = { params: { formdata : transcript,extno:$scope.aiext} };
2778		$http.post(base_url+"user_extensions/update_transcript", null, config).then(function(response){ 
2779			$scope.loader = false;															
2780			// if(response.data.errcode == 200){ }
2781			$('#aiextPopup').hide(); 
2782			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2783		});
2784	}
2785	
2786	$scope.updateAutoProvision = function(callerid)
2787	{ 
2788		$scope.loader = true; var config = { params: { formdata : callerid} };
2789		var phonedevice = document.getElementById("phonedevice").value;
2790		var model = document.getElementById('phonemodel').value;
2791		if(model == "CISCO-7821" || model == "CISCO-7841" || model == "CISCO-8845" || model == "CISCO-8832")
2792		{
2793			phonedevice = "CISCOSPA";
2794		}
2795		if(phonedevice == "CISCOSPA")
2796		{
2797			$http.post(base_url+"user_extensions/auto_provision", null, config).then(function(response){ $scope.loader = false;															
2798				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2799				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2800			});
2801		}
2802		else if(phonedevice == "CISCO")
2803		{
2804		
2805			
2806			$http.post(base_url+"user_extensions/auto_provision_cisco", null, config).then(function(response){ $scope.loader = false;															
2807				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2808				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2809			});
2810		}
2811		else if(phonedevice == "POLYCOM")
2812		{
2813			$http.post(base_url+"user_extensions/auto_provision_polycom", null, config).then(function(response){ $scope.loader = false;															
2814				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2815				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2816			});
2817		}
2818		else if(phonedevice == "YEALINK")
2819		{
2820			$http.post(base_url+"user_extensions/auto_provision_yealink", null, config).then(function(response){ $scope.loader = false;															
2821				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2822				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2823			});
2824		}
2825		else if(phonedevice == "GreandStream")
2826		{
2827			if(model == "GRP260X")
2828			{
2829				$http.post(base_url+"user_extensions/auto_provision_greandstream_grp", null, config).then(function(response){ $scope.loader = false;															
2830					if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2831					$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2832				});
2833			}
2834			else
2835			{
2836				$http.post(base_url+"user_extensions/auto_provision_greandstream1", null, config).then(function(response){ $scope.loader = false;															
2837					if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2838					$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2839				});
2840			}
2841		}
2842		else if(phonedevice == "Telekonnectors")
2843		{ 
2844			$http.post(base_url+"user_extensions/auto_provision_telekonnectors", null, config).then(function(response){ $scope.loader = false;															
2845				if(response.data.errcode == 200){ $scope.loadDocu(); $('#autoProvisionModal').modal('hide'); }
2846				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2847			});
2848		}
2849	}
2850		
2851	$scope.voiceMaillist = function(ext)
2852	{
2853		$scope.voicemaillistext = ext;
2854		$scope.loader = true; var config = { params: { ext : ext } };
2855		$http.post(base_url+"user_extensions/voicemail_list", null, config).then(function(response){ $scope.loader = false;													
2856			 $scope.totalCount = response.data.totalCount; $scope.user = {extension:''};
2857			if(response.data.errcode == 200){
2858				$scope.extension = response.data.errmsg; 
2859				$scope.voicemailList = true; 
2860				//$('#voiceModal').modal('show');
2861				 $scope.headopens = true;
2862			}else{
2863				$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2864			}
2865		});
2866	}
2867	
2868	$scope.closeAction = function()
2869	{ 
2870		$('#jobDivaTextPopup').modal('hide'); 
2871		$('#formModal').modal('hide'); $('#followModal').modal('hide');  
2872		$('#voiceModal').modal('hide'); $('#addextModal').hide();
2873		$('#callerIDModal').modal('hide'); $('#autoProvisionModal').modal('hide');  
2874	}
2875	
2876
2877	$scope.featuresUpdate = function(formdata, varResult) 
2878	{		
2879		//if(formdata.name.match(/^.*[^\s{1,}]\s.*/)||(formdata.name=='')){
2880		if((formdata.name!='')){
2881			/*$scope.displayerror = "Display Name should not contain space!"; $timeout(function (){ $scope.displayerror = ''; }, 3000);
2882		}else{*/
2883			$scope.loader = true; var config = { params: { formdata:formdata } };
2884			$http.post(base_url+"user_extensions/featuresUpdate", null, config).then(function(response){ $scope.loader = false; 
2885				if(response.data.errcode == 200){ $scope.loadDocu(); $('#formModal').modal('hide'); }
2886				$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2887			});
2888		//}	
2889    };
2890}
2891	
2892	$scope.followUpdate = function(formdata, varResult) 
2893	{
2894		$scope.cnf = 'DISABLED'; $scope.btnlist = 0;
2895		if(document.getElementById('fwme_enable').checked){ $scope.cnf = 'ENABLED'; }
2896		if(formdata.follow_me_list != '' && $scope.cnf == 'ENABLED'){ $scope.btnlist = 1; }
2897		if(formdata.follow_me_list == '' && $scope.cnf == 'DISABLED'){ $scope.btnlist = 1; }
2898		
2899		if($scope.btnlist == 1){
2900			$scope.loader = true; var config = { params: { formdata:formdata,cnf:$scope.cnf } };
2901			$http.post(base_url+"user_extensions/followUpdate", null, config).then(function(response){ $scope.loader = false; 
2902				if(response.data.errcode == 200){ $scope.loadDocu();$('#followModal').modal('hide');  }
2903				$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2904			});
2905		}else{
2906			$scope.errormsg = "Please enter Follow Me List & select User Confirmation"; $timeout(function (){ $scope.errormsg = ''; }, 3000);
2907		}	
2908    };
2909	
2910	$scope.settingUpdate = function(formdata, varResult) { 
2911		$scope.loader = true; var config = { params: { formdata : formdata } };
2912		$http.post(base_url+"user_extensions/voicemailUpdate", null, config).then(function(response){ $scope.loader = false;																
2913			if(response.data.errcode == 200){ $scope.loadDocu(); $('#voiceModal').modal('hide'); }
2914			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2915		});			
2916    };
2917	
2918	$scope.deleteAction = function(formdata, varResult) 
2919	{
2920		// if(confirm("Are you sure you want to delete extension?"))
2921		// {
2922		// 	$scope.loader = true; var config = { params: { formdata : formdata } };
2923		// 	$http.post(base_url+"user_extensions/deleteExt", null, config).then(function(response){ $scope.loader = false;															
2924		// 		$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2925		// 	});			
2926		// 	window.location = base_url+'order/deactivation_of_line';
2927		// }
2928		swal({
2929            type: 'warning',
2930            title: '<h4>Are you sure you want to delete extension?</h4>',
2931            showConfirmButton: true,
2932            confirmButtonText: "Yes, Delete!",
2933            showCancelButton:true,
2934            buttonsStyling: true,
2935            showLoaderOnConfirm: true,
2936          }).then((result) => {
2937            if (result.value) {
2938				window.location = base_url+'order/deactivation_of_line';
2939            } else if (result.dismiss === 'cancel') {
2940                swal(
2941                  'Cancelled',
2942                  'Your stay here :)',
2943                  'error'
2944                )
2945            }
2946        })
2947    };
2948	
2949	$scope.addExt = function()
2950	{ 
2951		//$('#addextModal').show(); 
2952		window.location = base_url+'order/additional_line_request';
2953	}
2954	$scope.createExt = function(formdata, varResult) { 
2955		$scope.loader = true; var config = { params:{formdata:formdata} };
2956		$http.post(base_url+"user_extensions/add_extension", null, config).then(function(response){ $scope.loader = false; 
2957			if(response.data.errcode == 200){ $('#addextModal').hide(); }
2958			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2959		});		
2960    };
2961	
2962	$scope.voiceMailDelete = function(ext,ext1,exten)
2963	{
2964
2965
2966		swal({
2967            type: 'warning',
2968            title: '<h4>Are you sure you want to delete voicemail?</h4>',
2969            showConfirmButton: true,
2970            confirmButtonText: "Yes, Delete!",
2971            showCancelButton:true,
2972            buttonsStyling: true,
2973            showLoaderOnConfirm: true,
2974          }).then((result) => {
2975            if (result.value) {
2976			$scope.loader = true; var config = { params: { ext:ext,ext1:ext1 } };
2977			$http.post(base_url+"user_extensions/delete_voice", null, config).then(function(response){ $scope.loader = false;															
2978				$scope.voiceMaillist(exten); $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2979			});
2980            } else if (result.dismiss === 'cancel') {
2981                swal(
2982                  'Cancelled',
2983                  'Your stay here :)',
2984                  'error'
2985                )
2986            }
2987        })
2988
2989
2990		// if(confirm("Are you sure you want to delete voicemail?"))
2991		// {
2992		// 	$scope.loader = true; var config = { params: { ext:ext,ext1:ext1 } };
2993		// 	$http.post(base_url+"user_extensions/delete_voice", null, config).then(function(response){ $scope.loader = false;															
2994		// 		$scope.voiceMaillist(exten); $scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
2995		// 	});
2996		// }
2997	}
2998	
2999	$scope.voiceMailPlayFromBiling = function(exten,exten1,exten2,exten3)
3000	{
3001		var fold1 = exten2.replace("~", "/");
3002		var fold = fold1.replace("~", "/");
3003		var urls = exten+".vitelglobal.com/"+exten1+fold;
3004		console.log(urls);
3005		$scope.loader = true; 
3006		var config = {params: { path : urls,ext:$scope.voicemaillistext}};
3007		$http.post(base_url+"call_records/getCdrFileNew", null, config).then(function(response){ 
3008					// console.log(response);																  
3009			$scope.loader = false;
3010			 $('#voicemaillisten').modal('show');
3011			document.getElementById("extplay").innerHTML = '<audio  id="myAudio" controls autoplay controlsList="nodownload"><source src="'+response.data.tabledata+'" type="audio/wav"></audio>';
3012		});
3013	}
3014	
3015	// $scope.voiceMailPlay = function(exten,exten1,exten2,exten3)
3016	// {
3017	// 	//alert(exten);
3018	// 	var fold1 = exten2.replace("~", "/");
3019	// 	var fold = fold1.replace("~", "/");
3020	// 	var urls = exten+".vitelglobal.com/"+exten1+fold;
3021	// 	$('#voicemaillisten').modal('show');
3022	// 	console.log(urls);
3023	// 	document.getElementById("extplay").innerHTML = '<audio id="myAudio" controls autoplay controlsList="nodownload"><source src="http://'+urls+'" type="audio/wav"></audio>';
3024	// }
3025
3026	$scope.voiceMailPlay = function(exten,exten1,exten2,exten3)
3027	// https://quickmdcare.vitelglobal.com/voicemail/default/101/INBOX/msg0002.wav
3028	{
3029		 	var fold1 = exten2.replace("~", "/");
3030	 	var fold = fold1.replace("~", "/");
3031		var urls = exten+".vitelglobal.com/"+exten1+fold;
3032		$scope.loader = true; var config = {params: { path : urls}};
3033		$http.post(base_url+"call_records/getCdrFilevoicemail", null, config).then(function(response){ 
3034			$scope.loader = false; $('#voicemaillisten').modal('show');
3035			document.getElementById("extplay").innerHTML = '<audio  id="myAudio" controls autoplay controlsList="nodownload"><source src="'+decodeURIComponent(response.data.tabledata)+'" type="audio/wav"></audio>';
3036		});
3037	}
3038
3039	$scope.closeActionNew = function(){ $('#voicemaillisten').modal('hide'); var vid = document.getElementById("myAudio");  vid.pause(); }
3040	$scope.user = {extension:''};
3041	$scope.checkAll = function() {
3042    	if($scope.chkVal == true){
3043			$scope.user = {extension: angular.copy($scope.extension)};
3044		}else{
3045			$scope.user = {extension:''};
3046		}
3047  	};
3048	
3049	$scope.deleteVoicemail = function(formdata,varResult)
3050	{
3051		var download = document.getElementById("download").value;
3052		if(download != '')
3053		{ 
3054			if(confirm("Are you sure you want to delete voicemail?"))
3055			{
3056				$scope.loader = true; $scope.arrayText = [];
3057				angular.forEach(formdata, function(value, key){ $scope.arrayText.push(value['dlink']); $scope.arrayText.push(value['dlink1']); });
3058				var jsonstr = JSON.stringify($scope.arrayText); var config = { params: { formdata : jsonstr } };
3059				$http.post(base_url+"user_extensions/delete_all", null, config).then(function(response){ $scope.loader = false; 
3060					if(response.data.errcode == 200){ $scope.voiceMaillist(response.data.ext); $scope.chkVal = false; }
3061					$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3062				});
3063			}
3064		}
3065		else
3066		{ 
3067			//$scope.ajaxResult = 'Select Atleast One!'; myService.resMessage($scope,$timeout,202); 
3068			swal({
3069				html: `<h4>Select Atleast One!</h4>`,
3070				type: "error",
3071				timer: 3000,
3072				showConfirmButton:false,
3073			});
3074		}
3075	}
3076});
3077
3078function downloadMails()
3079{
3080	var download = document.getElementById("download").value;
3081	if(download != ''){ 
3082		document.downloadNow.submit(); return true;
3083	}else{ 
3084		alert("Select atleast one record!"); return false; 
3085	}
3086}
3087
3088//For List of Extensions  Page - End
3089
3090//For List of DIDs  Page - Start
3091myapp.controller("userDIDlist", function($scope,$http,$timeout,myService) {	
3092	$scope.pageno = 1; // initialize page no to 1
3093	$scope.selectables = [ {value: 500}, {value: 600}, {value: 700}, {value: 800}, {value: 900}, {value: 1000} ];
3094	$scope.pageSize = "500"; 
3095	$scope.searchKey = '';	
3096	
3097	$scope.searchData = function(){ $scope.loadDocu(); }	
3098	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.loadDocu(); }	
3099	$scope.loadDocu = function () {
3100		$scope.loader = true; var config = {params:{page:$scope.pageno, size:$scope.pageSize, keyword:$scope.searchKey}};
3101		$http.post(base_url+"user_dids/tabledata", null, config).then(function(response){ $scope.loader = false;
3102			// console.log(response);
3103			$scope.userdid = response.data.tabledata;
3104			
3105			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.userdid,response.data.totalCount);
3106		});
3107		$scope.getCallerID = function(ext){ $scope.loader = true; 
3108		$http.get(base_url+"user_extensions/edit_callerid").then(function(response){ $scope.loader = false;	
3109			// console.log(response)															
3110			$scope.didlist = response.data; $scope.caller = {extension:ext.line, callerid:ext.cname}; $('#callerIDModal').modal('show');
3111		});
3112	}
3113	};
3114	$scope.loadDocu();
3115	$scope.cnameUpdate = function(formdata,varResult)
3116	{
3117
3118		$scope.loader = true; 
3119		var config = { params: { cname : formdata.name, cnamesdid:formdata.extension, cnamesprovider:formdata.provider} };
3120		$http.post(base_url+"user_dids/cnameUpdate", null, config).then(function(response)
3121		{ 
3122			$scope.loader = false;																
3123			if(response.data.errcode == 200)
3124			{
3125				$scope.ajaxResult = response.data.errmsg; $('#formModal').hide();
3126				$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3127			}
3128			else
3129			{
3130				$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3131			}
3132		});
3133	}
3134
3135	$scope.openModal = function(line_id,hold_desc) 
3136	{
3137		$scope.line_id = line_id;
3138		$scope.note = hold_desc;
3139		$('#addNoteModel').show();
3140	};
3141
3142	$scope.submitNote = function() 
3143	{
3144		$scope.loader = true;
3145		// Setup the config object with the parameters
3146		var config = 
3147		{
3148			params: {
3149				note: $scope.note,
3150				line_id: $scope.line_id
3151			}
3152		};
3153	  
3154		// Send the POST request
3155		$http.post(base_url + "user_dids/addNoteHold", null, config)
3156		.then(function(response) 
3157		{
3158			
3159			$scope.loader = false;		
3160															
3161			if(response.data.errcode == 200)
3162			{
3163				$('#addNoteModel').hide();
3164
3165				// Manually hide the backdrop
3166				$('.modal-backdrop').remove();
3167
3168				$scope.loadDocu();
3169				
3170				new Swal({
3171                    icon: 'success',
3172                    title: 'Success!',
3173                    text: response.data.errmsg,
3174                    confirmButtonText: 'Ok'
3175                });
3176			}
3177			else
3178			{
3179				Swal.fire({
3180                    icon: 'error',
3181                    title: 'Error!',
3182                    text: response.data.errmsg,
3183                    confirmButtonText: 'Try Again'
3184                });
3185			}
3186			
3187		}, 
3188		function(error) 
3189		{
3190			console.error('Error updating CNAM:', error);
3191		});
3192
3193	};
3194	  
3195
3196
3197
3198});
3199//For List of DIDs  Page - End
3200
3201//For Phone Status Page - Start
3202myapp.controller("phoneStatus", function($scope,$http,$timeout,myService) {	
3203	
3204	$getval = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
3205	if($getval == 'phone_registry_status')
3206	{
3207		$scope.phoneCount = 0; $scope.loader = true; $scope.usertype = 0;
3208		$http.get(base_url+"phone_registry_status/phone_data").then(function(response){
3209			// console.log(response);
3210			$scope.phone = response.data.tabledata; $scope.loader = false; $scope.phoneCount = $scope.phone.length; 
3211			$scope.usertype = response.data.usertype; 
3212		});
3213	}
3214		
3215	if($getval == 'voicemail_status')
3216	{ 	
3217		$scope.mailCount = 0; $scope.loader = true;
3218		$http.get(base_url+"phone_registry_status/voicemail_data").then(function(response){ 
3219			// console.log(response.data);
3220			$scope.voicemail = response.data; $scope.loader = false; $scope.mailCount = $scope.voicemail.length; console.log($scope.mailCount);
3221		});
3222	}
3223});
3224//For Phone Status Page - End
3225
3226//For Order  Page - Start
3227myapp.controller("orderController", function($scope,$http,$timeout,myService) {
3228	$http.get(base_url+"order/get_states").then(function(response) {   
3229		$scope.states = response.data.tabledata;
3230		$scope.form = {state:response.data[0]};
3231	});
3232	
3233	$scope.getRateCenter = function(state){
3234		var config = { params: { state : state } };
3235		$http.post(base_url+"order/get_ratecenter", null, config).then(function(response) {  
3236			$scope.centers = response.data.tabledata; $scope.center = true;
3237			$scope.form = {state:state,center:response.data[0]};
3238		});
3239	}
3240	
3241	$scope.searchDidnumber = function (form) { 
3242		$scope.loader = true; 
3243		var config = { params: { formdata : form } };
3244		$http.post(base_url+"order/search_didnumbers", null, config).then(function(response) {
3245			$scope.loader = false; 
3246			// console.log(response);
3247			if(response.data.errcode == 200){
3248		  		$scope.didnumbers = response.data.errmsg; $scope.didserror = true;
3249			}else{
3250				$scope.diderror = response.data.errmsg; $scope.didserror = false;
3251			}
3252		});
3253	}
3254	
3255	$scope.orderDids = function (didnum) {
3256		$http.get(base_url+"order/orderdid").then(function(response) {
3257			$scope.plans = response.data; $scope.didnum = didnum;
3258			$scope.didplan = $scope.plans[0]; $scope.orderDID = true;
3259		});
3260	}
3261	
3262	$scope.orderRequest = function (didnum,varResult) {
3263		var config = { params: { didnum : didnum } };
3264		$http.post(base_url+"order/orderRequest", null, config).then(function(response) {
3265			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3266		});
3267	}
3268});	
3269//For Order  Page - End
3270
3271//For Toll free  Page - Start
3272myapp.controller("tollfreeController", function($scope,$http,$timeout,myService) {
3273	$http.get(base_url+"order/tollfree_order").then(function(response){ $scope.tollfree = response.data; });
3274	$scope.tollNumber = function(num){ $scope.tollnum = num; $scope.tollFree = true; }
3275	$scope.tollfreeRequest = function (tollnum,varResult) {
3276		var config = { params: { tollnum : tollnum } };
3277		$http.post(base_url+"order/tollfreeRequest", null, config).then(function(response) {
3278			$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3279		});
3280	}
3281});	
3282//For Toll free  Page - End
3283
3284//For Feature code Page - Start
3285myapp.controller("featurecodeController", function($scope) {
3286	$scope.codes = [
3287		{cod: '*52', action: 'Call Forward No Answer/Unavailable Activate'},
3288		{cod: '*53', action: 'Call Forward No Answer/Unavailable Deactivate'},
3289		{cod: '*72', action: 'Call Forward All Activate'},
3290		{cod: '*73', action: 'Call Forward All Deactivate'},
3291		{cod: '*90', action: 'Call Forward Busy Activate'},
3292		{cod: '*91', action: 'Call Forward Busy Deactivate'},
3293		{cod: '*97', action: 'My Voicemail (default password- 12345. Refer manuals for any query)'}
3294	];
3295});
3296//For Feature code Page - End
3297
3298//For Billing History Page - Start
3299myapp.controller("billingController", function($scope,$http,$timeout,myService) 
3300{
3301	$http.get(base_url+"billing_history/bill_detail").then(function(response) 
3302	{         
3303		$scope.bills = response.data.tabledata;
3304	    $scope.billtotal = response.data.total;
3305	});
3306
3307
3308	$scope.pageno = 1; // initialize page no to 1
3309	$scope.selectables = [ {value: 1000},{value: 2000},{value: 3000}, {value: 4000}, {value: 5000}];
3310	$scope.pageSize = "1000"; 
3311	$scope.searchKey = '';	
3312	
3313	$scope.searchData = function(){ $scope.loadInvoice(); }	
3314	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.loadInvoice(); }	
3315	$scope.loadInvoice = function () { 
3316		var config = {params:{page:$scope.pageno, size:$scope.pageSize, keyword:$scope.searchKey}};
3317		$http.post(base_url+"billing_history/tabledata", null, config).then(function(response){
3318			$scope.invoices = response.data.tabledata;
3319			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.invoices,response.data.totalCount);
3320		});
3321	};
3322	$scope.loadInvoice();
3323	
3324	$scope.makePayment = function(formdata) 
3325	{ 
3326		if(confirm("Are you sure you want to make Payment?"))
3327		{
3328			$scope.dats = {rafor:'others',Others_for:formdata.inv_subject,amt:formdata.invoice_amount,submitt:'Process',invid:formdata.invoiceid};
3329			$scope.loader = true; var config = {params:{formdata:$scope.dats}};
3330			$http.post(base_url+"make_payment/payment_process_invoice", null, config).then(function(response){ $scope.loader = false;															
3331				$scope.ajaxResult = response.data.errmsg; 
3332				myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); //$scope.pay = {rafor:'',amt:'',Others_for:''};
3333				$scope.loadInvoice();
3334			});	
3335		}
3336    };
3337	
3338	$scope.sendMail = function (invo) {
3339		$scope.loader = true; var config = { params: { formdata : invo } };
3340		$http.post(base_url+"billing_history/invoice_mail", null, config).then(function(response){ $scope.loader = false;
3341			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3342		});
3343	};
3344
3345
3346	$scope.vginvoice = function(invo) {
3347
3348		//alert(invo)
3349		console.log(invo)
3350		$scope.loader = true; var config = { params: { formdata : invo } };
3351		$http.post(base_url+"billing_history/invoice_htmlpopup", null, config).then(function(response){ 
3352
3353			$scope.ajaxResult = response.data; 
3354			//console.log(response);
3355		});
3356		$('#vg_invoice').modal('show');
3357	}
3358
3359	
3360});	
3361
3362myapp.controller("billingInvoices", function($scope,$http,$timeout,myService) 
3363{
3364	
3365	$scope.pageno = 1; // initialize page no to 1
3366	$scope.selectables = [ {value: 25},{value: 50},{value: 100}, {value: 200}, {value: 300}, {value: 500} ];
3367	$scope.pageSize = "25"; 
3368	$scope.searchKey = '';	
3369	
3370	$scope.searchData = function(){ $scope.loadInvoice(); }	
3371	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.loadInvoice(); }	
3372	$scope.loadInvoice = function () 
3373	{ 
3374		var config = {params:{page:$scope.pageno, size:$scope.pageSize, keyword:$scope.searchKey}};
3375		$http.post(base_url+"billing_history/tabledata", null, config).then(function(response)
3376		{
3377			$scope.invoices = response.data.tabledata;
3378			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.invoices,response.data.totalCount);
3379		});
3380	};
3381	$scope.loadInvoice();
3382	
3383	$scope.makePayment = function(formdata) 
3384	{ 
3385		if(confirm("Are you sure you want to make Payment?"))
3386		{
3387			$scope.dats = {rafor:'others',Others_for:formdata.inv_subject,amt:formdata.invoice_amount,submitt:'Process',invid:formdata.invoiceid};
3388			$scope.loader = true; var config = {params:{formdata:$scope.dats}};
3389			$http.post(base_url+"make_payment/payment_process_invoice", null, config).then(function(response){ $scope.loader = false;															
3390				$scope.ajaxResult = response.data.errmsg; 
3391				myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); //$scope.pay = {rafor:'',amt:'',Others_for:''};
3392				$scope.loadInvoice();
3393			});	
3394		}
3395    };
3396	
3397	$scope.sendMail = function (invo) 
3398	{
3399		$scope.loader = true; var config = { params: { formdata : invo } };
3400		$http.post(base_url+"billing_history/invoice_mail", null, config).then(function(response){ $scope.loader = false;
3401			$scope.ajaxResult = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3402		});
3403	};
3404});	
3405//For Billing History Page - End
3406//For Billing Information  Page - Start
3407myapp.controller("billingInformation", function($scope,$http,$timeout,myService) 
3408{
3409
3410
3411
3412    	$scope.detectCardType = function(number) {
3413		if (!number) return;
3414		number = number.replace(/\s/g, '');
3415		var type = 'Unknown';
3416		if (/^4/.test(number)) type = 'Visa';
3417		else if (/^(5[1-5]|2[2-7])/.test(number)) type = 'MasterCard';
3418		else if (/^3[47]/.test(number)) type = 'AmExCard';
3419		else if (/^6(?:011|5)/.test(number)) type = 'DiscoverCard';
3420		else if (/^(60|65|81|82|508)/.test(number)) type = 'RuPay';
3421		if (type !== 'Unknown') $scope.cc.cardtype = type;
3422	};
3423
3424		
3425	$http.get(base_url+"billing_information/get_ccdetails").then(function(response){ $scope.cc = response.data; $scope.selectState($scope.cc.country); });
3426	
3427	$http.get(base_url+"my_account/country").then(function(response){ $scope.country = response.data; });
3428	$scope.selectState = function(keyword) 
3429	{
3430		$scope.loader = true; var config = { params: { country : keyword } };
3431		$http.post(base_url+"my_account/states", null, config).then(function(response){	$scope.loader = false; $scope.states = response.data; });			
3432    };
3433		
3434	$scope.creditUpdate = function(formdata, varResult) 
3435	{ 
3436		$scope.loader = true; var config = {params:{formdata:formdata}};
3437		$http.post(base_url+"billing_information/update_creditcard", null, config).then(function(response){ $scope.loader = false;
3438			$scope[varResult] = response.data.errmsg; 
3439			myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3440			$timeout(function () { window.location = base_url+'billing_information'; }, 3000);
3441			
3442		});		
3443    };
3444	
3445	$scope.echeckUpdate = function(formdata, varResult) { 
3446		$scope.loader = true; var config = {params:{formdata:formdata}};
3447		$http.post(base_url+"billing_information/update_echeck", null, config).then(function(response){ $scope.loader = false;														
3448			$scope[varResult] = response.data.errmsg; 
3449			myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3450			$timeout(function () { window.location = base_url+'billing_information'; }, 3000);
3451		});			
3452    };
3453});
3454//For Billing Information  Page - End
3455
3456//For Make Payment Page - Start
3457myapp.controller("makePayment", function($scope,$http,$timeout,myService) 
3458{	
3459		
3460	$http.get(base_url+"billing_information/get_ccdetails").then(function(response){ $scope.cc = response.data; });
3461	$scope.pay = {rafor:'',amt:'',Others_for:''};
3462	
3463	$scope.makePayment = function(formdata, varResult) { 
3464		$scope.loader = true; var config = {params:{formdata:formdata}};
3465		$http.post(base_url+"make_payment/payment_process", null, config).then(function(response){ $scope.loader = false;															
3466			$scope[varResult] = response.data.errmsg; 
3467			myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); 
3468			$scope.pay = {rafor:'',amt:'',Others_for:''};
3469		});			
3470    };
3471	
3472});
3473//For Make Payment Page - End
3474
3475//For Mobile App Page - Start
3476myapp.controller("mobileApp", function($scope,$http,$timeout,myService) {
3477	
3478	$scope.satext = '';
3479	$scope.getExtensionData = function()
3480	{
3481		$scope.loader = true; 
3482		var config = { params: { ext:$scope.selectedextension } };
3483		$http.post(base_url+"user_extensions/getExtensionSelected", null, config).then(function(response)
3484		{ 
3485			$scope.loader = false; 
3486			window.location.reload();
3487		});
3488	}
3489
3490
3491// Open Send Mail Modal
3492// $scope.openSendMailModal = function(app) {
3493//     $scope.sendMailData = {
3494//         username: app.username,
3495//         dspname: app.dspname,
3496//         cloud_username: app.cloud_username,
3497//         cloud_password: app.cloud_password,
3498//         qrimage: app.qrimage, // Add QR image name
3499
3500//         email: '',
3501//         additionalEmails: ''
3502//     };
3503//     $('#sendMailModal').modal('show');
3504// };
3505
3506// // Send Credentials via Email
3507// $scope.sendCredentialsEmail = function(sendData) {
3508//     if (!sendData.email) {
3509//         alert('Please enter an email address.');
3510//         return;
3511//     }
3512    
3513//     // Validate email format
3514//     var emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
3515//     if (!emailPattern.test(sendData.email)) {
3516//         alert('Please enter a valid email address.');
3517//         return;
3518//     }
3519    
3520//     $scope.loader = true;
3521    
3522//     var config = {
3523//         params: {
3524//             username: sendData.username,
3525//             dspname: sendData.dspname,
3526//             cloud_username: sendData.cloud_username,
3527//             cloud_password: sendData.cloud_password,
3528//             qrimage: sendData.qrimage, // Send QR image name
3529//             email: sendData.email,
3530//             additional_emails: sendData.additionalEmails || ''
3531//         }
3532//     };
3533    
3534//     $http.post(base_url + "mobileapp/send_credentials_email", null, config).then(function(response) {
3535//         $scope.loader = false;
3536//         $scope.ajaxResult = response.data.errmsg;
3537//         myService.resMessage($scope, $timeout, response.data.errcode, response.data.errmsg);
3538        
3539//         if (response.data.errcode == 200) {
3540//             $('#sendMailModal').modal('hide');
3541//             $scope.sendMailData = {};
3542//         }
3543//     }).catch(function(error) {
3544//         $scope.loader = false;
3545//         alert('An error occurred while sending the email. Please try again.');
3546//         console.error('Error sending email:', error);
3547//     });
3548// };
3549
3550
3551	// Open Send Mail Modal
3552$scope.openSendMailModal = function(app) {
3553    $scope.sendMailData = {
3554        username: app.username,
3555        dspname: app.dspname,
3556        cloud_username: app.cloud_username,
3557        cloud_password: app.cloud_password,
3558        qrimage: app.qrimage,
3559        sendType: 'desktop', // Default: desktop only
3560        email: '',
3561        additionalEmails: ''
3562    };
3563    $('#sendMailModal').modal('show');
3564};
3565
3566// Close Send Mail Modal
3567$scope.closeSendMailModal = function() {
3568    $('#sendMailModal').modal('hide');
3569    $scope.sendMailData = {};
3570};
3571
3572// Send Credentials via Email
3573$scope.sendCredentialsEmail = function(sendData) {
3574    if (!sendData.email) {
3575        alert('Please enter an email address.');
3576        return;
3577    }
3578    
3579    // Validate email format
3580    var emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
3581    if (!emailPattern.test(sendData.email)) {
3582        alert('Please enter a valid email address.');
3583        return;
3584    }
3585    
3586    $scope.loader = true;
3587    
3588    var config = {
3589        params: {
3590            username: sendData.username,
3591            dspname: sendData.dspname,
3592            cloud_username: sendData.cloud_username,
3593            cloud_password: sendData.cloud_password,
3594            qrimage: sendData.qrimage,
3595            send_type: sendData.sendType, // desktop, mobile, or both
3596            email: sendData.email,
3597            additional_emails: sendData.additionalEmails || ''
3598        }
3599    };
3600    
3601    $http.post(base_url + "mobileapp/send_credentials_email", null, config).then(function(response) {
3602        $scope.loader = false;
3603        $scope.ajaxResult = response.data.errmsg;
3604        myService.resMessage($scope, $timeout, response.data.errcode, response.data.errmsg);
3605        
3606        if (response.data.errcode == 200) {
3607            $('#sendMailModal').modal('hide');
3608            $scope.sendMailData = {};
3609        }
3610    }).catch(function(error) {
3611        $scope.loader = false;
3612        alert('An error occurred while sending the email. Please try again.');
3613        console.error('Error sending email:', error);
3614    });
3615};
3616
3617	
3618	$http.get(base_url+"user_extensions/subext_list").then(function(response)
3619	{ 
3620		$scope.cc = response.data.assignext;
3621		//setTimeout(function(){ $scope.satext = $scope.selectedextension = response.data.selectedext; }, 2000);
3622		$timeout(function () { $scope.satext = $scope.selectedextension = response.data.selectedext; }, 3000);
3623	});
3624	
3625	$scope.getAlert = function()
3626	{
3627		//$scope.ajaxResult = "Please Select Extension"; myService.resMessage($scope,$timeout,202);
3628		swal({
3629				html: `<h4>Please Select Extension</h4>`,
3630				type: "error",
3631				timer: 3000,
3632				showConfirmButton:false,
3633			});
3634	}
3635	
3636	$scope.pageno = 1; // initialize page no to 1
3637	$scope.selectables = [ {value: 30}, {value: 50}, {value: 100} ];
3638	$scope.pageSize = "30"; 
3639	$scope.searchKey = '';	
3640	
3641	$scope.searchData = function(){ $scope.appList(); }	
3642	$scope.pageData = function(pageno){ $scope.pageno = pageno; $scope.appList(); }	
3643	$scope.appList = function () { $scope.loader = true;
3644		var config = {params:{page:$scope.pageno, size:$scope.pageSize, keyword:$scope.searchKey}};
3645		$http.post(base_url+"mobileapp/tabledata", null, config).then(function(response){  $scope.loader = false;
3646			$scope.applist = response.data.tabledata; $scope.totalCount = response.data.totalCount;
3647			myService.pagination($scope,$scope.pageno,$scope.pageSize,$scope.applist,$scope.totalCount);
3648		});
3649	};
3650	$scope.appList();
3651	
3652	$scope.getvcUpdate = function()
3653	{
3654		var activecount = document.getElementById("totalconf").value
3655		var chks = document.getElementsByName('extdel[]');
3656		var vconf = document.getElementById("videoconf").value
3657		var ucodes = ''; var newprices = '';
3658		var hasChecked = false; var valcount = 0;
3659		for (var i = 0; i < chks.length; i++)
3660		{
3661			if (chks[i].checked)
3662			{
3663				 hasChecked = true;
3664				 newprices += chks[i].value+'~!~';
3665				 valcount = parseInt(valcount) + 1;
3666			}
3667		}
3668		//alert(valcount+'========'+activecount);
3669		if(vconf == '0' )
3670		{
3671			if(hasChecked == true)
3672			{
3673				$scope.loader = true;
3674				var config = {params:{ids:newprices, videoconf:document.getElementById("videoconf").value}};
3675				$http.post(base_url+"mobileapp/mobileapp_api_video", null, config).then(function(response)
3676				{  
3677					$scope.loader = false;
3678					$scope.appList();
3679					$scope.ajaxResult = response.data.errmsg;
3680					myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3681				});
3682			}
3683			else
3684			{
3685				alert("Select any one extension to update data");
3686			}
3687		}
3688		else if(parseInt(valcount) <= parseInt(activecount) )
3689		{
3690			if(hasChecked == true)
3691			{
3692				$scope.loader = true;
3693				var config = {params:{ids:newprices, videoconf:document.getElementById("videoconf").value}};
3694				$http.post(base_url+"mobileapp/mobileapp_api_video", null, config).then(function(response)
3695				{  
3696					$scope.loader = false;
3697					$scope.appList();
3698					$scope.ajaxResult = response.data.errmsg;
3699					myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3700				});
3701			}
3702			else
3703			{
3704				alert("Select any one extension to update data");
3705			}
3706		}
3707		else
3708		{
3709			if(confirm(("You are activating "+valcount+" licenses for Video Conference. Additional licenses will be $5 per user per month.")))
3710			{
3711				var config = {params:{ids:newprices, videoconf:document.getElementById("videoconf").value}};
3712				$http.post(base_url+"mobileapp/mobileapp_api_video_paid", null, config).then(function(response)
3713				{  
3714					$scope.loader = false;
3715					$scope.appList();
3716					$scope.ajaxResult = response.data.errmsg;
3717					myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg);
3718				});
3719			}
3720		}
3721	}
3722	
3723	$scope.eextpwds = '';
3724	$scope.qrImage = function (qrimage) { $scope.qrimage = qrimage; $('#qrModal').modal('show'); }
3725	$scope.createForm = function () { $scope.qr = {}; $('#createForm').modal('show'); $scope.qrBtn = false; }
3726	$scope.updateForm = function (val) { $scope.qr = val; $scope.eextpwds = val.cloud_password; $('#createForm').modal('show'); $scope.qrBtn = true; }
3727	$scope.updateQR = function (formdata,varResult) 
3728	{
3729		if($scope.eextpwds != formdata.cloud_password)
3730		{
3731			if(confirm("If you change Extension Password, this will reset your extension password and phone need be reconfigured"))
3732			{
3733				$scope.loader = true; var config = { params: { formdata : formdata } };
3734				$http.post(base_url+"mobileapp/update_qrcode", null, config).then(function(response){ $scope.loader = false; $scope.appList();
3735					$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); $('#createForm').modal('hide');
3736				});
3737			}
3738		}
3739		else
3740		{
3741			$scope.loader = true; var config = { params: { formdata : formdata } };
3742			$http.post(base_url+"mobileapp/update_qrcode", null, config).then(function(response){ $scope.loader = false; $scope.appList();
3743				$scope[varResult] = response.data.errmsg; myService.resMessage($scope,$timeout,response.data.errcode,response.data.errmsg); $('#createForm').modal('hide');
3744			});
3745		}
3746	};
3747
3748	$scope.passwordChange = function()
3749	{
3750		var text = "";
3751  		var possible = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz123456789";
3752
3753  		for (var i = 0; i < 18; i++){ text += possible.charAt(Math.floor(Math.random() * possible.length)); }
3754		$scope.qr = angular.extend($scope.qr,{cloud_password:text});
3755	}
3756
3757
3758	$scope.getSoftPhoneGenerate = function(did)
3759	{    
3760		$scope.loader = true;
3761		var config = {params:{user_id:did}};
3762
3763		var config = {
3764			params: {
3765				// Add any GET parameters here if needed
3766			}
3767		};
3768
3769		$http.get(base_url + "mobileapp/getSoftPhoneGenerate", config).then(function(response) 
3770		{ 
3771			$scope.tableview=true;
3772			$scope.loader = false; 
3773			$scope.appList();			
3774			$scope.ajaxResult = response.data.errmsg; 
3775			myService.resMessage($scope,$timeout,response.data.errcode, $scope.ajaxResult);	
3776		});
3777	}
3778
3779
3780	// $scope.getDeleteStatus = function()
3781	// {    
3782	// 	$scope.tableview=true;
3783	// 	var chks = document.getElementsByName('extdel[]');		
3784	// 	$scope.loader = true;		
3785	// 	var ucodes = ''; var newprices = '';
3786	// 	var hasChecked = false;
3787	// 	for (var i = 0; i < chks.length; i++)
3788	// 	{
3789	// 		if (chks[i].checked)
3790	// 		{
3791	// 			hasChecked = true;
3792	// 			newprices += chks[i].value+'~!~';
3793	// 		}
3794	// 	}
3795		
3796	// 	if(hasChecked == true)
3797	// 	{
3798	// 		if(confirm("Are you sure you want to delete the softphone credentials?"))
3799	// 		{
3800	// 		var config = {params:{ids:newprices}};
3801
3802	// 				$http.post(base_url+"mobileapp/getDeleteStatus", null, config).then(function(response) 
3803	// 			{ 
3804					
3805	// 				$scope.loader = false; 
3806	// 				$scope.ajaxResult = response.data.errmsg; 
3807	// 				myService.resMessage($scope,$timeout,response.data.errcode, $scope.ajaxResult);	
3808	// 				$scope.getSoftPhoneGenerateview(did);
3809	// 			});
3810	// 		}
3811	// 	}
3812	// 	else
3813	// 	{
3814	// 		alert("Select any one extension to update data");
3815	// 	}
3816
3817	// }
3818
3819
3820	$scope.getDeleteStatus = function() 
3821	{    
3822		var chks = document.getElementsByName('extdel[]');        
3823		var selectedIds = [];
3824		
3825		for (var i = 0; i < chks.length; i++) {
3826			if (chks[i].checked) {
3827				selectedIds.push(chks[i].value);
3828			}
3829		}
3830
3831		if (selectedIds.length > 0) {
3832			if (confirm("Are you sure you want to delete the selected softphone credentials?")) {
3833				
3834				var config = { params: { ids: selectedIds.join(",") } };
3835
3836				$http.post(base_url + "mobileapp/getDeleteStatus", null, config).then(function(response) { 
3837					$scope.loader = false; 
3838					$scope.ajaxResult = response.data.errmsg; 
3839					myService.resMessage($scope, $timeout, response.data.errcode, $scope.ajaxResult);    
3840					$scope.getSoftPhoneGenerateview(did);
3841				});
3842			}
3843		} else {
3844			alert("Select at least one extension to delete.");
3845		}
3846	};
3847	
3848});	
3849//For Mobile App Page - End

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.