diff --git a/UPGRADE b/UPGRADE index 52d36669..23550631 100644 --- a/UPGRADE +++ b/UPGRADE @@ -448,6 +448,10 @@ OTHER CHANGES: You use this script in an IFRAME for the campaign. It must be customized for your specific business rules. +105. Added the ability to use custom statuses for scheduled callbacks. These + are configurable with the Scheduled Callbacks flag in the System + Statuses and Campaign Statuses administrative screens. + diff --git a/agi/agi-VDAD_ALL_outbound.agi b/agi/agi-VDAD_ALL_outbound.agi index 68e89828..cfe145c9 100644 --- a/agi/agi-VDAD_ALL_outbound.agi +++ b/agi/agi-VDAD_ALL_outbound.agi @@ -79,6 +79,7 @@ # 100727-1653 - Fixes for queue priority feature # 100903-0041 - Changed lead_id max length to 10 digits # 101207-0713 - Added fix for rare VDAC-entry-missing issue +# 110213-0008 - Added scheduled callbacks custom statuses compatibility # $script = 'agi-VDAD_ALL_outbound.agi'; @@ -414,8 +415,36 @@ if ($VDACaffected_rows < 1) } if ($VDACaffected_rows > 0) { + ### find list of callback statuses + $SCstatuses="'CBHOLD'"; + $stmtA = "select status from vicidial_statuses where scheduled_callback='Y' limit 10000000;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArowsSCS=$sthA->rows; + $rec_count=0; + while ($sthArowsSCS > $rec_count) + { + @aryA = $sthA->fetchrow_array; + $SCstatuses .= ",'$aryA[0]'"; + $rec_count++; + } + $sthA->finish(); + $stmtA = "select status from vicidial_campaign_statuses where scheduled_callback='Y' limit 10000000;"; + $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; + $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; + $sthArowsSCS=$sthA->rows; + $rec_count=0; + while ($sthArowsSCS > $rec_count) + { + @aryA = $sthA->fetchrow_array; + $SCstatuses .= ",'$aryA[0]'"; + $rec_count++; + } + $sthA->finish(); + + # flag the lead as being Answered or Picked up - $stmtA = "UPDATE vicidial_list set status='PU' where lead_id='$CIDlead_id' and status NOT IN('CALLBK');"; + $stmtA = "UPDATE vicidial_list set status='PU' where lead_id='$CIDlead_id' and status NOT IN($SCstatuses);"; if ($AGILOG) {$agi_string = "|$stmtA|"; &agi_output;} $affected_rows = $dbhA->do($stmtA); $dbhP=$dbhA; $mysql_count='01005'; $MEL_aff_rows=$affected_rows; &mysql_error_logging; diff --git a/bin/AST_DB_dead_cb_purge.pl b/bin/AST_DB_dead_cb_purge.pl index 04a093a6..d5e09d2d 100644 --- a/bin/AST_DB_dead_cb_purge.pl +++ b/bin/AST_DB_dead_cb_purge.pl @@ -9,10 +9,11 @@ # # It is recommended that you run this program on the local Asterisk machine # -# Copyright (C) 2010 Matt Florell LICENSE: AGPLv2 +# Copyright (C) 2011 Matt Florell LICENSE: AGPLv2 # # CHANGES # 101128-0149 - first build +# 110212-2343 - added scheduled callback custom statuses capacity # ### begin parsing run-time options ### @@ -121,6 +122,36 @@ $dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VA $deleted=0; +### find list of callback statuses +$SCstatuses=' CBHOLD'; +$stmtA = "select status from vicidial_statuses where scheduled_callback='Y' limit 10000000;"; +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArowsSCS=$sthA->rows; +$rec_count=0; +while ($sthArowsSCS > $rec_count) + { + @aryA = $sthA->fetchrow_array; + $SCstatuses .= " $aryA[0]"; + $rec_count++; + } +$sthA->finish(); +$stmtA = "select status from vicidial_campaign_statuses where scheduled_callback='Y' limit 10000000;"; +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArowsSCS=$sthA->rows; +$rec_count=0; +while ($sthArowsSCS > $rec_count) + { + @aryA = $sthA->fetchrow_array; + $SCstatuses .= " $aryA[0]"; + $rec_count++; + } +$sthA->finish(); +$SCstatuses .= " "; +if($DB){print STDERR "\nScheduled Callback statuses: |$SCstatuses|\n";} + + $stmtA = "select lead_id,status,callback_id from vicidial_callbacks limit 10000000;"; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; @@ -157,8 +188,8 @@ while ($sthArowsCT > $rec_count) if ($sthArows > 0) { @aryA = $sthA->fetchrow_array; - $callback_statuses[$rec_count] = $aryA[0]; - if ( ($purge_non_cb > 0) && ($aryA[0] !~ /CBHOLD|CALLBK/) ) + $callback_statuses[$rec_count] = " $aryA[0] "; + if ( ($purge_non_cb > 0) && ($SCstatuses !~ /$callback_statuses[$rec_count]/) ) {$delete_lead++;} } else diff --git a/bin/AST_VDhopper.pl b/bin/AST_VDhopper.pl index 7a06737a..09e66303 100644 --- a/bin/AST_VDhopper.pl +++ b/bin/AST_VDhopper.pl @@ -65,6 +65,7 @@ # 100706-2332 - Added ability to purge only one campaign's leads in the hopper # 101108-1451 - Added ability for the hopper level to be set automatically and remove excess leads from the hopper (MikeC) # 110103-1118 - Added lead_order_randomize option +# 110212-2255 - Added scheduled callback custom statuses capability # # constants @@ -374,7 +375,7 @@ if ($CBHOLD_count > 0) $update_leads=''; $cbc=0; $cba=0; - $stmtA = "SELECT vicidial_callbacks.lead_id,recipient,campaign_id,vicidial_callbacks.list_id,gmt_offset_now,state FROM vicidial_callbacks,vicidial_list where callback_time <= '$now_date' and vicidial_callbacks.status='ACTIVE' and vicidial_callbacks.lead_id=vicidial_list.lead_id;"; + $stmtA = "SELECT vicidial_callbacks.lead_id,recipient,campaign_id,vicidial_callbacks.list_id,gmt_offset_now,state,vicidial_callbacks.lead_status FROM vicidial_callbacks,vicidial_list where callback_time <= '$now_date' and vicidial_callbacks.status='ACTIVE' and vicidial_callbacks.lead_id=vicidial_list.lead_id;"; $sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; $sthA->execute or die "executing: $stmtA ", $dbhA->errstr; $sthArows=$sthA->rows; @@ -391,6 +392,7 @@ if ($CBHOLD_count > 0) $CA_list_id[$cba] = $aryA[3]; $CA_gmt_offset_now[$cba] = $aryA[4]; $CA_state[$cba] = $aryA[5]; + $CA_status[$cba] = $aryA[6]; $cba++; } $cbc++; @@ -415,7 +417,7 @@ if ($CBHOLD_count > 0) $CAu=0; foreach(@CA_lead_id) { - $stmtA = "UPDATE vicidial_list set status='CALLBK', called_since_last_reset='N' where lead_id='$CA_lead_id[$CAu]';"; + $stmtA = "UPDATE vicidial_list set status='$CA_status[$CAu]', called_since_last_reset='N' where lead_id='$CA_lead_id[$CAu]';"; $affected_rows = $dbhA->do($stmtA); if ($DB) {print "Scheduled Callbacks Activated: $affected_rows\n";} $event_string = "|CALLBACKS LISTACT|$affected_rows|"; diff --git a/extras/MySQL_AST_CREATE_tables.sql b/extras/MySQL_AST_CREATE_tables.sql index 8f81ee08..b3f759a6 100644 --- a/extras/MySQL_AST_CREATE_tables.sql +++ b/extras/MySQL_AST_CREATE_tables.sql @@ -817,7 +817,8 @@ sale ENUM('Y','N') default 'N', dnc ENUM('Y','N') default 'N', customer_contact ENUM('Y','N') default 'N', not_interested ENUM('Y','N') default 'N', -unworkable ENUM('Y','N') default 'N' +unworkable ENUM('Y','N') default 'N', +scheduled_callback ENUM('Y','N') default 'N' ); CREATE TABLE vicidial_campaign_statuses ( @@ -832,6 +833,7 @@ dnc ENUM('Y','N') default 'N', customer_contact ENUM('Y','N') default 'N', not_interested ENUM('Y','N') default 'N', unworkable ENUM('Y','N') default 'N', +scheduled_callback ENUM('Y','N') default 'N', index (campaign_id) ); @@ -1096,6 +1098,7 @@ user VARCHAR(20), recipient ENUM('USERONLY','ANYONE'), comments VARCHAR(255), user_group VARCHAR(20), +lead_status VARCHAR(6) default 'CALLBK', index (lead_id), index (status), index (callback_time) @@ -2413,7 +2416,10 @@ ALTER TABLE vicidial_agent_log_archive MODIFY agent_log_id INT(9) UNSIGNED NOT N CREATE TABLE vicidial_carrier_log_archive LIKE vicidial_carrier_log; -UPDATE system_settings SET db_schema_version='1258',db_schema_update_date=NOW(); +CREATE TABLE vicidial_call_notes_archive LIKE vicidial_call_notes; +ALTER TABLE vicidial_call_notes_archive MODIFY notesid INT(9) UNSIGNED NOT NULL; + +UPDATE system_settings SET db_schema_version='1259',db_schema_update_date=NOW(); GRANT RELOAD ON *.* TO cron@'%'; GRANT RELOAD ON *.* TO cron@localhost; diff --git a/extras/first_server_install.sql b/extras/first_server_install.sql index 0c704225..3649c2e4 100644 --- a/extras/first_server_install.sql +++ b/extras/first_server_install.sql @@ -317,41 +317,41 @@ INSERT INTO vicidial_list(status,list_id,phone_code,phone_number,first_name,last INSERT INTO vicidial_list(status,list_id,phone_code,phone_number,first_name,last_name,address1,city,state,postal_code,country_code,gender,email) values('NEW','101','1','7275551212','Matt','lead06','1234 Fake St.','Clearwater','FL','33760','USA','M','test@test.com'); INSERT INTO vicidial_list(status,list_id,phone_code,phone_number,first_name,last_name,address1,city,state,postal_code,country_code,gender,email) values('NEW','101','1','7275551212','Matt','lead07','1234 Fake St.','Clearwater','FL','33760','USA','M','test@test.com'); -INSERT INTO vicidial_statuses values('NEW','New Lead','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('QUEUE','Lead To Be Called','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('INCALL','Lead Being Called','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('DROP','Agent Not Available','N','Y','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('XDROP','Agent Not Available IN','N','Y','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('NA','No Answer AutoDial','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('CALLBK','Call Back','Y','Y','UNDEFINED','N','N','Y','N','N'); -INSERT INTO vicidial_statuses values('CBHOLD','Call Back Hold','N','Y','UNDEFINED','N','N','Y','N','N'); -INSERT INTO vicidial_statuses values('A','Answering Machine','Y','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('AA','Answering Machine Auto','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('AM','Answering Machine Sent to Mesg','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('AL','Answering Machine Msg Played','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('AFAX','Fax Machine Auto','N','N','UNDEFINED','N','N','N','N','Y'); -INSERT INTO vicidial_statuses values('AB','Busy Auto','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('B','Busy','Y','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('DC','Disconnected Number','Y','N','UNDEFINED','N','N','N','N','Y'); -INSERT INTO vicidial_statuses values('ADC','Disconnected Number Auto','N','N','UNDEFINED','N','N','N','N','Y'); -INSERT INTO vicidial_statuses values('DEC','Declined Sale','Y','Y','UNDEFINED','N','N','Y','N','N'); -INSERT INTO vicidial_statuses values('DNC','DO NOT CALL','Y','Y','UNDEFINED','N','Y','N','N','N'); -INSERT INTO vicidial_statuses values('DNCL','DO NOT CALL Hopper Match','N','N','UNDEFINED','N','Y','N','N','N'); -INSERT INTO vicidial_statuses values('DNCC','DO NOT CALL Camp Match','N','N','UNDEFINED','N','Y','N','N','N'); -INSERT INTO vicidial_statuses values('SALE','Sale Made','Y','Y','UNDEFINED','Y','N','N','N','N'); -INSERT INTO vicidial_statuses values('N','No Answer','Y','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('NI','Not Interested','Y','Y','UNDEFINED','N','N','Y','Y','N'); -INSERT INTO vicidial_statuses values('NP','No Pitch No Price','Y','Y','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('PU','Call Picked Up','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('PM','Played Message','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('XFER','Call Transferred','Y','Y','UNDEFINED','N','N','Y','N','N'); -INSERT INTO vicidial_statuses values('ERI','Agent Error','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('SVYEXT','Survey sent to Extension','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('SVYVM','Survey sent to Voicemail','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('SVYHU','Survey Hungup','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('SVYREC','Survey sent to Record','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('QVMAIL','Queue Abandon Voicemail Left','N','N','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('RQXFER','Re-Queue','N','Y','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('TIMEOT','Inbound Queue Timeout Drop','N','Y','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('AFTHRS','Inbound After Hours Drop','N','Y','UNDEFINED','N','N','N','N','N'); -INSERT INTO vicidial_statuses values('NANQUE','Inbound No Agent No Queue Drop','N','Y','UNDEFINED','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('NEW','New Lead','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('QUEUE','Lead To Be Called','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('INCALL','Lead Being Called','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('DROP','Agent Not Available','N','Y','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('XDROP','Agent Not Available IN','N','Y','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('NA','No Answer AutoDial','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('CALLBK','Call Back','Y','Y','UNDEFINED','N','N','Y','N','N','Y'); +INSERT INTO vicidial_statuses values('CBHOLD','Call Back Hold','N','Y','UNDEFINED','N','N','Y','N','N','Y'); +INSERT INTO vicidial_statuses values('A','Answering Machine','Y','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('AA','Answering Machine Auto','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('AM','Answering Machine Sent to Mesg','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('AL','Answering Machine Msg Played','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('AFAX','Fax Machine Auto','N','N','UNDEFINED','N','N','N','N','Y','N'); +INSERT INTO vicidial_statuses values('AB','Busy Auto','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('B','Busy','Y','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('DC','Disconnected Number','Y','N','UNDEFINED','N','N','N','N','Y','N'); +INSERT INTO vicidial_statuses values('ADC','Disconnected Number Auto','N','N','UNDEFINED','N','N','N','N','Y','N'); +INSERT INTO vicidial_statuses values('DEC','Declined Sale','Y','Y','UNDEFINED','N','N','Y','N','N','N'); +INSERT INTO vicidial_statuses values('DNC','DO NOT CALL','Y','Y','UNDEFINED','N','Y','N','N','N','N'); +INSERT INTO vicidial_statuses values('DNCL','DO NOT CALL Hopper Match','N','N','UNDEFINED','N','Y','N','N','N','N'); +INSERT INTO vicidial_statuses values('DNCC','DO NOT CALL Camp Match','N','N','UNDEFINED','N','Y','N','N','N','N'); +INSERT INTO vicidial_statuses values('SALE','Sale Made','Y','Y','UNDEFINED','Y','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('N','No Answer','Y','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('NI','Not Interested','Y','Y','UNDEFINED','N','N','Y','Y','N','N'); +INSERT INTO vicidial_statuses values('NP','No Pitch No Price','Y','Y','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('PU','Call Picked Up','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('PM','Played Message','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('XFER','Call Transferred','Y','Y','UNDEFINED','N','N','Y','N','N','N'); +INSERT INTO vicidial_statuses values('ERI','Agent Error','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('SVYEXT','Survey sent to Extension','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('SVYVM','Survey sent to Voicemail','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('SVYHU','Survey Hungup','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('SVYREC','Survey sent to Record','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('QVMAIL','Queue Abandon Voicemail Left','N','N','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('RQXFER','Re-Queue','N','Y','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('TIMEOT','Inbound Queue Timeout Drop','N','Y','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('AFTHRS','Inbound After Hours Drop','N','Y','UNDEFINED','N','N','N','N','N','N'); +INSERT INTO vicidial_statuses values('NANQUE','Inbound No Agent No Queue Drop','N','Y','UNDEFINED','N','N','N','N','N','N'); diff --git a/extras/upgrade_2.4.sql b/extras/upgrade_2.4.sql index 53ae0d37..336e0ec6 100644 --- a/extras/upgrade_2.4.sql +++ b/extras/upgrade_2.4.sql @@ -645,3 +645,15 @@ ALTER TABLE system_settings ADD queuemetrics_dispo_pause VARCHAR(6) default ''; ALTER TABLE vicidial_campaigns ADD lead_order_randomize ENUM('Y','N') default 'N'; UPDATE system_settings SET db_schema_version='1258',db_schema_update_date=NOW(); + +CREATE TABLE vicidial_call_notes_archive LIKE vicidial_call_notes; +ALTER TABLE vicidial_call_notes_archive MODIFY notesid INT(9) UNSIGNED NOT NULL; + +ALTER TABLE vicidial_statuses ADD scheduled_callback ENUM('Y','N') default 'N'; +ALTER TABLE vicidial_campaign_statuses ADD scheduled_callback ENUM('Y','N') default 'N'; +UPDATE vicidial_statuses SET scheduled_callback='Y' where status='CALLBK'; +UPDATE vicidial_campaign_statuses SET scheduled_callback='Y' where status='CALLBK'; + +ALTER TABLE vicidial_callbacks ADD lead_status VARCHAR(6) default 'CALLBK'; + +UPDATE system_settings SET db_schema_version='1259',db_schema_update_date=NOW(); diff --git a/www/agc/vdc_db_query.php b/www/agc/vdc_db_query.php index c5f1b5c1..f4a69d37 100644 --- a/www/agc/vdc_db_query.php +++ b/www/agc/vdc_db_query.php @@ -268,10 +268,11 @@ # 110103-1343 - Added queuemetrics_loginout NONE option # 110124-1134 - Small query fix for large queue_log tables # 110124-1456 - Fixed AREACODE DNC manual dial bug +# 110212-2103 - Added support for custom scheduled callback statuses # -$version = '2.4-174'; -$build = '110124-1456'; +$version = '2.4-175'; +$build = '110212-2103'; $mel=1; # Mysql Error Log enabled = 1 $mysql_log_count=365; $one_mysql_log=0; @@ -462,6 +463,8 @@ if (isset($_GET["qm_phone"])) {$qm_phone=$_GET["qm_phone"];} elseif (isset($_POST["qm_phone"])) {$qm_phone=$_POST["qm_phone"];} if (isset($_GET["manual_dial_call_time_check"])) {$manual_dial_call_time_check=$_GET["manual_dial_call_time_check"];} elseif (isset($_POST["manual_dial_call_time_check"])) {$manual_dial_call_time_check=$_POST["manual_dial_call_time_check"];} +if (isset($_GET["CallBackLeadStatus"])) {$CallBackLeadStatus=$_GET["CallBackLeadStatus"];} + elseif (isset($_POST["CallBackLeadStatus"])) {$CallBackLeadStatus=$_POST["CallBackLeadStatus"];} header ("Content-type: text/html; charset=utf-8"); @@ -2013,7 +2016,32 @@ if ($ACTION == 'manDiaLnextCaLL') $CBcallback_time = ''; $CBuser = ''; $CBcomments = ''; - if (ereg("CALLBK",$dispo)) + $CBstatus = 0; + + $stmt="SELECT count(*) FROM vicidial_statuses where status='$dispo' and scheduled_callback='Y';"; + $rslt=mysql_query($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} + if ($DB) {echo "$stmt\n";} + $cb_record_ct = mysql_num_rows($rslt); + if ($cb_record_ct > 0) + { + $row=mysql_fetch_row($rslt); + $CBstatus = $row[0]; + } + if ($CBstatus < 1) + { + $stmt="SELECT count(*) FROM vicidial_campaign_statuses where status='$dispo' and scheduled_callback='Y';"; + $rslt=mysql_query($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} + if ($DB) {echo "$stmt\n";} + $cb_record_ct = mysql_num_rows($rslt); + if ($cb_record_ct > 0) + { + $row=mysql_fetch_row($rslt); + $CBstatus = $row[0]; + } + } + if ( ($CBstatus > 0) or ($dispo == 'CBHOLD') ) { $stmt="SELECT entry_time,callback_time,user,comments FROM vicidial_callbacks where lead_id='$lead_id' order by callback_id desc LIMIT 1;"; $rslt=mysql_query($stmt, $link); @@ -4310,7 +4338,32 @@ if ($ACTION == 'VDADcheckINCOMING') $CBcallback_time = ''; $CBuser = ''; $CBcomments = ''; - if (ereg("CALLBK",$dispo)) + $CBstatus = 0; + + $stmt="SELECT count(*) FROM vicidial_statuses where status='$dispo' and scheduled_callback='Y';"; + $rslt=mysql_query($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} + if ($DB) {echo "$stmt\n";} + $cb_record_ct = mysql_num_rows($rslt); + if ($cb_record_ct > 0) + { + $row=mysql_fetch_row($rslt); + $CBstatus = $row[0]; + } + if ($CBstatus < 1) + { + $stmt="SELECT count(*) FROM vicidial_campaign_statuses where status='$dispo' and scheduled_callback='Y';"; + $rslt=mysql_query($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} + if ($DB) {echo "$stmt\n";} + $cb_record_ct = mysql_num_rows($rslt); + if ($cb_record_ct > 0) + { + $row=mysql_fetch_row($rslt); + $CBstatus = $row[0]; + } + } + if ( ($CBstatus > 0) or ($dispo == 'CBHOLD') ) { $stmt="SELECT entry_time,callback_time,user,comments FROM vicidial_callbacks where lead_id='$lead_id' order by callback_id desc LIMIT 1;"; $rslt=mysql_query($stmt, $link); @@ -5002,8 +5055,33 @@ if ($ACTION == 'VDADcheckINCOMING') $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00124',$user,$server_ip,$session_name,$one_mysql_log);} - ### If CALLBK, change vicidial_callback record to INACTIVE - if (eregi("CALLBK|CBHOLD", $dispo)) + ### If a scheduled callback, change vicidial_callback record to INACTIVE + $CBstatus = 0; + + $stmt="SELECT count(*) FROM vicidial_statuses where status='$dispo' and scheduled_callback='Y';"; + $rslt=mysql_query($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} + if ($DB) {echo "$stmt\n";} + $cb_record_ct = mysql_num_rows($rslt); + if ($cb_record_ct > 0) + { + $row=mysql_fetch_row($rslt); + $CBstatus = $row[0]; + } + if ($CBstatus < 1) + { + $stmt="SELECT count(*) FROM vicidial_campaign_statuses where status='$dispo' and scheduled_callback='Y';"; + $rslt=mysql_query($stmt, $link); + if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00XXX',$user,$server_ip,$session_name,$one_mysql_log);} + if ($DB) {echo "$stmt\n";} + $cb_record_ct = mysql_num_rows($rslt); + if ($cb_record_ct > 0) + { + $row=mysql_fetch_row($rslt); + $CBstatus = $row[0]; + } + } + if ( ($CBstatus > 0) or (eregi("CALLBK|CBHOLD", $dispo)) ) { $stmt="UPDATE vicidial_callbacks set status='INACTIVE' where lead_id='$lead_id' and status NOT IN('INACTIVE','DEAD','ARCHIVE');"; if ($format=='debug') {echo "\n";} @@ -5553,6 +5631,8 @@ if ($ACTION == 'updateDISPO') # $fp = fopen ("./vicidial_debug.txt", "a"); # fwrite ($fp, "$NOW_TIME|DISPO_CALL |$MDnextCID|$stage|$campaign|$lead_id|$dispo_choice|$user|$uniqueid|$auto_dial_level|$agent_log_id|\n"); # fclose($fp); + $log_dispo_choice = $dispo_choice; + if (strlen($CallBackLeadStatus) > 0) {$log_dispo_choice = $CallBackLeadStatus;} $stmt = "SELECT count(*) from vicidial_inbound_groups where group_id='$stage';"; if ($format=='debug') {echo "\n";} @@ -5562,7 +5642,7 @@ if ($ACTION == 'updateDISPO') if ($row[0] > 0) { $call_type='IN'; - $stmt = "UPDATE vicidial_closer_log set status='$dispo_choice' where lead_id='$lead_id' and user='$user' order by closecallid desc limit 1;"; + $stmt = "UPDATE vicidial_closer_log set status='$log_dispo_choice' where lead_id='$lead_id' and user='$user' order by closecallid desc limit 1;"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00144',$user,$server_ip,$session_name,$one_mysql_log);} @@ -5598,7 +5678,7 @@ if ($ACTION == 'updateDISPO') $row=mysql_fetch_row($rslt); if ($row[0] > 0) { - $stmt="UPDATE vicidial_log set status='$dispo_choice' where lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by uniqueid desc limit 1;"; + $stmt="UPDATE vicidial_log set status='$log_dispo_choice' where lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by uniqueid desc limit 1;"; if ($format=='debug') {echo "\n";} $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00145',$user,$server_ip,$session_name,$one_mysql_log);} @@ -5689,7 +5769,7 @@ if ($ACTION == 'updateDISPO') $PADlead_id = sprintf("%010s", $lead_id); while (strlen($PADlead_id) > 10) {$PADlead_id = substr("$PADlead_id", 1);} $FAKEcall_id = "$StarTtime.$PADlead_id"; - $stmt = "INSERT INTO vicidial_log set uniqueid='$FAKEcall_id',lead_id='$lead_id',list_id='$VLlist_id',campaign_id='$campaign',call_date='$NOW_TIME',start_epoch='$StarTtime',end_epoch='$StarTtime',length_in_sec='0',status='$dispo_choice',phone_code='$VLphone_code',phone_number='$VLphone_number',user='$user',comments='MANUAL',processed='N',user_group='$user_group',term_reason='AGENT',alt_dial='$VLalt';"; + $stmt = "INSERT INTO vicidial_log set uniqueid='$FAKEcall_id',lead_id='$lead_id',list_id='$VLlist_id',campaign_id='$campaign',call_date='$NOW_TIME',start_epoch='$StarTtime',end_epoch='$StarTtime',length_in_sec='0',status='$log_dispo_choice',phone_code='$VLphone_code',phone_number='$VLphone_number',user='$user',comments='MANUAL',processed='N',user_group='$user_group',term_reason='AGENT',alt_dial='$VLalt';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00215',$user,$server_ip,$session_name,$one_mysql_log);} @@ -5704,7 +5784,7 @@ if ($ACTION == 'updateDISPO') } else { - $stmt="UPDATE vicidial_log set status='$dispo_choice' where lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by uniqueid desc limit 1;"; + $stmt="UPDATE vicidial_log set status='$log_dispo_choice' where lead_id='$lead_id' and user='$user' and call_date > \"$four_hours_ago\" order by uniqueid desc limit 1;"; if ($format=='debug') {echo "\n";} $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00145',$user,$server_ip,$session_name,$one_mysql_log);} @@ -5745,7 +5825,7 @@ if ($ACTION == 'updateDISPO') } $insert_into_dnc=0; - if ( ($use_internal_dnc=='Y') and (eregi("\|$dispo_choice\|", $DNC_string_check) ) ) + if ( ($use_internal_dnc=='Y') and (eregi("\|$log_dispo_choice\|", $DNC_string_check) ) ) { $stmt = "select phone_number from vicidial_list where lead_id='$lead_id';"; if ($DB) {echo "$stmt\n";} @@ -5758,7 +5838,7 @@ if ($ACTION == 'updateDISPO') if ($DB) {echo "$stmt\n";} $insert_into_dnc++; } - if ( ($use_campaign_dnc=='Y') and (eregi("\|$dispo_choice\|", $DNC_string_check) ) ) + if ( ($use_campaign_dnc=='Y') and (eregi("\|$log_dispo_choice\|", $DNC_string_check) ) ) { $stmt = "select phone_number from vicidial_list where lead_id='$lead_id';"; if ($DB) {echo "$stmt\n";} @@ -5810,7 +5890,7 @@ if ($ACTION == 'updateDISPO') } } } - $stmt="UPDATE vicidial_agent_log set dispo_sec='$dispo_sec',status='$dispo_choice',uniqueid='$uniqueid' $dispo_epochSQL $lead_id_commentsSQL where agent_log_id='$agent_log_id';"; + $stmt="UPDATE vicidial_agent_log set dispo_sec='$dispo_sec',status='$log_dispo_choice',uniqueid='$uniqueid' $dispo_epochSQL $lead_id_commentsSQL where agent_log_id='$agent_log_id';"; if ($format=='debug') {echo "\n";} $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00151',$user,$server_ip,$session_name,$one_mysql_log);} @@ -5859,7 +5939,7 @@ if ($ACTION == 'updateDISPO') $comments = eregi_replace("'",'',$comments); $comments = eregi_replace(';','',$comments); $comments = eregi_replace("\\\\",' ',$comments); - $stmt="INSERT INTO vicidial_callbacks (lead_id,list_id,campaign_id,status,entry_time,callback_time,user,recipient,comments,user_group) values('$lead_id','$list_id','$campaign','ACTIVE','$NOW_TIME','$CallBackDatETimE','$user','$recipient','$comments','$user_group');"; + $stmt="INSERT INTO vicidial_callbacks (lead_id,list_id,campaign_id,status,entry_time,callback_time,user,recipient,comments,user_group,lead_status) values('$lead_id','$list_id','$campaign','ACTIVE','$NOW_TIME','$CallBackDatETimE','$user','$recipient','$comments','$user_group','$CallBackLeadStatus');"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'00154',$user,$server_ip,$session_name,$one_mysql_log);} @@ -6391,7 +6471,7 @@ if ($ACTION == 'updateDISPO') if (strlen($stage) < 2) {$stage = $campaign;} - $stmt = "INSERT INTO queue_log SET partition='P01',time_id='$StarTtime',call_id='$MDnextCID',queue='$stage',agent='Agent/$user',verb='CALLSTATUS',data1='$dispo_choice',serverid='$queuemetrics_log_id';"; + $stmt = "INSERT INTO queue_log SET partition='P01',time_id='$StarTtime',call_id='$MDnextCID',queue='$stage',agent='Agent/$user',verb='CALLSTATUS',data1='$log_dispo_choice',serverid='$queuemetrics_log_id';"; if ($DB) {echo "$stmt\n";} $rslt=mysql_query($stmt, $linkB); if ($mel > 0) {mysql_error_logging($NOW_TIME,$linkB,$mel,$stmt,'00160',$user,$server_ip,$session_name,$one_mysql_log);} diff --git a/www/agc/vicidial.php b/www/agc/vicidial.php index c990fb5a..1e1accb9 100644 --- a/www/agc/vicidial.php +++ b/www/agc/vicidial.php @@ -332,10 +332,11 @@ # 110112-1254 - Added options.php option for focus/blur/enter functions # 110129-1050 - Changed to XHTML compliant formatting, issue #444 # 110208-1202 - Made scheduled callbacks notice move when on script/form tabs +# 110212-2206 - Added scheduled callback custom statuses compatibility # -$version = '2.4-309'; -$build = '110208-1202'; +$version = '2.4-310'; +$build = '110212-2206'; $mel=1; # Mysql Error Log enabled = 1 $mysql_log_count=69; $one_mysql_log=0; @@ -1224,8 +1225,10 @@ else else {$selectableSQL = "selectable='Y' and";} $VARstatuses=''; $VARstatusnames=''; + $VARCBstatuses=''; + $VARCBstatusesLIST=''; ##### grab the statuses that can be used for dispositioning by an agent - $stmt="SELECT status,status_name FROM vicidial_statuses WHERE $selectableSQL status != 'NEW' order by status limit 300;"; + $stmt="SELECT status,status_name,scheduled_callback FROM vicidial_statuses WHERE $selectableSQL status != 'NEW' order by status limit 300;"; $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01010',$VD_login,$server_ip,$session_name,$one_mysql_log);} if ($DB) {echo "$stmt\n";} @@ -1236,13 +1239,17 @@ else $row=mysql_fetch_row($rslt); $statuses[$i] =$row[0]; $status_names[$i] =$row[1]; + $CBstatuses[$i] =$row[2]; $VARstatuses = "$VARstatuses'$statuses[$i]',"; $VARstatusnames = "$VARstatusnames'$status_names[$i]',"; + $VARCBstatuses = "$VARCBstatuses'$CBstatuses[$i]',"; + if ($CBstatuses[$i] == 'Y') + {$VARCBstatusesLIST .= " $statuses[$i]";} $i++; } ##### grab the campaign-specific statuses that can be used for dispositioning by an agent - $stmt="SELECT status,status_name FROM vicidial_campaign_statuses WHERE $selectableSQL status != 'NEW' and campaign_id='$VD_campaign' order by status limit 300;"; + $stmt="SELECT status,status_name,scheduled_callback FROM vicidial_campaign_statuses WHERE $selectableSQL status != 'NEW' and campaign_id='$VD_campaign' order by status limit 300;"; $rslt=mysql_query($stmt, $link); if ($mel > 0) {mysql_error_logging($NOW_TIME,$link,$mel,$stmt,'01011',$VD_login,$server_ip,$session_name,$one_mysql_log);} if ($DB) {echo "$stmt\n";} @@ -1253,14 +1260,20 @@ else $row=mysql_fetch_row($rslt); $statuses[$i] =$row[0]; $status_names[$i] =$row[1]; + $CBstatuses[$i] =$row[2]; $VARstatuses = "$VARstatuses'$statuses[$i]',"; $VARstatusnames = "$VARstatusnames'$status_names[$i]',"; + $VARCBstatuses = "$VARCBstatuses'$CBstatuses[$i]',"; + if ($CBstatuses[$i] == 'Y') + {$VARCBstatusesLIST .= " $statuses[$i]";} $i++; $j++; } $VD_statuses_ct = ($VD_statuses_ct+$VD_statuses_camp); - $VARstatuses = substr("$VARstatuses", 0, -1); - $VARstatusnames = substr("$VARstatusnames", 0, -1); + $VARstatuses = substr("$VARstatuses", 0, -1); + $VARstatusnames = substr("$VARstatusnames", 0, -1); + $VARCBstatuses = substr("$VARCBstatuses", 0, -1); + $VARCBstatusesLIST .= " "; ##### grab the campaign-specific HotKey statuses that can be used for dispositioning by an agent $stmt="SELECT hotkey,status,status_name FROM vicidial_campaign_hotkeys WHERE selectable='Y' and status != 'NEW' and campaign_id='$VD_campaign' order by hotkey limit 9;"; @@ -2787,6 +2800,7 @@ $CCAL_OUT .= ""; var CallBackDatETimE = ''; var CallBackrecipient = ''; var CallBackCommenTs = ''; + var CallBackLeadStatus = ''; var scheduled_callbacks = ''; var dispo_check_all_pause = ''; var api_check_all_pause = ''; @@ -2809,6 +2823,8 @@ $CCAL_OUT .= ""; var VD_preset_names_ct = ''; VARstatuses = new Array(); VARstatusnames = new Array(); + VARCBstatuses = new Array(); + var VARCBstatusesLIST = ''; var VD_statuses_ct = ''; VARingroups = new Array(); var INgroupCOUNT = ''; @@ -6032,7 +6048,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection) document.getElementById("WebFormSpanTwo").innerHTML = "\"Web\n"; } - if (LeaDPreVDispO == 'CALLBK') + if (CBentry_time.length > 2) { document.getElementById("CusTInfOSpaN").innerHTML = " PREVIOUS CALLBACK "; document.getElementById("CusTInfOSpaN").style.background = CusTCB_bgcolor; @@ -6912,7 +6928,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection) document.getElementById("MainStatuSSpan").innerHTML = " Incoming: " + dial_display_number + " " + custom_call_id + " UID: " + CIDcheck + "   " + VDIC_fronter; - if (LeaDPreVDispO == 'CALLBK') + if (CBentry_time.length > 2) { document.getElementById("CusTInfOSpaN").innerHTML = " PREVIOUS CALLBACK "; document.getElementById("CusTInfOSpaN").style.background = CusTCB_bgcolor; @@ -7794,18 +7810,23 @@ function set_length(SLnumber,SLlength_goal,SLdirection) } HidEGenDerPulldown(); AgentDispoing = 1; + var CBflag = ''; var VD_statuses_ct_half = parseInt(VD_statuses_ct / 2); var dispo_HTML = "
CALL DISPOSITION
"; var loop_ct = 0; while (loop_ct < VD_statuses_ct) { + if (VARCBstatuses[loop_ct] == 'Y') + {CBflag = '*';} + else + {CBflag = '';} if (taskDSgrp == VARstatuses[loop_ct]) { - dispo_HTML = dispo_HTML + "" + VARstatuses[loop_ct] + " - " + VARstatusnames[loop_ct] + "

