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-boun...@listas.asteriskbrasil.org
[mailto:asteriskbrasil-boun...@listas.asteriskbrasil.org] Em nome de Fabiano
Carlos Heringer
Enviada em: quarta-feira, 11 de agosto de 2010 19:52
Para: asteriskbrasil@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

_______________________________________________
KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk. 
- Hardware com alta disponibilidade de recursos e qualidade KHOMP
- Suporte técnico local qualificado e gratuito 
Conheça a linha completa de produtos KHOMP em www.khomp.com.br
_______________________________________________
Temos tudo para seu projeto VoIP com Asterisk!
Descontos especiais para assinantes da AsteriskBrasil.org.
Registre-se e receba um cupom exclusivo de desconto!
Acesse agora www.voipmania.com.br
______________________________________________
Lista de discussões AsteriskBrasil.org
AsteriskBrasil@listas.asteriskbrasil.org
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil

Responder a