Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 29.47 KB | None | 0 0
  1. DROP PROCEDURE IF EXISTS `proc_billing`;
  2. delimiter ;;
  3. CREATE PROCEDURE `proc_billing`(IN days INT)
  4. BEGIN
  5.   DECLARE cursor_done INT DEFAULT 0;
  6.   DECLARE bye_record INT DEFAULT 0;
  7.   DECLARE v_acc_id BIGINT unsigned DEFAULT 0;
  8.   DECLARE call_time INT DEFAULT 0;
  9.   DECLARE duration_block INT DEFAULT 0;
  10.   DECLARE provider_duration_block INT DEFAULT 0;
  11.   DECLARE rateplan_id INT;
  12.   DECLARE rateplan_name VARCHAR(64);
  13.   DECLARE rateplan_rateid INT;
  14.   DECLARE rateplan_tx_conn INT DEFAULT 0;
  15.   DECLARE rateplan_cadency INT DEFAULT 0;
  16.   DECLARE rateplan_markup INT DEFAULT 0;
  17.   DECLARE rateplan_prepaid INT DEFAULT 0;
  18.   DECLARE rateplan_tx_delay INT DEFAULT 0;
  19.   DECLARE rateplan_tx_discard INT DEFAULT 0;
  20.   DECLARE rateplan_strategy VARCHAR(1) DEFAULT 'T';
  21.   DECLARE rateplan_rounding VARCHAR(1) DEFAULT 'T';
  22.   DECLARE rate_prefix VARCHAR(20) DEFAULT NULL;
  23.   DECLARE rate_name VARCHAR(64) DEFAULT NULL;
  24.   DECLARE rate_type VARCHAR(32) DEFAULT NULL;
  25.   DECLARE rate_value DOUBLE DEFAULT 0;
  26.   DECLARE rate_tx_conn INT DEFAULT NULL;
  27.   DECLARE rate_cadency INT DEFAULT NULL;
  28.   DECLARE rate_tx_delay INT DEFAULT NULL;
  29.   DECLARE rate_tx_discard INT DEFAULT NULL;
  30.   DECLARE call_price DOUBLE DEFAULT 0;
  31.   DECLARE providerid INT DEFAULT 0;
  32.   DECLARE provider_name VARCHAR(64);
  33.   DECLARE provider_start_delay INT DEFAULT 0;
  34.   DECLARE provider_tx_discard INT DEFAULT 0;
  35.   DECLARE cost_tx_connection INT DEFAULT 0;
  36.   DECLARE cost_cadency INT DEFAULT 0;
  37.   DECLARE cost_rate DOUBLE DEFAULT 0;
  38.   DECLARE cost_price DOUBLE DEFAULT 0;
  39.   DECLARE v_src_uri,v_dst_uri,v_callid,v_from_tag,v_to_tag,v_caller_id,
  40.           v_callee_id,v_caller_domain,v_callee_domain,v_rpid,
  41.           v_service,v_src_ip,v_user_agent,v_profile,v_accountcode VARCHAR(128);
  42.   DECLARE v_time, v_bye_time, v_bye_inv_time DATETIME;
  43.   DECLARE v_time_microseconds, v_bye_time_microseconds, diff_microseconds INT DEFAULT 0;
  44.   DECLARE v_domain_acc VARCHAR(128);
  45.   DECLARE v_username_acc VARCHAR(64);
  46.   DECLARE v_reverse_billing BOOLEAN DEFAULT false;
  47.   DECLARE v_gwid INT DEFAULT 0;
  48.   DECLARE gw_address VARCHAR(255);
  49.   DECLARE gw_name VARCHAR(64);
  50.   DECLARE gw_rateid INT;
  51.   DECLARE v_rec INT(1) DEFAULT 0;
  52.   DECLARE v_q850_code INT(11);
  53.   DECLARE v_q850_reason VARCHAR(60);
  54.   DECLARE v_cnla VARCHAR(5);
  55.   DECLARE v_cnlb VARCHAR(5);
  56.   DECLARE v_mesma_area TINYINT(1) DEFAULT 0;
  57.   DECLARE v_tipo VARCHAR(3);
  58.   DECLARE v_rn1 VARCHAR(5);
  59.   DECLARE v_rule_id INT DEFAULT 0;
  60.   DECLARE v_channels INT unsigned DEFAULT 0;
  61.   DECLARE reseller_id INT DEFAULT 0;
  62.   DECLARE reseller_name VARCHAR(64);
  63.   DECLARE reseller_billing_type INT DEFAULT 0;
  64.   DECLARE reseller_markup DOUBLE DEFAULT 0;
  65.   DECLARE reseller_rateplan_id INT DEFAULT 0;
  66.   DECLARE reseller_rateplan_name VARCHAR(64);
  67.   DECLARE reseller_rateplan_rateid INT DEFAULT 0;
  68.   DECLARE reseller_matched_prefix VARCHAR(20);
  69.   DECLARE reseller_matched_prefix_name VARCHAR(32);
  70.   DECLARE reseller_rate DOUBLE DEFAULT 0;
  71.   DECLARE reseller_price DOUBLE DEFAULT 0;
  72.   DECLARE timeout_profile_keepalive INT DEFAULT NULL;
  73.   DECLARE daily_quota BOOLEAN DEFAULT false;
  74.   DECLARE daily_quota_type CHAR(1) DEFAULT NULL;
  75.   DECLARE monthly_quota BOOLEAN DEFAULT false;
  76.   DECLARE monthly_quota_type CHAR(1) DEFAULT NULL;
  77.  
  78. -- Funcao responsavel pelo fechamento dos bilhetes do sistema.
  79. -- Author: Ricardo Limonta
  80. -- Ultima atualizacao: 13/06/2013 10:00
  81. -- Lista de Parametros:
  82. -- N/A
  83.  
  84.   -- recupera os blilhetes que ainda nao foram fechados
  85.   DECLARE inv_cursor CURSOR FOR SELECT id,src_uri,dst_uri,time,callid,from_tag,to_tag,caller_id,callee_id,caller_domain,
  86.                                        callee_domain,rpid,service,src_ip,user_agent,profile,accountcode,gwid,
  87.                                        rec,q850_code,q850_reason,cnla,cnlb,mesma_area,tipo,microseconds,
  88.                                        rn1,rule_id,channels
  89.                                 FROM sippulse_reports.acc_report
  90.                                 WHERE method='INVITE'
  91.                                 AND cdr_id = '0'
  92.                                 AND sip_code = '200'
  93.                                 AND service in ('pstn', '0800', 'did', 'net', 'media', 'local', 'acobrar')
  94.                                 AND accountcode <> 'system'
  95.                                 AND time > DATE_ADD(CURRENT_DATE, INTERVAL - days DAY);
  96.  
  97.   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET cursor_done = 1;
  98.  
  99.   -- se ocorrer algum erro mostra quais foram juntamente com o id do registro que estava sendo processado
  100.   DECLARE EXIT HANDLER FOR SQLEXCEPTION
  101.   BEGIN
  102.     SHOW ERRORS;
  103.     SELECT v_acc_id as MSG;
  104.   END;
  105.  
  106.   -- abre o cursor da consulta
  107.   OPEN inv_cursor;
  108.   REPEAT
  109.   FETCH inv_cursor INTO v_acc_id, v_src_uri, v_dst_uri, v_time, v_callid, v_from_tag, v_to_tag, v_caller_id,
  110.                         v_callee_id, v_caller_domain, v_callee_domain, v_rpid, v_service, v_src_ip,
  111.                         v_user_agent, v_profile, v_accountcode, v_gwid, v_rec, v_q850_code, v_q850_reason,
  112.                         v_cnla, v_cnlb, v_mesma_area, v_tipo, v_time_microseconds, v_rn1, v_rule_id, v_channels;
  113.  
  114.     IF NOT cursor_done THEN
  115.  
  116.       -- reseta a variavel de controle de busca dos byes
  117.       SET bye_record = 0;
  118.  
  119.       -- para cada registro encontrado, procura pelo registro de fechamento da chamada
  120.       SELECT 1, time, invtime, microseconds INTO bye_record, v_bye_time, v_bye_inv_time, v_bye_time_microseconds
  121.       FROM sippulse_reports.acc_report
  122.       WHERE callid = v_callid
  123.       AND ((from_tag=v_from_tag AND to_tag=v_to_tag) OR (from_tag=v_to_tag AND to_tag=v_from_tag))
  124.       AND method = 'BYE'
  125.       ORDER BY id LIMIT 1;
  126.  
  127.       IF bye_record = 1 THEN
  128.         SET call_time = 0;
  129.         SET diff_microseconds = 0;
  130.         SET duration_block = 0;
  131.         SET provider_duration_block = 0;
  132.         SET rateplan_id = null;
  133.         SET rateplan_name = null;
  134.         SET rateplan_rateid = null;
  135.         SET rateplan_cadency = 0;
  136.         SET rateplan_tx_conn = 0;
  137.         SET rateplan_markup = 0;
  138.         SET rateplan_prepaid = null;
  139.         SET rateplan_tx_delay = 0;
  140.         SET rateplan_tx_discard = 0;
  141.         SET rateplan_strategy = 'T';
  142.         SET rateplan_rounding = 'T';
  143.         SET rate_prefix = NULL;
  144.         SET rate_name = NULL;
  145.         SET rate_type = NULL;
  146.         SET rate_value = 0;
  147.         SET rate_tx_conn = NULL;
  148.         SET rate_cadency = NULL;
  149.         SET rate_tx_delay = NULL;
  150.         SET rate_tx_discard = NULL;
  151.         SET call_price = 0;
  152.         SET providerid = 0;
  153.         SET provider_name = null;
  154.         SET provider_start_delay = 0;
  155.         SET provider_tx_discard = 0;
  156.         SET cost_cadency = 0;
  157.         SET cost_tx_connection = 0;
  158.         SET cost_rate = 0;
  159.         SET cost_price = 0;
  160.         SET reseller_matched_prefix = null;
  161.         SET reseller_matched_prefix_name = null;
  162.         SET reseller_id = 0;
  163.         SET reseller_name = null;
  164.         SET reseller_billing_type = 0;
  165.         SET reseller_markup = 0;
  166.         SET reseller_rateplan_id = 0;
  167.         SET reseller_rateplan_name = null;
  168.         SET reseller_rateplan_rateid = 0;
  169.         SET reseller_rate = 0;
  170.         SET reseller_price = 0;
  171.         SET gw_address = null;
  172.         SET gw_name = null;
  173.         SET gw_rateid = null;
  174.         SET timeout_profile_keepalive = null;
  175.         SET v_reverse_billing = false;
  176.         SET daily_quota = false;
  177.         SET daily_quota_type = null;
  178.         SET monthly_quota = false;
  179.         SET monthly_quota_type = null;
  180.  
  181.         -- --------------------------------------------
  182.         -- RECUPERA OS USERNAME E DOMAIN DA CHAMADA
  183.         -- --------------------------------------------
  184.         SET v_domain_acc = SUBSTRING(v_accountcode, LOCATE('@', v_accountcode) + 1);
  185.         SET v_username_acc = SUBSTRING(v_accountcode, 1, LOCATE('@', v_accountcode) -1);
  186.  
  187.         -- --------------------------------------------------------
  188.         -- RECUPERA OS DADOS DE TARIFACAO E KEEPALIVE DO ASSINANTE
  189.         -- --------------------------------------------------------
  190.         SELECT rp.id,
  191.                rp.name,
  192.                rp.rateid,
  193.                rp.tx_conn,
  194.                rp.cadency,
  195.                rp.markup,
  196.                rp.tx_delay,
  197.                rp.prepaid,
  198.                rp.tx_discard,
  199.                rp.strategy,
  200.                rp.rounding,
  201.                p.timeout_profile_keepalive
  202.         INTO rateplan_id,
  203.              rateplan_name,
  204.              rateplan_rateid,
  205.              rateplan_tx_conn,
  206.              rateplan_cadency,
  207.              rateplan_markup,
  208.              rateplan_tx_delay,
  209.              rateplan_prepaid,
  210.              rateplan_tx_discard,
  211.              rateplan_strategy,
  212.              rateplan_rounding,
  213.              timeout_profile_keepalive
  214.         FROM sippulse.subscriber s,
  215.              sippulse.rate_plan rp,
  216.              sippulse.profile p
  217.         WHERE s.username = v_rpid
  218.         AND   s.domain = v_domain_acc
  219.         AND   rp.id = s.rateplan_id
  220.         AND   p.profile = s.profile
  221.         AND   p.domain = s.domain;
  222.  
  223.         -- ---------------------------------------------------------------------
  224.         -- RECUPERA OS DADOS DE QUOTA E REVENDA DA CONTA AGRUPADORA
  225.         -- ---------------------------------------------------------------------
  226.         SELECT s.reseller_id,
  227.                s.reseller_billing_type,
  228.                s.reseller_markup,
  229.                s.reseller_rateplan_id,
  230.                s.daily_quota,
  231.                s.daily_quota_type,
  232.                s.monthly_quota,
  233.                s.monthly_quota_type
  234.         INTO reseller_id,
  235.              reseller_billing_type,
  236.              reseller_markup,
  237.              reseller_rateplan_id,
  238.              daily_quota,
  239.              daily_quota_type,
  240.              monthly_quota,
  241.              monthly_quota_type
  242.         FROM sippulse.subscriber s
  243.         WHERE s.username = v_username_acc
  244.         AND   s.domain = v_domain_acc;
  245.  
  246.         -- -----------------------------------------------------------------------
  247.         -- CALCULA O TEMPO DA CHAMADA BASEADO NA CONFIGURACAO DO PLANO DE TARIFAS
  248.         -- -----------------------------------------------------------------------
  249.         IF (rateplan_strategy = 'I') THEN
  250.             -- I: INVITIME LEVA EM CONSIDERACAO O CAMPOR INVITIME DO BYE PARA CALCULO DA DURACAO
  251.             SELECT (UNIX_TIMESTAMP(v_bye_inv_time)-UNIX_TIMESTAMP(v_time)) INTO call_time;
  252.         ELSE
  253.             -- T: TRANSACTION LEVA EM CONSIDERACAO O CAMPO TIME DO BYE PARA CALCULO DA DURACAO
  254.             SELECT (UNIX_TIMESTAMP(v_bye_time)-UNIX_TIMESTAMP(v_time)) INTO call_time;
  255.         END IF;
  256.  
  257.         -- --------------------------------------------------------------------------------
  258.         -- CALCULA O ARREDONDAMENTO DA CHAMADA BASEADO NA CONFIGURACAO DO PLANO DE TARIFAS
  259.         -- --------------------------------------------------------------------------------
  260.         IF (rateplan_rounding = 'A') THEN
  261.             SET diff_microseconds = v_bye_time_microseconds - v_time_microseconds;
  262.             IF (diff_microseconds >= 500000) THEN
  263.                 SET call_time = call_time + 1;
  264.             ELSEIF (diff_microseconds < -500000) THEN
  265.                 SET call_time = call_time - 1;
  266.             END IF;
  267.         ELSEIF (rateplan_rounding = 'U') THEN
  268.             SET diff_microseconds = v_bye_time_microseconds - v_time_microseconds;
  269.             IF (diff_microseconds >= 1) THEN
  270.                 SET call_time = call_time + 1;
  271.             END IF;
  272.         END IF;
  273.  
  274.         -- verifica se a duracao eh negativa
  275.         IF (call_time < 0) THEN
  276.             SET call_time = 0;
  277.         -- verifica se a chamada ultrapassou o tempo maximo configurado no profile e marca como timeout
  278.         ELSEIF (call_time >= timeout_profile_keepalive) THEN
  279.             SET v_service = 'timeout';
  280.         ELSE
  281.             -- verifica se a chamada eh a cobrar e desconta 6 segundos
  282.             IF (v_service = 'acobrar') THEN
  283.                 IF (call_time < 6) THEN
  284.                     SET call_time = 0;
  285.                 ELSE
  286.                     SET call_time = call_time - 6;
  287.                 END IF;
  288.             END IF;
  289.         END IF;
  290.  
  291.         IF ((call_time > 0) &&
  292.             (v_service <> 'timeout') &&
  293.             (v_service <> 'net') &&
  294.             (v_service <> 'media')) THEN
  295.  
  296.             -- em casos de chamada did, verifica se tarifacao reversa esta ativa
  297.             IF ((v_service = 'did') || (v_service = '0800')) THEN
  298.                 SELECT d.reverse_billing
  299.                 FROM sippulse.did d
  300.                 WHERE d.alias_username = substring_index(substring(v_dst_uri, 5), '@', 1)
  301.                 INTO v_reverse_billing;
  302.             END IF;
  303.  
  304.             -- --------------------------------------
  305.             -- CALCULA O VALOR DE CUSTO DA CHAMADA
  306.             -- --------------------------------------
  307.             IF (v_gwid > 0) THEN
  308.                 -- recupera os dados do provedor utilizado para realizar a chamada
  309.                 SELECT pr.id,
  310.                        pr.name,
  311.                        pr.cadency,
  312.                        pr.tx_conn,
  313.                        pr.start_delay,
  314.                        pr.tx_discard,
  315.                        dg.address,
  316.                        dg.description,
  317.                        dg.rateid
  318.                 FROM sippulse.dr_gateways dg, sippulse.provider pr
  319.                 WHERE dg.id = v_gwid
  320.                 AND pr.id = dg.providerid
  321.                 INTO providerid,
  322.                      provider_name,
  323.                      cost_cadency,
  324.                      cost_tx_connection,
  325.                      provider_start_delay,
  326.                      provider_tx_discard,
  327.                      gw_address,
  328.                      gw_name,
  329.                      gw_rateid;
  330.  
  331.                 IF ((gw_rateid IS NOT NULL) && (call_time > provider_tx_discard)) THEN
  332.                     -- calcula o custo da chamada, de acordo com o provedor utilizado
  333.                     -- para chamadas pstn, usa como base o numero de destino
  334.                     -- chamadas did, 0800 e acobrar, usa o numero de origem (reverso)
  335.                     IF ((v_service = 'acobrar') ||
  336.                         ((v_service = '0800') && (v_reverse_billing)) ||
  337.                         ((v_service = 'did') && (v_reverse_billing))) THEN
  338.  
  339.                         -- recupera o valor de custo da chamada com base no src_uri
  340.                         SELECT sippulse.retrieve_call_cost(v_gwid, v_src_uri) INTO cost_rate;
  341.  
  342.                         -- calcula o valor de custo da chamada
  343.                         IF (cost_rate IS NOT NULL) THEN
  344.                             SELECT sippulse.calculate_call_price(cost_tx_connection,
  345.                                                                  cost_cadency,
  346.                                                                  provider_start_delay,
  347.                                                                  call_time,
  348.                                                                  cost_rate) INTO cost_price;
  349.                         END IF;
  350.                     ELSEIF ((v_service = 'pstn') || (v_service = 'local')) THEN
  351.  
  352.                         -- recupera o valor de custo da chamada com base no dst_uri
  353.                         SELECT sippulse.retrieve_call_cost(v_gwid, v_dst_uri) INTO cost_rate;
  354.  
  355.                         -- calcula o valor de custo da chamada
  356.                         IF (cost_rate IS NOT NULL) THEN
  357.                             SELECT sippulse.calculate_call_price(cost_tx_connection,
  358.                                                                  cost_cadency,
  359.                                                                  provider_start_delay,
  360.                                                                  call_time,
  361.                                                                  cost_rate) INTO cost_price;
  362.                         END IF;
  363.                     END IF;
  364.  
  365.                     -- calcula o provider duration block
  366.                     SELECT sippulse_reports.calculate_block_duration(cost_tx_connection,
  367.                                                                      cost_cadency,
  368.                                                                      provider_start_delay,
  369.                                                                      call_time) INTO provider_duration_block;
  370.                 END IF;
  371.             END IF;
  372.  
  373.             -- --------------------------------------
  374.             -- CALCULA O VALOR DE VENDA DA CHAMADA
  375.             -- --------------------------------------
  376.             IF ((v_service = 'acobrar') ||
  377.                 ((v_service = '0800') && (v_reverse_billing)) ||
  378.                 ((v_service = 'did') && (v_reverse_billing))) THEN
  379.  
  380.                 -- recupera o custo da chamada, baseando-se no originador (reverso)
  381.                 CALL sippulse.retrieve_call_rate(v_domain_acc,
  382.                                                  rateplan_rateid,
  383.                                                  rateplan_markup,
  384.                                                  v_src_uri,
  385.                                                  rate_prefix,
  386.                                                  rate_name,
  387.                                                  rate_type,
  388.                                                  rate_value,
  389.                                                  rate_tx_conn,
  390.                                                  rate_cadency,
  391.                                                  rate_tx_delay,
  392.                                                  rate_tx_discard);
  393.  
  394.             ELSEIF ((v_service = 'pstn') || (v_service = 'local')) THEN
  395.                 -- calcula a tarifa de venda da chamada
  396.                 CALL sippulse.retrieve_call_rate(v_domain_acc,
  397.                                                  rateplan_rateid,
  398.                                                  rateplan_markup,
  399.                                                  v_dst_uri,
  400.                                                  rate_prefix,
  401.                                                  rate_name,
  402.                                                  rate_type,
  403.                                                  rate_value,
  404.                                                  rate_tx_conn,
  405.                                                  rate_cadency,
  406.                                                  rate_tx_delay,
  407.                                                  rate_tx_discard);
  408.             END IF;
  409.  
  410.             -- verifica se existe tx_discard na tarifa de venda
  411.             IF (rate_tx_discard IS NOT NULL) THEN
  412.                 SET rateplan_tx_discard = rate_tx_discard;
  413.             END IF;
  414.  
  415.             -- verifica se a duracao esta acima do tempo de descarte
  416.             IF (call_time > rateplan_tx_discard) THEN
  417.  
  418.                 -- verifica se existe tx_conn e cadencia na tarifa de venda
  419.                 IF ((rate_tx_conn IS NOT NULL) && (rate_cadency IS NOT NULL)) THEN
  420.                     SET rateplan_tx_conn = rate_tx_conn;
  421.                     SET rateplan_cadency = rate_cadency;
  422.                 END IF;
  423.  
  424.                 -- verifica se existe tx_delay na tarifa de venda
  425.                 IF (rate_tx_delay IS NOT NULL) THEN
  426.                     SET rateplan_tx_delay = rate_tx_delay;
  427.                 END IF;
  428.  
  429.                 -- calcula o valor de custo da chamada
  430.                 SELECT sippulse.calculate_call_price(rateplan_tx_conn,
  431.                                                      rateplan_cadency,
  432.                                                      rateplan_tx_delay,
  433.                                                      call_time,
  434.                                                      rate_value) INTO call_price;
  435.  
  436.                 -- calcula o bloco de duracao de venda
  437.                 SELECT calculate_block_duration(rateplan_tx_conn,
  438.                                                 rateplan_cadency,
  439.                                                 rateplan_tx_delay,
  440.                                                 call_time) INTO duration_block;
  441.  
  442.                 -- --------------------------------------
  443.                 -- CALCULA O VALOR DA REVENDA DA CHAMADA
  444.                 -- --------------------------------------
  445.                 IF (reseller_id > 0) THEN
  446.                     -- recupera o nome da revenda
  447.                     SELECT r.name FROM sippulse.reseller r WHERE r.id = reseller_id INTO reseller_name;
  448.  
  449.                     -- atualiza o rate com base na modalidade de tarifacao da revenda
  450.                     -- 0: markup
  451.                     -- 1: plano de tarifas
  452.                     IF (reseller_billing_type = 0) THEN
  453.                         -- modalidade markup
  454.                         SELECT sippulse.retrieve_reseller_markup(rate_value, reseller_markup) INTO reseller_rate;
  455.                         SELECT sippulse.retrieve_reseller_markup(call_price, reseller_markup) INTO reseller_price;
  456.                         SET reseller_matched_prefix = rate_prefix;
  457.                         SET reseller_matched_prefix_name = rate_name;
  458.                     ELSE
  459.                         -- recupera a taxa de conexao e cadencia do Reseller Rate Plan
  460.                         SELECT rrp.name, rrp.reseller_rate_id
  461.                         FROM sippulse.reseller_rate_plan rrp
  462.                         WHERE rrp.id = reseller_rateplan_id
  463.                         INTO reseller_rateplan_name, reseller_rateplan_rateid;
  464.  
  465.                         IF ((v_service = 'acobrar') ||
  466.                             ((v_service = '0800') && (v_reverse_billing)) ||
  467.                             ((v_service = 'did') && (v_reverse_billing))) THEN
  468.                             -- modalidade plano de tarifas, recupera a tarifa para a chamada
  469.                             CALL sippulse.retrieve_reseller_call_rate(reseller_id,
  470.                                                                       reseller_rateplan_rateid,
  471.                                                                       v_src_uri,
  472.                                                                       reseller_matched_prefix,
  473.                                                                       reseller_matched_prefix_name,
  474.                                                                       reseller_rate);
  475.                         ELSEIF ((v_service = 'pstn') || (v_service = 'local')) THEN
  476.                             CALL sippulse.retrieve_reseller_call_rate(reseller_id,
  477.                                                                       reseller_rateplan_rateid,
  478.                                                                       v_dst_uri,
  479.                                                                       reseller_matched_prefix,
  480.                                                                       reseller_matched_prefix_name,
  481.                                                                       reseller_rate);
  482.                         END IF;
  483.  
  484.                         -- recupera o valor da revenda
  485.                         SELECT sippulse.calculate_call_price(rateplan_tx_conn,
  486.                                                              rateplan_cadency,
  487.                                                              rateplan_tx_delay,
  488.                                                              call_time,
  489.                                                              reseller_rate) INTO reseller_price;
  490.                     END IF;
  491.                 END IF;
  492.  
  493.                 -- --------------------------------------
  494.                 -- INCREMENTA O CONSUMO DA QUOTA DIARIA
  495.                 -- --------------------------------------
  496.                 IF (daily_quota) THEN
  497.                     -- INCREMENTE O CONSUMO DA QUOTA EM MINUTOS
  498.                     IF (daily_quota_type = 'M') THEN
  499.                         update sippulse.subscriber s set s.daily_quota_consumed = (s.daily_quota_consumed + ROUND(call_time/60,2))
  500.                         where s.username = v_username_acc
  501.                         and s.domain = v_domain_acc;
  502.                     -- INCREMENTE O CONSUMO DA QUOTA EM VALORES
  503.                     ELSEIF (daily_quota_type = 'V') THEN
  504.                         IF (reseller_id IS NULL) THEN
  505.                             update sippulse.subscriber s set s.daily_quota_consumed = (s.daily_quota_consumed + call_price)
  506.                             where s.username = v_username_acc
  507.                             and s.domain = v_domain_acc;
  508.                         ELSE
  509.                             update sippulse.subscriber s set s.daily_quota_consumed = (s.daily_quota_consumed + reseller_price)
  510.                             where s.username = v_username_acc
  511.                             and s.domain = v_domain_acc;
  512.                         END IF;
  513.                     END IF;
  514.                 END IF;
  515.  
  516.                 -- --------------------------------------
  517.                 -- INCREMENTA O CONSUMO DA QUOTA MENSAL
  518.                 -- --------------------------------------
  519.                 IF (monthly_quota) THEN
  520.                     -- INCREMENTE O CONSUMO DA QUOTA EM MINUTOS
  521.                     IF (monthly_quota_type = 'M') THEN
  522.                         update sippulse.subscriber s set s.monthly_quota_consumed = (s.monthly_quota_consumed + ROUND(call_time/60,2))
  523.                         where s.username = v_username_acc
  524.                         and s.domain = v_domain_acc;
  525.                     -- INCREMENTE O CONSUMO DA QUOTA EM VALORES
  526.                     ELSEIF (monthly_quota_type = 'V') THEN
  527.                         IF (reseller_id IS NULL) THEN
  528.                             update sippulse.subscriber s set s.monthly_quota_consumed = (s.monthly_quota_consumed + call_price)
  529.                             where s.username = v_username_acc
  530.                             and s.domain = v_domain_acc;
  531.                         ELSE
  532.                             update sippulse.subscriber s set s.monthly_quota_consumed = (s.monthly_quota_consumed + reseller_price)
  533.                             where s.username = v_username_acc
  534.                             and s.domain = v_domain_acc;
  535.                         END IF;
  536.                     END IF;
  537.                 END IF;
  538.             END IF;
  539.         END IF;
  540.  
  541.         -- ------------------------------------------
  542.         -- INSERE O BILHETE FECHADO NA TABELA CDRS
  543.         -- ------------------------------------------
  544.         INSERT INTO sippulse_reports.cdrs_report
  545.                           (src_uri,
  546.                            dst_uri,
  547.                            call_start_time,
  548.                            duration,
  549.                            start_delay,
  550.                            tx_discard,
  551.                            sip_call_id,
  552.                            sip_from_tag,
  553.                            sip_to_tag,
  554.                            created,
  555.                            caller_id,
  556.                            callee_id,
  557.                            caller_domain,
  558.                            callee_domain,
  559.                            rpid,
  560.                            cost,
  561.                            cost_price,
  562.                            cost_delay,
  563.                            cost_discard,
  564.                            service,
  565.                            service_type,
  566.                            src_ip,
  567.                            user_agent,
  568.                            profile,
  569.                            rate,
  570.                            price,
  571.                            accountcode,
  572.                            providerid,
  573.                            provider_name,
  574.                            provider_tx_conn,
  575.                            provider_cadency,
  576.                            provider_duration_block,
  577.                            rateplan_id,
  578.                            rateplan_name,
  579.                            rateplan_rateid,
  580.                            rateplan_tx_conn,
  581.                            rateplan_cadency,
  582.                            duration_block,
  583.                            rateplan_markup,
  584.                            rateplan_prepaid,
  585.                            matched_prefix,
  586.                            matched_prefix_name,
  587.                            reseller_id,
  588.                            reseller_name,
  589.                            reseller_rate,
  590.                            reseller_price,
  591.                            reseller_rateplan_id,
  592.                            reseller_rateplan_name,
  593.                            reseller_rateplan_rateid,
  594.                            reseller_markup,
  595.                            reseller_matched_prefix,
  596.                            reseller_matched_prefix_name,
  597.                            gwid,
  598.                            gw_address,
  599.                            gw_name,
  600.                            gw_rateid,
  601.                            rec,
  602.                            q850_code,
  603.                            q850_reason,
  604.                            cnla,
  605.                            cnlb,
  606.                            mesma_area,
  607.                            tipo,
  608.                            rn1,
  609.                            rule_id,
  610.                            channels)
  611.         VALUES
  612.                            (v_src_uri,
  613.                             v_dst_uri,
  614.                             v_time,
  615.                             call_time,
  616.                             rateplan_tx_delay,
  617.                             rateplan_tx_discard,
  618.                             v_callid,
  619.                             v_from_tag,
  620.                             v_to_tag,
  621.                             NOW(),
  622.                             v_caller_id,
  623.                             v_callee_id,
  624.                             v_caller_domain,
  625.                             v_callee_domain,
  626.                             v_rpid,
  627.                             cost_rate,
  628.                             cost_price,
  629.                             provider_start_delay,
  630.                             provider_tx_discard,
  631.                             v_service,
  632.                             rate_type,
  633.                             v_src_ip,
  634.                             v_user_agent,
  635.                             v_profile,
  636.                             rate_value,
  637.                             call_price,
  638.                             v_accountcode,
  639.                             providerid,
  640.                             provider_name,
  641.                             cost_tx_connection,
  642.                             cost_cadency,
  643.                             provider_duration_block,
  644.                             rateplan_id,
  645.                             rateplan_name,
  646.                             rateplan_rateid,
  647.                             rateplan_tx_conn,
  648.                             rateplan_cadency,
  649.                             duration_block,
  650.                             rateplan_markup,
  651.                             rateplan_prepaid,
  652.                             rate_prefix,
  653.                             rate_name,
  654.                             reseller_id,
  655.                             reseller_name,
  656.                             reseller_rate,
  657.                             reseller_price,
  658.                             reseller_rateplan_id,
  659.                             reseller_rateplan_name,
  660.                             reseller_rateplan_rateid,
  661.                             reseller_markup,
  662.                             reseller_matched_prefix,
  663.                             reseller_matched_prefix_name,
  664.                             v_gwid,
  665.                             gw_address,
  666.                             gw_name,
  667.                             gw_rateid,
  668.                             v_rec,
  669.                             v_q850_code,
  670.                             v_q850_reason,
  671.                             v_cnla,
  672.                             v_cnlb,
  673.                             v_mesma_area,
  674.                             v_tipo,
  675.                             v_rn1,
  676.                             v_rule_id,
  677.                             v_channels);
  678.  
  679.         -- ------------------------------------------
  680.         -- MARCA O REGISTRO COMO FECHADO NA TABELA ACC
  681.         -- ------------------------------------------
  682.         UPDATE sippulse_reports.acc_report SET cdr_id=last_insert_id() WHERE id = v_acc_id;
  683.       END IF;
  684.       SET cursor_done = 0;
  685.     END IF;
  686.   UNTIL cursor_done END REPEAT;
  687. END
  688.  ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement