baaad793 by Manish Mihsra

Worked on adding dialmode adding the dropdown and updating value in the table

1 parent c2832e89
1 <?php namespace App\Console\Commands;
2
3 use Illuminate\Console\Command;
4 //use Mail;
5 use DB;
6 use Config;
7
8 use App\Models\User;
9 use App\Models\Accesslog;
10
11 use App\Models\CRMCall;
12 use Schema;
13 use PDO;
14 use App\Models\Notification;
15 use App\Jobs\KHRMSLib;
16
17 use Input;
18 use Log;
19 use App\Models\Sipid;
20 use App\Models\Kqueue;
21 use App\Models\Dialline;
22 use App\Models\Session;
23 use App\Models\Cutoff;
24
25 use Illuminate\Database\Schema\Blueprint;
26
27 class CreateCall extends Command {
28
29 /**
30 * The console command name.
31 *
32 * @var string
33 */
34 protected $signature = 'CreateCall';
35
36 /**
37 * The console command description.
38 *
39 * @var string
40 */
41 protected $description = 'Create Pedictive Call If any User is Free';
42
43 /**
44 * Execute the console command.
45 *
46 * @return mixed
47 */
48 public function handle()
49 {
50 while(true)
51 {
52 usleep(1000000);
53 $this->runPredictive();
54 }
55 }
56
57 public function runPredictive()
58 {
59
60 try {
61 $this->updatePrepareColumn();
62 $usrArrs = $this->getActiveUsersCampaignWise("with");
63 $availChannel = $this->getActualAvailChannelCount();
64
65 if(count($usrArrs)){
66
67 //Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
68 //Log::info($usrArrs);
69
70 //Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
71 //Log::info("Channel=".$availChannel);
72
73 foreach ($usrArrs as $client => $usrArr) {
74 //Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
75 //Log::info("campaign=".$client);
76
77 $acalls = $this->getCreateCallCount($client, count($usrArr));
78
79 $acalls = min($acalls, $availChannel);
80
81 //Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
82 //Log::info("CallCount=".$acalls);
83
84 $this->CreateCall($client, $acalls);
85 }
86 }
87 } catch (Exception $e) {
88 Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
89 Log::error($e);
90 continue;
91 }
92 }
93
94 public function updatePrepareColumn()
95 {
96 $allClientUsrIdArr = array();
97 $updatedUserIdArr = array();
98 $currentTime = strtotime(date("Y-m-d H:i:s"));
99
100 $clientWiseUserIdArr = $this->getActiveUsersCampaignWise("without");
101
102 if(count($clientWiseUserIdArr)) {
103 //Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
104 //Log::info("updatePrepareColumn");Log::info($clientWiseUserIdArr);
105
106 foreach ($clientWiseUserIdArr as $client => $usrIdArr) {
107 $allClientUsrIdArr = array_merge($allClientUsrIdArr, $usrIdArr);
108 }
109
110 $usersTimeArr = Cutoff::whereIn('user_id', $allClientUsrIdArr)->get();
111
112 foreach ($usersTimeArr as $userTimeArr) {
113 $cutOffTime = strtotime($userTimeArr->hangup_time) + ($userTimeArr->avg_dispo - $userTimeArr->avg_ring);
114
115 if($cutOffTime < $currentTime)
116 {
117 $updatedUserIdArr[] = $userTimeArr->user_id;
118 }
119 }
120
121 if(count($updatedUserIdArr)) {
122 //Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
123 //Log::info("updatedUserIdArr");Log::info($updatedUserIdArr);
124 }
125
126 Sipid::whereIn('user', $updatedUserIdArr)->update(['prepare_call'=>1]);
127 }
128 }
129
130 public function getActiveUsersCampaignWise($checkPrepareCol)
131 {
132 $campaignWiseUsrs = array();
133 $prepareUsrIds = array();
134
135 $loggedInSips = Sipid::where('server','=',env('app_ip'))->where("user", "!=", 0)->where("status","=","1");
136 if($checkPrepareCol=="with"){
137 $loggedInSips = $loggedInSips->where("prepare_call","=","1");
138 }
139 elseif($checkPrepareCol=="without"){
140 $loggedInSips = $loggedInSips->where("patched","=","0");
141 }
142
143 $loggedInSips = $loggedInSips->groupBy('user')->get();
144
145 if(count($loggedInSips)){
146
147 foreach ($loggedInSips as $loggedInSip) {
148 $prepareUsrIds[] = $loggedInSip->user;
149 }
150
151 //TODO: Change Dialmode Value in the column Of User Table (Ready to Predictive)
152 $usersLoggedIn = User::whereIn('id', $prepareUsrIds);
153 if($checkPrepareCol=="without")$usersLoggedIn = $usersLoggedIn->where('current_dialmode', '=', 'Predictive');
154 $usersLoggedIn = $usersLoggedIn->select('id','sel_campaign')->get();
155
156 foreach ($usersLoggedIn as $userLoggedIn) {
157 $campaignWiseUsrs[$userLoggedIn->sel_campaign][] = $userLoggedIn->id;
158 }
159 }
160 return $campaignWiseUsrs;
161 }
162
163 public function getActualAvailChannelCount()
164 {
165 $cnt = 0;
166 $allChanlCnt = $this->getSpanCount();
167
168 $diallineVal = Dialline::where('server','=', env('app_ip'))->where("status","=","Free")->where("dialstr","!=","")->where("enabled","=","1")->select('dialstr')->first();
169
170 //TODO: When SIP and Dahdi both are active
171 if(count($diallineVal)){
172 if(stristr($diallineVal->dialstr,"Dahdi")){
173 $dialedCnt = $this->getActualDahdiDialedCallCount();
174
175 $cnt = $allChanlCnt - $dialedCnt;
176 }
177 elseif(stristr($diallineVal->dialstr,"GATEWAY")){
178 $dialedCnt = $this->getActualSipDialedCallCount();
179
180 $cnt = $allChanlCnt - $dialedCnt;
181 }
182 }
183
184 return $cnt;
185 }
186
187 public function getActualSipDialedCallCount()
188 {
189 $allChnnlArr = array();
190 $dialstr = "Dial(SIP/GATEWAY/";
191 $chnlCnt = 0;
192
193 exec("/usr/sbin/asterisk -rx 'core show channels'",$allChnnls);
194
195 foreach($allChnnls as $allChnnl){
196 //$allChnnlArr[] = explode(" ", preg_replace('!\s+!', ' ', $allChnnl) );
197 if(stristr($allChnnl, $dialstr)){
198 $chnlCnt++;
199 }
200 }
201
202 return $chnlCnt;
203 }
204
205 public function getActualDahdiDialedCallCount()
206 {
207 $allChnnlArr = array();
208 $dialstr = "ACTIVE";
209 $status = "RED";
210 $chnlCnt = 0;
211
212 exec("/usr/sbin/asterisk -rx 'service dahdi status'",$allChnnls);
213
214 foreach($allChnnls as $allChnnl){
215 //$allChnnlArr[] = explode(" ", preg_replace('!\s+!', ' ', $allChnnl) );
216 if(stristr($allChnnl, $status)){
217 Break;
218 }
219
220 if(stristr($allChnnl, $dialstr)){
221 $chnlCnt++;
222 }
223 }
224
225 return $chnlCnt;
226 }
227
228 //TODO: Generate Client File To Take All Parameteres Of Campaigns
229 public function getCreateCallCount($client, $usrCnt)
230 {
231 $wakka = new KHRMSLib();
232 $mastersdata=$wakka->getCompanyMaster($client);
233
234 $ratio = $mastersdata["autodialercampaign"];
235 $dialedCallCnt = $this->getDialedCallCount($client);
236
237 return ($usrCnt*$ratio) - $dialedCallCnt;
238 }
239
240 public function getDialedCallCount($client)
241 {
242 $cnt = Dialline::whereIn("status", ["Auto","AutoCall"])->where("conf","=","")->where("regexstr","=",$client)->count();
243
244 return $cnt;
245 }
246
247 public function CreateCall($client, $acalls)
248 {
249 if($acalls>0)
250 {
251 for($i=0;$i<$acalls;$i++)
252 {
253 $this->useChannelToDial($client);
254 }
255 }
256 }
257
258 public function useChannelToDial($client)
259 {
260 $dialline=Dialline::where('server','=', env('app_ip'))->where("status","=","Free")->where("enabled","=","1");
261
262 //TODO::Need To Code Dspan Logic as per discussion
263 //if($dspan!="")$dialline=$dialline->where('dspan','=',$dspan)->where('id','<=','30');
264 $dialline=$dialline->orderBy('updated_at','ASC')->first();
265
266 if(!empty($dialline))
267 {
268 $this->createCrmCall($client, $dialline);
269 }
270
271 return;
272 }
273
274 public function createCrmCall($client, $dialline)
275 {
276 //TODO: Need to check whether callerid is required or not (in case of GSM Gateway)
277 $callerid="";
278 $wakka = new KHRMSLib();
279
280 //TODO::Need To Add Sequence Logic Here
281 $users=$wakka->getPersons("client='$client' and status='New' and mobile!='' limit 1");
282
283 if(sizeof($users)>=1)
284 {
285 $record=$wakka->getPerson($users[0]['id']);
286 if($record)
287 {
288 $record["peopledata"]["status"]="AutoCall";
289 $wakka->setPerson($users[0]['id'],$record);
290 }
291
292 $dialline->user_id=$user_id;
293 $dialline->status="AutoCall";
294 $dialline->regexstr=$users[0]['client'];
295 $dialline->number=$users[0]["mobile"];
296 $dialline->save();
297
298 $nowts=microtime(true)*1000;
299
300 //start the call log
301 $crmcall=new CRMCall();
302 $crmcall->number=$users[0]["mobile"];
303 $crmcall->user_id=0;
304 $crmcall->sipid_id=0;
305 $crmcall->crm_id=$users[0]['id'];
306 $crmcall->lan=$users[0]['lan'];
307 $crmcall->client=$users[0]['client'];
308 $crmcall->department=$users[0]['department'];
309 $crmcall->state='New';
310 $crmcall->type="AutoCall";
311 $crmcall->dialline_id=$dialline->id;
312
313 $crmcall->setTs('ts_Wait',$nowts);
314 $crmcall->setTs('ts_Call',$nowts);
315
316 $crmcall->did=$callerid;
317
318 $tdata=array();
319 $crmcall->data=json_encode($tdata);
320 $crmcall->save();
321
322 //start actual calls
323 $newqueue=new Kqueue();
324 $newqueue->autoCallOut($users[0]["mobile"],$callerid,$crmcall,$dialline);
325 }
326
327 return;
328 }
329
330 public function getSpanCount()
331 {
332 $spanArr = array("span1" => 30, "span2" => 0, "span3" => 0, "span4" => 0);
333
334 $cnt = array_sum($spanArr);
335
336 return $cnt;
337 }
338 }
...\ No newline at end of file ...\ No newline at end of file
1 <?php namespace App\Console\Commands;
2
3 use Illuminate\Console\Command;
4 //use Mail;
5 use DB;
6 use Config;
7
8 use App\Models\User;
9 use App\Models\Accesslog;
10
11 use App\Models\CRMCall;
12 use Schema;
13 use PDO;
14 use App\Models\Notification;
15 use App\Jobs\KHRMSLib;
16
17 use Input;
18 use App\Models\Sipid;
19 use App\Models\Kqueue;
20 use App\Models\Dialline;
21 use App\Models\Session;
22 use App\Models\Cutoff;
23
24 use Log;
25 use Illuminate\Database\Schema\Blueprint;
26
27 class PredictiveCallHangUp extends Command {
28
29 /**
30 * The console command name.
31 *
32 * @var string
33 */
34 protected $signature = 'PredictiveCallHangUp';
35
36 /**
37 * The console command description.
38 *
39 * @var string
40 */
41 protected $description = 'Hang Up Extra Calls If Agents Are Not Free';
42
43 /**
44 * Execute the console command.
45 *
46 * @return mixed
47 */
48 public function handle()
49 {
50 while(true)
51 {
52 usleep(1000000);
53 $this->runHangUp();
54 }
55 }
56
57 public function runHangUp()
58 {
59 try {
60 $breathingTime = 5;
61 $avgringsec = 0;
62
63 $avgringsec = Cutoff::select(DB::Raw('avg(avg_ring) as avgringsec'))->first();
64 if($avgringsec)$avgringsec= $avgringsec->avgringsec;
65
66 $diallines = Dialline::whereIn("status", ["Auto","AutoCall"])->where("conf","=","")->select('status','updated_at','channel','server')->get();
67
68 foreach ($diallines as $dialline) {
69
70 $newqueue=new Kqueue();
71 $lastUpdatedTime = strtotime(date("Y-m-d H:i:s")) - strtotime($dialline->updated_at);
72
73 if ($dialline->status == 'Auto' && $lastUpdatedTime > $breathingTime) {
74 $newqueue->hangupChannelS($dialline->channel,$dialline->server);
75 }
76 elseif($dialline->status == 'AutoCall' && $lastUpdatedTime > ($avgringsec+$breathingTime)) {
77 $newqueue->hangupChannelS($dialline->channel,$dialline->server);
78 }
79 }
80 } catch (Exception $e) {
81 Log::useFiles(storage_path()."/logs/predictive_".date("Y_m_d").".log");
82 Log::error($e);
83 continue;
84 }
85 }
86 }
...\ No newline at end of file ...\ No newline at end of file
1 <?php namespace App\Console\Commands;
2
3 use Illuminate\Console\Command;
4 //use Mail;
5 use DB;
6 use Config;
7
8 use App\Models\User;
9 use App\Models\Accesslog;
10
11 use App\Models\CRMCall;
12 use Schema;
13 use PDO;
14 use App\Models\Notification;
15 use App\Jobs\KHRMSLib;
16
17 use Input;
18 use App\Models\Sipid;
19 use App\Models\Kqueue;
20 use App\Models\Dialline;
21 use App\Models\Session;
22 use App\Models\Cutoff;
23
24 use Log;
25 use Illuminate\Database\Schema\Blueprint;
26
27 class UpdateAvgRingSec extends Command {
28
29 /**
30 * The console command name.
31 *
32 * @var string
33 */
34 protected $signature = 'UpdateAvgRingSec';
35
36 /**
37 * The console command description.
38 *
39 * @var string
40 */
41 protected $description = 'Update Avg Call Ring Sec Of Last 50 Calls';
42
43 /**
44 * Execute the console command.
45 *
46 * @return mixed
47 */
48 public function handle()
49 {
50 $avgcallsecObj = CRMCall::select(DB::Raw('ROUND((avg(callsec))/1000) as avgcallsec'))->limit(50)->where("type","!=","Inbound")->first();
51
52 if(count($avgcallsecObj))
53 {
54 Cutoff::where('user_id', '!=', "")->update(
55 ['avg_ring' => $avgcallsecObj->avgcallsec
56 ]);
57 }
58 }
59 }
...\ No newline at end of file ...\ No newline at end of file
...@@ -48,6 +48,9 @@ protected $commands = [ ...@@ -48,6 +48,9 @@ protected $commands = [
48 'App\Console\Commands\bulkserverupload_data', 48 'App\Console\Commands\bulkserverupload_data',
49 'App\Console\Commands\bulkServerUpload_data3', 49 'App\Console\Commands\bulkServerUpload_data3',
50 'App\Console\Commands\Userlog_datavalidation', 50 'App\Console\Commands\Userlog_datavalidation',
51 'App\Console\Commands\CreateCall',
52 'App\Console\Commands\PredictiveCallHangUp',
53 'App\Console\Commands\UpdateAvgRingSec',
51 54
52 ]; 55 ];
53 56
......
...@@ -897,6 +897,14 @@ function resetCallArray() ...@@ -897,6 +897,14 @@ function resetCallArray()
897 kSetDData('C','prograssiveDelay',120); 897 kSetDData('C','prograssiveDelay',120);
898 } 898 }
899 899
900 function savedialermode()
901 {
902 var datastr="kstychCall="+JSON.stringify(kstychCall);
903 datastr+="&kstychDialer="+JSON.stringify(kstychDialer);
904
905 doAjax("dialer?action=usersel&client="+client,datastr,"","","singlefail","POST");
906 }
907
900 function updateDialerState(objstr,key,val,key2,val2) 908 function updateDialerState(objstr,key,val,key2,val2)
901 { 909 {
902 if(objstr=="dialer") 910 if(objstr=="dialer")
...@@ -933,7 +941,7 @@ function updateDialerState(objstr,key,val,key2,val2) ...@@ -933,7 +941,7 @@ function updateDialerState(objstr,key,val,key2,val2)
933 941
934 var datastr="kstychCall="+JSON.stringify(kstychCall); 942 var datastr="kstychCall="+JSON.stringify(kstychCall);
935 datastr+="&kstychDialer="+JSON.stringify(kstychDialer); 943 datastr+="&kstychDialer="+JSON.stringify(kstychDialer);
936 var client = $('#tcampaign_select').val(); 944 //var client = $('#tcampaign_select').val();
937 945
938 doAjax('dialer?action=dialerstate&client='+client,datastr,'', 'ajax_manualdial','singlefail','POST', 946 doAjax('dialer?action=dialerstate&client='+client,datastr,'', 'ajax_manualdial','singlefail','POST',
939 function(retstr){ 947 function(retstr){
...@@ -962,6 +970,9 @@ function updateDialerState(objstr,key,val,key2,val2) ...@@ -962,6 +970,9 @@ function updateDialerState(objstr,key,val,key2,val2)
962 970
963 updateDialerState(); 971 updateDialerState();
964 }); 972 });
973
974 if(val2=="Predictive")
975 savedialermode(val2);
965 } 976 }
966 } 977 }
967 if(objstr=="call") 978 if(objstr=="call")
......
...@@ -396,6 +396,8 @@ use App\Models\CRMCall; ...@@ -396,6 +396,8 @@ use App\Models\CRMCall;
396 396
397 <script> 397 <script>
398 398
399 client = $('#tcampaign_select').val();
400
399 <?php if($client){?> 401 <?php if($client){?>
400 $("#tcampaign_select").val('<?=$client?>'); 402 $("#tcampaign_select").val('<?=$client?>');
401 <?php }?> 403 <?php }?>
...@@ -416,6 +418,8 @@ function campaignSelect() ...@@ -416,6 +418,8 @@ function campaignSelect()
416 { 418 {
417 var dashlet="Dialer"; 419 var dashlet="Dialer";
418 doAjax("dashboard/dashlet?module="+dashlet+"&client="+$("#tcampaign_select").val(),"","DashletT-"+dashlet,"ajax_dashlet_"+dashlet,"singlefail","GET"); 420 doAjax("dashboard/dashlet?module="+dashlet+"&client="+$("#tcampaign_select").val(),"","DashletT-"+dashlet,"ajax_dashlet_"+dashlet,"singlefail","GET");
421
422 savedialermode();
419 } 423 }
420 424
421 function dataSelect() 425 function dataSelect()
...@@ -449,6 +453,8 @@ function dialerLoadData(listname,currentstatus,legalstatus,page,skey,stxt) ...@@ -449,6 +453,8 @@ function dialerLoadData(listname,currentstatus,legalstatus,page,skey,stxt)
449 { 453 {
450 454
451 doAjax("dialer/bucketdata","client={!!$client!!}&bucket="+listname+"&currentstatus="+currentstatus+"&legalstatus="+legalstatus+'&page='+page+'&skey='+skey+'&stxt='+stxt,"bucketlistdiv","ajax_dialer_list","singlefail","GET"); 455 doAjax("dialer/bucketdata","client={!!$client!!}&bucket="+listname+"&currentstatus="+currentstatus+"&legalstatus="+legalstatus+'&page='+page+'&skey='+skey+'&stxt='+stxt,"bucketlistdiv","ajax_dialer_list","singlefail","GET");
456
457 savedialermode();
452 } 458 }
453 dialerLoadData('CurrentQueue','','',1,'',''); 459 dialerLoadData('CurrentQueue','','',1,'','');
454 </script> 460 </script>
......
...@@ -202,31 +202,35 @@ function createSearchRecordDiv(divid) ...@@ -202,31 +202,35 @@ function createSearchRecordDiv(divid)
202 //print_r($userdialmode); 202 //print_r($userdialmode);
203 if(in_array('Progressive',$userdialmode)) 203 if(in_array('Progressive',$userdialmode))
204 { ?> 204 { ?>
205 <li><a href="#" onclick='updateDialerState("dialer","mDialerState","Progressive");return false;'><b>Progressive</b></a></li> 205 <li><a href="#" onclick='updateDialerState("dialer","mDialerState","Progressive");savedialermode();return false;'><b>Progressive</b></a></li>
206 <?php 206 <?php
207 } 207 }
208 if(in_array('Manual',$userdialmode)){?> 208 if(in_array('Manual',$userdialmode)){?>
209 209
210 210
211 <li id=dialerManualAllowLI><a href="#" onclick='updateDialerState("dialer","mDialerState","Manual");return false;'><b>Manual</b></a></li> 211 <li id=dialerManualAllowLI><a href="#" onclick='updateDialerState("dialer","mDialerState","Manual");savedialermode();return false;'><b>Manual</b></a></li>
212 212
213 213
214 <?php } if(in_array('Incoming',$userdialmode)){ ?> 214 <?php } if(in_array('Incoming',$userdialmode)){ ?>
215 <li style='background:#36bc9b'><a href="#" onclick='updateDialerState("dialer","mDialerState","Ready","mDialerSubState","Incoming");return false;'><b>Incoming</b></a></li> 215 <li style='background:#36bc9b'><a href="#" onclick='updateDialerState("dialer","mDialerState","Ready","mDialerSubState","Incoming");savedialermode();return false;'><b>Incoming</b></a></li>
216 <?php } if(in_array('Predictive',$userdialmode)){?>
217
218 <li style='background:#36bc9b'><a href="#" onclick='updateDialerState("dialer","mDialerState","Ready","mDialerSubState","Predictive");savedialermode();return false;'><b>Incoming</b></a></li>
216 <?php } ?> 219 <?php } ?>
220
217 <!--<li><a href="#" onclick='updateDialerState("dialer","mDialerState","DialNext");return false;'><b>DialNext</b></a></li>--> 221 <!--<li><a href="#" onclick='updateDialerState("dialer","mDialerState","DialNext");return false;'><b>DialNext</b></a></li>-->
218 222
219 <li><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","Manual");return false;'><b>Paused</b></a></li> 223 <li><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","Manual");savedialermode();return false;'><b>Paused</b></a></li>
220 224
221 225
222 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","AgentBriefing");return false;'><b>AgentBriefing</b></a></li> 226 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","AgentBriefing");savedialermode();return false;'><b>AgentBriefing</b></a></li>
223 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","TeamMeeting");return false;'><b>TeamMeeting</b></a></li> 227 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","TeamMeeting");savedialermode();return false;'><b>TeamMeeting</b></a></li>
224 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","QualityFeedback");return false;'><b>QualityFeedback</b></a></li> 228 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","QualityFeedback");savedialermode();return false;'><b>QualityFeedback</b></a></li>
225 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","LunchBreak");return false;'><b>LunchBreak</b></a></li> 229 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","LunchBreak");savedialermode();return false;'><b>LunchBreak</b></a></li>
226 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","TeaBreak");return false;'><b>TeaBreak</b></a></li> 230 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","TeaBreak");savedialermode();return false;'><b>TeaBreak</b></a></li>
227 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","UtilityBreak");return false;'><b>UtilityBreak</b></a></li> 231 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","UtilityBreak");savedialermode();return false;'><b>UtilityBreak</b></a></li>
228 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","FloorAnnouncements");return false;'><b>FloorAnnouncements</b></a></li> 232 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","FloorAnnouncements");savedialermode();return false;'><b>FloorAnnouncements</b></a></li>
229 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","DownTime");return false;'><b>DownTime</b></a></li> 233 <li style='background:#ccc'><a href="#" onclick='updateDialerState("dialer","mDialerState","Paused","mDialerSubState","DownTime");savedialermode();return false;'><b>DownTime</b></a></li>
230 234
231 235
232 </ul> 236 </ul>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!