[AsteriskBrasil] RES: Tarifador corporativo

Fernando Beraldo fernando.beraldo em gmail.com
Quinta Agosto 12 10:17:06 BRT 2010


Cara, eu fiz algumas queries pro Mysql para um cliente, que bilheta as
chamadas no fator 30/6, coisa bem básica. Pois não manjo muito (rs.rs). Só
que não tem nada via web, no fim do mês rodo as queries e exporto pro Excel.
É mais um quebra galho mesmo.

 

São 4 queries: Fixo-Local, Cel-Cel, Fixo-DDD, Cel-DDD. As DDI, como tem a
questão dos códigos e valores para cada pais eu teria que ter uma outra
tabela para fazer a consulta, e checar pelo número, ai complicou um  pouco.
Mas esse cliente quase não tem ligações DDI então nem faz diferença.

Os valores do minutos você pode alterar no “SELECT CASE WHEN billsec...”
onde o primeiro valor é metade do minuto, e outros dois são décimos de valor
do minutos. Conforme na chamada local. O minuto custa R$ 0,10, então no
primeiro “ROUND” coloco “0.05” e nos outros dois coloco “0.010” que é igual
à “0,10/10=0,010). Lembrando que não usa virgula no valares e sim ponto.

 

Espero que seja útil.

 

Segue abaixo.

 

-- LISTA TODAS AS LIGAÇOES LOCAIS, AGRUPANDO POR DATA, e ORIGEM

SELECT data, origem, destino, SEC_TO_TIME(duracao) as 'duracao-sistema',

CASE WHEN duracao <= 30 THEN '00:00:30' WHEN duracao > 30 THEN
SEC_TO_TIME(duracao) END AS 'duracao-cliente', valor

FROM

(SELECT calldate AS data, src AS origem, dst AS destino,
SEC_TO_TIME(billsec) AS duracao,

(SELECT CASE WHEN billsec >= 1 AND billsec <= 30 THEN ROUND(0.05,2) WHEN
billsec > 30 AND (billsec%6 = 0) THEN ROUND((billsec/6)*0.010,2) ELSE
ROUND(FLOOR((billsec/6)+1)*0.010,2) END) AS valor

FROM cdr

WHERE DATE_FORMAT(calldate, '%Y-%m-%d')

BETWEEN '2010-07-01'

AND '2010-07-31'

AND disposition = 'ANSWERED'

AND channel LIKE 'S%'

AND dstchannel LIKE 'D%'

AND dcontext = 'from-internal'

AND billsec >= 3

AND (dst LIKE '2_______'

OR dst LIKE '3_______'

OR dst LIKE '4_______'

OR dst LIKE '5_______')

ORDER BY origem, data) as g;

 

-- LISTA TODAS AS LIGAÇOES CEL-LOCAL, AGRUPANDO POR DATA, e ORIGEM

SELECT data, origem, destino, SEC_TO_TIME(duracao) as 'duracao-sistema',

CASE WHEN duracao <= 30 THEN '00:00:30' WHEN duracao > 30 THEN
SEC_TO_TIME(duracao) END AS 'duracao-cliente', valor

FROM

(SELECT calldate AS data, src AS origem, dst AS destino,
SEC_TO_TIME(billsec) AS duracao,

(SELECT CASE WHEN billsec >= 1 AND billsec <= 30 THEN ROUND(0.49,2) WHEN
billsec > 30 AND (billsec%6 = 0) THEN ROUND((billsec/6)*0.098,2) ELSE
ROUND(FLOOR((billsec/6)+1)*0.098,2) END) AS valor

FROM cdr

WHERE DATE_FORMAT(calldate, '%Y-%m-%d')

BETWEEN '2010-07-01'

AND '2010-07-31'

AND disposition = 'ANSWERED'

AND channel LIKE 'S%'

AND dstchannel LIKE 'D%'

AND dcontext = 'from-internal'

AND billsec >= 3

AND (dst LIKE '6_______'

OR dst LIKE '7_______'

OR dst LIKE '8_______'

OR dst LIKE '9_______')

ORDER BY origem, data) as g;

 

-- LISTA TODAS AS LIGAÇOES DDD-LOCAL, AGRUPANDO POR DATA, e ORIGEM

SELECT data, origem, destino, SEC_TO_TIME(duracao) as 'duracao-sistema',

CASE WHEN duracao <= 30 THEN '00:00:30' WHEN duracao > 30 THEN
SEC_TO_TIME(duracao) END AS 'duracao-cliente', valor

FROM

(SELECT calldate AS data, src AS origem, dst AS destino,
SEC_TO_TIME(billsec) AS duracao,

(SELECT CASE WHEN billsec >= 1 AND billsec <= 30 THEN ROUND(0.22,2) WHEN
billsec > 30 AND (billsec%6 = 0) THEN ROUND((billsec/6)*0.044,2) ELSE
ROUND(FLOOR((billsec/6)+1)*0.044,2) END) AS valor

FROM cdr

WHERE DATE_FORMAT(calldate, '%Y-%m-%d')

BETWEEN '2010-07-01'

AND '2010-07-31'

AND disposition = 'ANSWERED'

AND channel LIKE 'S%'

AND dstchannel LIKE 'D%'

AND dcontext = 'from-internal'

AND billsec >= 3

AND (dst LIKE '0____2_______'

OR dst LIKE '0____3_______'

OR dst LIKE '0____4_______'

OR dst LIKE '0____5_______')

ORDER BY origem, data) as g;

 

-- LISTA TODAS AS LIGAÇOES DDD-CEL, AGRUPANDO POR DATA, e ORIGEM

SELECT data, origem, destino, SEC_TO_TIME(duracao) as 'duracao-sistema',

CASE WHEN duracao <= 30 THEN '00:00:30' WHEN duracao > 30 THEN
SEC_TO_TIME(duracao) END AS 'duracao-cliente', valor

FROM

(SELECT calldate AS data, src AS origem, dst AS destino,
SEC_TO_TIME(billsec) AS duracao,

(SELECT CASE WHEN billsec >= 1 AND billsec <= 30 THEN ROUND(0.74,2) WHEN
billsec > 30 AND (billsec%6 = 0) THEN ROUND((billsec/6)*0.148,2) ELSE
ROUND(FLOOR((billsec/6)+1)*0.148,2) END) AS valor

FROM cdr

WHERE DATE_FORMAT(calldate, '%Y-%m-%d')

BETWEEN '2010-07-01'

AND '2010-07-31'

AND disposition = 'ANSWERED'

AND channel LIKE 'S%'

AND dstchannel LIKE 'D%'

AND dcontext = 'from-internal'

AND billsec >= 3

AND (dst LIKE '0____6_______'

OR dst LIKE '0____7_______'

OR dst LIKE '0____8_______'

OR dst LIKE '0____9_______')

ORDER BY origem, data) as g;

 

[]’s

Beraldo

 

 

De: asteriskbrasil-bounces em listas.asteriskbrasil.org
[mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de Fabiano
Carlos Heringer
Enviada em: quarta-feira, 11 de agosto de 2010 19:52
Para: asteriskbrasil em listas.asteriskbrasil.org
Assunto: [AsteriskBrasil] Tarifador corporativo

 

Pessoal, estou precisando implantar na minha empresa um bilhetador para
monitorar o que cada uma está gastando (os ramais aqui sao liberados para
ligações).

Precisaria de algo simples, somente para controle interno das ligacoes (em
reais).

O A2Billing é excelente, mas complexo demais, existe algum outro front-end
que possa me auxiliar nisso?

Obrigado

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20100812/0a0a3157/attachment-0001.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil