sql=switch_mprintf("update agents set state = 'Waiting', uuid = '' where system = 'single_box';"
"update tiers set state = 'Ready' where agent IN (select name from agents where system = 'single_box');"
"update members set state = '%q', session_uuid = '' where system = '%q';"
"update agents set external_calls_count = 0 where system = 'single_box';"
"update agents set status_before_external_calls = '' where system = 'single_box';"
"update agents set status = '%q' where status = '%q' and system = 'single_box'",/* This is not perfect... but better than having a call stuck on external call after a crash */
sql=switch_mprintf("SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position as tiers_position, tiers.level as tiers_level, agents.type, agents.uuid, external_calls_count, agents.last_offered_call as agents_last_offered_call, 1 as dyn_order FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent)"
" WHERE tiers.queue = '%q'"
" AND (agents.status = '%q' OR agents.status = '%q' OR agents.status = '%q' OR agents.status = '%q')"
" AND (agents.status = '%q' OR agents.status = '%q' OR agents.status = '%q')"
" AND tiers.position > (SELECT tiers.position FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = '%q' AND agents.last_offered_call > 0 ORDER BY agents.last_offered_call DESC LIMIT 1)"
" AND tiers.level = (SELECT tiers.level FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = '%q' AND agents.last_offered_call > 0 ORDER BY agents.last_offered_call DESC LIMIT 1)"
" UNION "
"SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position as tiers_position, tiers.level as tiers_level, agents.type, agents.uuid, external_calls_count, agents.last_offered_call as agents_last_offered_call, 2 as dyn_order FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent)"
" WHERE tiers.queue = '%q'"
" AND (agents.status = '%q' OR agents.status = '%q' OR agents.status = '%q' OR agents.status = '%q')"
" AND (agents.status = '%q' OR agents.status = '%q' OR agents.status = '%q')"
" ORDER BY dyn_order asc, tiers_level, tiers_position, agents_last_offered_call",
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),SWITCH_LOG_DEBUG,"Called cc_hook_hanguphook channel %s with state %s",switch_channel_get_name(channel),switch_channel_state_name(state));
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),SWITCH_LOG_DEBUG,"Tracked call for agent %s ended, decreasing external_calls_count",agent_name);
sql=switch_mprintf("UPDATE agents SET external_calls_count = external_calls_count - 1 WHERE name = '%q'",agent_name);
cc_execute_sql(profile,NULL,sql,NULL);
switch_safe_free(sql);
sql=switch_mprintf("UPDATE agents SET status = status_before_external_calls, status_before_external_calls = '' WHERE name = '%q' AND external_calls_count = 0 AND status = '%q'",agent_name,cc_agent_status2str(CC_AGENT_STATUS_ON_EXTERNAL_CALL));
sql=switch_mprintf("UPDATE agents SET status_before_external_calls = status, status = '%q' WHERE name = '%q' AND external_calls_count > 0 AND status != '%q'",cc_agent_status2str(CC_AGENT_STATUS_ON_EXTERNAL_CALL),agent_name,cc_agent_status2str(CC_AGENT_STATUS_ON_EXTERNAL_CALL));
sql=switch_mprintf("UPDATE agents SET external_calls_count = external_calls_count + 1 WHERE name = '%q'",agent_name);
SWITCH_ADD_APP(app_interface,"callcenter_track","CallCenter Track Call","Track external mod_callcenter calls to avoid place new calls",callcenter_track,CC_USAGE,SAF_NONE);
SWITCH_ADD_API(api_interface,"callcenter_config","Config of callcenter",cc_config_api_function,CC_CONFIG_API_SYNTAX);