"; + dispo_HTML = dispo_HTML + "" + VARstatuses[loop_ct] + " - " + VARstatusnames[loop_ct] + " " + CBflag + "

"; } else { - dispo_HTML = dispo_HTML + "" + VARstatuses[loop_ct] + " - " + VARstatusnames[loop_ct] + "

"; + dispo_HTML = dispo_HTML + "" + VARstatuses[loop_ct] + " - " + VARstatusnames[loop_ct] + " " + CBflag + "

"; } if (loop_ct == VD_statuses_ct_half) {dispo_HTML = dispo_HTML + "
";} @@ -8055,8 +8076,8 @@ function set_length(SLnumber,SLlength_goal,SLdirection) { document.getElementById("CusTInfOSpaN").innerHTML = ""; document.getElementById("CusTInfOSpaN").style.background = panel_bgcolor; - - if ( (DispoChoice == 'CALLBK') && (scheduled_callbacks > 0) ) {showDiv('CallBackSelectBox');} + var regCBstatus = new RegExp(' ' + DispoChoice + ' ',"ig"); + if ( (VARCBstatusesLIST.match(regCBstatus)) && (DispoChoice.length > 0) && (scheduled_callbacks > 0) && (DispoChoice != 'CBHOLD') ) {showDiv('CallBackSelectBox');} else { var xmlhttp=false; @@ -8080,7 +8101,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection) } if (xmlhttp) { - DSupdate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&ACTION=updateDISPO&format=text&user=" + user + "&pass=" + pass + "&dispo_choice=" + DispoChoice + "&lead_id=" + document.vicidial_form.lead_id.value + "&campaign=" + campaign + "&auto_dial_level=" + auto_dial_level + "&agent_log_id=" + agent_log_id + "&CallBackDatETimE=" + CallBackDatETimE + "&list_id=" + document.vicidial_form.list_id.value + "&recipient=" + CallBackrecipient + "&use_internal_dnc=" + use_internal_dnc + "&use_campaign_dnc=" + use_campaign_dnc + "&MDnextCID=" + LasTCID + "&stage=" + group + "&vtiger_callback_id=" + vtiger_callback_id + "&phone_number=" + document.vicidial_form.phone_number.value + "&phone_code=" + document.vicidial_form.phone_code.value + "&dial_method" + dial_method + "&uniqueid=" + document.vicidial_form.uniqueid.value + "&comments=" + CallBackCommenTs + "&custom_field_names=" + custom_field_names; + DSupdate_query = "server_ip=" + server_ip + "&session_name=" + session_name + "&ACTION=updateDISPO&format=text&user=" + user + "&pass=" + pass + "&dispo_choice=" + DispoChoice + "&lead_id=" + document.vicidial_form.lead_id.value + "&campaign=" + campaign + "&auto_dial_level=" + auto_dial_level + "&agent_log_id=" + agent_log_id + "&CallBackDatETimE=" + CallBackDatETimE + "&list_id=" + document.vicidial_form.list_id.value + "&recipient=" + CallBackrecipient + "&use_internal_dnc=" + use_internal_dnc + "&use_campaign_dnc=" + use_campaign_dnc + "&MDnextCID=" + LasTCID + "&stage=" + group + "&vtiger_callback_id=" + vtiger_callback_id + "&phone_number=" + document.vicidial_form.phone_number.value + "&phone_code=" + document.vicidial_form.phone_code.value + "&dial_method" + dial_method + "&uniqueid=" + document.vicidial_form.uniqueid.value + "&CallBackLeadStatus=" + CallBackLeadStatus + "&comments=" + CallBackCommenTs + "&custom_field_names=" + custom_field_names; xmlhttp.open('POST', 'vdc_db_query.php'); xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); xmlhttp.send(DSupdate_query); @@ -8187,6 +8208,7 @@ function set_length(SLnumber,SLlength_goal,SLdirection) document.getElementById("ManualQueueNotice").innerHTML = ''; APIManualDialQueue_last=0; document.vicidial_form.FORM_LOADED.value = '0'; + CallBackLeadStatus = ''; if (manual_dial_in_progress==1) { @@ -8249,13 +8271,13 @@ function set_length(SLnumber,SLlength_goal,SLdirection) { LogouT('SHIFT'); } + if (focus_blur_enabled==1) + { + document.inert_form.inert_button.focus(); + document.inert_form.inert_button.blur(); + } } // scroll back to the top of the page - if (focus_blur_enabled==1) - { - document.inert_form.inert_button.focus(); - document.inert_form.inert_button.blur(); - } scroll(0,0); } } @@ -10358,6 +10380,7 @@ else CallBackTimEHouR = document.vicidial_form.CBT_hour.value; CallBackTimEMinuteS = document.vicidial_form.CBT_minute.value; CallBackTimEAmpM = document.vicidial_form.CBT_ampm.value; + CallBackLeadStatus = document.vicidial_form.DispoSelection.value; document.vicidial_form.CBT_hour.value = '01'; document.vicidial_form.CBT_minute.value = '00'; @@ -10397,7 +10420,7 @@ else document.vicidial_form.CallBackCommenTsField.value = ''; // alert(CallBackDatETimE + "|" + CallBackCommenTs); - + document.vicidial_form.DispoSelection.value = 'CBHOLD'; hideDiv('CallBackSelectBox'); DispoSelect_submit(); diff --git a/www/vicidial/admin.php b/www/vicidial/admin.php index 5d9948c5..c1e4c828 100644 --- a/www/vicidial/admin.php +++ b/www/vicidial/admin.php @@ -2632,12 +2632,13 @@ else # 110103-1135 - Added queuemetrics_dispo_pause and lead_order_randomize features # 110111-1305 - Added sort by list name for list listings in list section and campaign screens # 110124-1134 - Small query fix for large queue_log tables +# 110212-2048 - Added Scheduled Callback as status flag to allow for custom scheduled callback statuses # # make sure you have added a user to the vicidial_users MySQL table with at least user_level 8 to access this page the first time -$admin_version = '2.4-297'; -$build = '110124-1134'; +$admin_version = '2.4-298'; +$build = '110212-2048'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -7329,7 +7330,7 @@ if ($ADD==99999) VICIDIAL_STATUSES TABLE


- Through the use of system statuses, you can have statuses that exist for campaign and in-group. The Status must be 1-6 characters in length, the description must be 2-30 characters in length and Selectable defines whether it shows up in VICIDIAL as an agent disposition. The human_answered field is used when calculating the drop percentage, or abandon rate. Setting human_answered to Y will use this status when counting the human-answered calls. The Category option allows you to group several statuses into a catogy that can be used for statistical analysis. There are also 5 additional settings that will define the kind of status: sale, dnc, customer contact, not interested, unworkable. + Through the use of system statuses, you can have statuses that exist for campaign and in-group. The Status must be 1-6 characters in length, the description must be 2-30 characters in length and Selectable defines whether it shows up in VICIDIAL as an agent disposition. The human_answered field is used when calculating the drop percentage, or abandon rate. Setting human_answered to Y will use this status when counting the human-answered calls. The Category option allows you to group several statuses into a catogy that can be used for statistical analysis. There are also 5 additional settings that will define the kind of status: sale, dnc, customer contact, not interested, unworkable, scheduled callback. @@ -10269,7 +10270,7 @@ if ($ADD==20) $stmtA="INSERT INTO vicidial_campaign_stats (campaign_id) values('$campaign_id');"; $rslt=mysql_query($stmtA, $link); - $stmtA="INSERT INTO vicidial_campaign_statuses (status,status_name,selectable,campaign_id,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable) SELECT status,status_name,selectable,\"$campaign_id\",human_answered,category,sale,dnc,customer_contact,not_interested,unworkable from vicidial_campaign_statuses where campaign_id='$source_campaign_id';"; + $stmtA="INSERT INTO vicidial_campaign_statuses (status,status_name,selectable,campaign_id,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback) SELECT status,status_name,selectable,\"$campaign_id\",human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback from vicidial_campaign_statuses where campaign_id='$source_campaign_id';"; $rslt=mysql_query($stmtA, $link); $stmtA="INSERT INTO vicidial_campaign_hotkeys (status,hotkey,status_name,selectable,campaign_id) SELECT status,hotkey,status_name,selectable,\"$campaign_id\" from vicidial_campaign_hotkeys where campaign_id='$source_campaign_id';"; @@ -10331,7 +10332,7 @@ if ($ADD==22) { echo "
CAMPAIGN STATUS ADDED: $campaign_id - $status_id\n"; - $stmt="INSERT INTO vicidial_campaign_statuses (status,status_name,selectable,campaign_id,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable) values('$status_id','$status_name','$selectable','$campaign_id','$human_answered','$category','$sale','$dnc','$customer_contact','$not_interested','$unworkable');"; + $stmt="INSERT INTO vicidial_campaign_statuses (status,status_name,selectable,campaign_id,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback) values('$status_id','$status_name','$selectable','$campaign_id','$human_answered','$category','$sale','$dnc','$customer_contact','$not_interested','$unworkable','$scheduled_callbacks');"; $rslt=mysql_query($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -12138,7 +12139,7 @@ if ($ADD==221111111111111) { echo "
SYSTEM STATUS ADDED: $status_name - $status_id\n"; - $stmt="INSERT INTO vicidial_statuses (status,status_name,selectable,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable) values('$status_id','$status_name','$selectable','$human_answered','$category','$sale','$dnc','$customer_contact','$not_interested','$unworkable');"; + $stmt="INSERT INTO vicidial_statuses (status,status_name,selectable,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback) values('$status_id','$status_name','$selectable','$human_answered','$category','$sale','$dnc','$customer_contact','$not_interested','$unworkable','$scheduled_callbacks');"; $rslt=mysql_query($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -13194,7 +13195,7 @@ if ($ADD==42) { echo "
CUSTOM CAMPAIGN STATUS MODIFIED: $campaign_id - $status\n"; - $stmt="UPDATE vicidial_campaign_statuses SET status_name='$status_name',selectable='$selectable',human_answered='$human_answered',category='$category',sale='$sale',dnc='$dnc',customer_contact='$customer_contact',not_interested='$not_interested',unworkable='$unworkable' where campaign_id='$campaign_id' and status='$status';"; + $stmt="UPDATE vicidial_campaign_statuses SET status_name='$status_name',selectable='$selectable',human_answered='$human_answered',category='$category',sale='$sale',dnc='$dnc',customer_contact='$customer_contact',not_interested='$not_interested',unworkable='$unworkable',scheduled_callback='$scheduled_callbacks' where campaign_id='$campaign_id' and status='$status';"; $rslt=mysql_query($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -15465,7 +15466,7 @@ if ($ADD==421111111111111) { echo "
SYSTEM STATUS MODIFIED: $status\n"; - $stmt="UPDATE vicidial_statuses SET status_name='$status_name',selectable='$selectable',human_answered='$human_answered',category='$category',sale='$sale',dnc='$dnc',customer_contact='$customer_contact',not_interested='$not_interested',unworkable='$unworkable' where status='$status';"; + $stmt="UPDATE vicidial_statuses SET status_name='$status_name',selectable='$selectable',human_answered='$human_answered',category='$category',sale='$sale',dnc='$dnc',customer_contact='$customer_contact',not_interested='$not_interested',unworkable='$unworkable',scheduled_callback='$scheduled_callbacks' where status='$status';"; $rslt=mysql_query($stmt, $link); ### LOG INSERTION Admin Log Table ### @@ -18445,7 +18446,7 @@ if ($ADD==31) $QCL_to_print = (count($QClists) -0); ##### get status listings for dynamic pulldown - $stmt="SELECT status,status_name,selectable,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable from vicidial_statuses order by status"; + $stmt="SELECT status,status_name,selectable,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback from vicidial_statuses order by status"; $rslt=mysql_query($stmt, $link); $statuses_to_print = mysql_num_rows($rslt); $statuses_list=''; @@ -18489,7 +18490,7 @@ if ($ADD==31) $o++; } - $stmt="SELECT status,status_name,selectable,campaign_id,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable from vicidial_campaign_statuses where campaign_id='$campaign_id' order by status"; + $stmt="SELECT status,status_name,selectable,campaign_id,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback from vicidial_campaign_statuses where campaign_id='$campaign_id' order by status"; $rslt=mysql_query($stmt, $link); $Cstatuses_to_print = mysql_num_rows($rslt); @@ -19563,17 +19564,53 @@ if ($ADD==31) echo "
\n"; echo "
CUSTOM STATUSES WITHIN THIS CAMPAIGN:   $NWB#vicidial_campaign_statuses$NWE
\n"; - echo "\n"; - echo "\n"; - $stmt="SELECT status,status_name,selectable,campaign_id,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable from vicidial_campaign_statuses where campaign_id='$campaign_id' order by status"; + + + + + + + + + + echo "
STATUSDESCRIPTIONSELECTABLEHUMAN ANSWERCATEGORYMODIFY-DELETE
\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + ##### get status category listings for dynamic pulldown + $stmt="SELECT vsc_id,vsc_name from vicidial_status_categories order by vsc_id desc"; + $rslt=mysql_query($stmt, $link); + $cats_to_print = mysql_num_rows($rslt); + $cats_list=""; + + $o=0; + while ($cats_to_print > $o) + { + $rowx=mysql_fetch_row($rslt); + $cats_list .= "\n"; + $catsname_list["$rowx[0]"] = substr($rowx[1],0,20); + $o++; + } + + $stmt="SELECT status,status_name,selectable,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback from vicidial_campaign_statuses where campaign_id='$campaign_id' order by status;"; $rslt=mysql_query($stmt, $link); $statuses_to_print = mysql_num_rows($rslt); $o=0; while ($statuses_to_print > $o) { $rowx=mysql_fetch_row($rslt); - $AScategory = $rowx[5]; + $AScategory = $rowx[4]; $o++; if (eregi("1$|3$|5$|7$|9$", $o)) @@ -19588,30 +19625,37 @@ if ($ADD==31) echo "\n"; echo "$rowx[0]\n"; echo "\n"; - echo "\n"; - echo "\n"; echo "\n"; - echo "\n"; } echo "
S
T
A
T
U
S
DESCRIPTIONCATEGORY
A
G
E
N
T
 
S
E
L
E
C
T
A
B
L
E
H
U
M
A
N
 
A
N
S
W
E
R
S
A
L
E
D
N
C
C
U
S
T
O
M
E
R
 
C
O
N
T
A
C
T
N
O
T
 
I
N
T
E
R
E
S
T
E
D
U
N
W
O
R
K
A
B
L
E
S
C
H
E
D
U
L
E
D
 
C
A
L
L
B
A
C
K
MODIFY/DELETE
\n"; echo "\n"; - echo "         \n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "         \n"; echo "   \n"; - echo "DELETE\n"; - echo "
\n"; - - echo "  Sale:   \n"; - echo "  DNC:   \n"; - echo "  Customer Contact:   \n"; - echo "  Not Interested:   \n"; - echo "  Unworkable:   \n"; - + + if (preg_match("/^B$|^NA$|^DNC$|^NA$|^DROP$|^INCALL$|^QUEUE$|^NEW$/i",$rowx[0])) + { + echo "DELETE\n"; + } + else + { + echo "DELETE\n"; + } echo "
\n"; + echo "
ADD NEW CUSTOM CAMPAIGN STATUS
\n"; echo "\n"; echo "\n"; @@ -19624,6 +19668,7 @@ if ($ADD==31) echo "Customer Contact:  
\n"; echo "Not Interested:   \n"; echo "Unworkable:   \n"; + echo "Callback:   \n"; echo "Category: \n"; echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; ##### get status category listings for dynamic pulldown $stmt="SELECT vsc_id,vsc_name from vicidial_status_categories order by vsc_id desc"; @@ -26234,8 +26290,7 @@ if ($ADD==321111111111111) $o++; } - - $stmt="SELECT status,status_name,selectable,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable from vicidial_statuses order by status;"; + $stmt="SELECT status,status_name,selectable,human_answered,category,sale,dnc,customer_contact,not_interested,unworkable,scheduled_callback from vicidial_statuses order by status;"; $rslt=mysql_query($stmt, $link); $statuses_to_print = mysql_num_rows($rslt); $o=0; @@ -26256,15 +26311,21 @@ if ($ADD==321111111111111) echo "\n"; echo "$rowx[0]\n"; echo "\n"; - echo "\n"; - echo "\n"; echo "\n"; - echo "\n"; } @@ -26300,6 +26352,7 @@ if ($ADD==321111111111111) echo "Customer Contact:  
\n"; echo "Not Interested:   \n"; echo "Unworkable:   \n"; + echo "Callback:   \n"; echo "Category: \n"; echo "
\n"; echo "
STATUSDESCRIPTIONSELECT-
ABLE
HUMAN
ANSWER
CATEGORYMODIFY/DELETE
S
T
A
T
U
S
DESCRIPTIONCATEGORY
A
G
E
N
T
 
S
E
L
E
C
T
A
B
L
E
H
U
M
A
N
 
A
N
S
W
E
R
S
A
L
E
D
N
C
C
U
S
T
O
M
E
R
 
C
O
N
T
A
C
T
N
O
T
 
I
N
T
E
R
E
S
T
E
D
U
N
W
O
R
K
A
B
L
E
S
C
H
E
D
U
L
E
D
 
C
A
L
L
B
A
C
K
MODIFY/DELETE
\n"; echo "\n"; - echo "         \n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "         \n"; echo "   \n"; if (preg_match("/^B$|^NA$|^DNC$|^NA$|^DROP$|^INCALL$|^QUEUE$|^NEW$/i",$rowx[0])) @@ -26275,15 +26336,6 @@ if ($ADD==321111111111111) { echo "DELETE\n"; } - - echo "
\n"; - - echo "  Sale:   \n"; - echo "  DNC:   \n"; - echo "  Customer Contact:   \n"; - echo "  Not Interested:   \n"; - echo "  Unworkable:   \n"; - echo "
$label_comments :
Disposition: + - + +
\n"; echo "Callback Details:
\n"; - if ( ($dispo == 'CALLBK') or ($dispo == 'CBHOLD') ) + if ( ($dispo == 'CALLBK') or ($dispo == 'CBHOLD') or ($scheduled_callback == 'Y') ) { ### find any vicidial_callback records for this lead - $stmt="select callback_id,lead_id,list_id,campaign_id,status,entry_time,callback_time,modify_date,user,recipient,comments,user_group from vicidial_callbacks where lead_id='" . mysql_real_escape_string($lead_id) . "' and status IN('ACTIVE','LIVE') order by callback_id desc LIMIT 1;"; + $stmt="select callback_id,lead_id,list_id,campaign_id,status,entry_time,callback_time,modify_date,user,recipient,comments,user_group,lead_status from vicidial_callbacks where lead_id='" . mysql_real_escape_string($lead_id) . "' and status IN('ACTIVE','LIVE') order by callback_id desc LIMIT 1;"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_query($stmt, $link); $CB_to_print = mysql_num_rows($rslt); @@ -772,7 +813,9 @@ else echo "New Callback Owner UserID: \n"; echo "
\n"; } - + $callback_id = $rowx[0]; + $CBcomments = $rowx[10]; + $lead_status = $rowx[12]; $appointment_datetimeARRAY = explode(" ",$rowx[6]); $appointment_date = $appointment_datetimeARRAY[0]; $appointment_timeARRAY = explode(":",$appointment_datetimeARRAY[1]); @@ -780,6 +823,43 @@ else $appointment_min = $appointment_timeARRAY[1]; + + $stmt="SELECT status,status_name from vicidial_statuses where scheduled_callback='Y' and selectable='Y' and status NOT IN('CBHOLD') order by status"; + $rslt=mysql_query($stmt, $link); + $statuses_to_print = mysql_num_rows($rslt); + $statuses_list=''; + + $o=0; + $DS=0; + while ($statuses_to_print > $o) + { + $rowx=mysql_fetch_row($rslt); + if ( (strlen($lead_status) == strlen($rowx[0])) and (eregi($lead_status,$rowx[0])) ) + {$statuses_list .= "\n"; $DS++;} + else + {$statuses_list .= "\n";} + $o++; + } + + $stmt="SELECT status,status_name from vicidial_campaign_statuses where scheduled_callback='Y' and selectable='Y' and status NOT IN('CBHOLD') and campaign_id='$list_campaign' order by status"; + $rslt=mysql_query($stmt, $link); + $CAMPstatuses_to_print = mysql_num_rows($rslt); + + $o=0; + $CBhold_set=0; + while ($CAMPstatuses_to_print > $o) + { + $rowx=mysql_fetch_row($rslt); + if ( (strlen($lead_status) == strlen($rowx[0])) and (eregi($lead_status,$rowx[0])) ) + {$statuses_list .= "\n"; $DS++;} + else + {$statuses_list .= "\n";} + $o++; + } + + if ($DS < 1) + {$statuses_list .= "\n";} + ?>
@@ -790,7 +870,7 @@ else > - +
CallBack Date/Time: @@ -854,9 +934,17 @@ else
- Comments: + Callback Disposition: +
+ Comments: + +