Advertisement
sombriks

GeradorDoArquivoePharma.ijs

Jan 19th, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. includeOnce -1892821528 /* /products/DYADinfrastructure/library/objects/ObjetoModelo.ijs */
  2. includeOnce -1895935588 /* /products/DYADhrp/library/includes/Funcoes Auxiliares do DYADhrp/Funcoes de Uso Geral.ijs */
  3.  
  4. /**
  5.  *
  6.  * Descrição                   : Objeto de geração dos arquivos de carga de
  7.  *                               beneficiários que possuem produtos e-Pharma
  8.  *
  9.  * Autor                       : Leonardo Silveira
  10.  *
  11.  * Data de Criação             : 28/12/2015
  12.  *
  13.  * Alterações(data,autor,obs)  : 05/01/2016,Leonardo Silveira, movido para a
  14.  *                               DELETROS de modo a fazer o fluxo normal de
  15.  *                               publicação. A versão presente na HELETROS será
  16.  *                               apagada e então trocada por esta.
  17.  *
  18.  *                               07/01/2016,Leonardo Silveira, alterada a query
  19.  *                               para trazer o código do produto acessório
  20.  *                               também.
  21.  *
  22.  *                               13/01/2016,Leonardo Silveira, corrigindo a
  23.  *                               consulta que trouxe beneficiários que não
  24.  *                               deveria
  25.  *
  26.  *                               13/01/2016,Leonardo Silveira, efetuando as
  27.  *                               mudanças necessárias para comportar os novos
  28.  *                               contratos, planos e produtos
  29.  *
  30.  *                               15/01/2016,Leonardo Silveira, efetuando as
  31.  *                               mudanças necessárias para recuperar direito os
  32.  *                               endereços dos beneficiários
  33.  *
  34.  *                               18/01/2016,Leonardo Silveira, alterando o
  35.  *                               endereço utilizado na coluna início de vigência
  36.  *                               no layout de beneficiários
  37.  *
  38.  *                               19/01/2016,Leonardo Silveira, alteração para
  39.  *                               comportar a forma como a parametrização se
  40.  *                               apresenta agora
  41.  **/
  42. function GeradorDoArquivoePharma(){
  43.  ObjetoModelo.call( this )
  44. }
  45.  
  46. GeradorDoArquivoePharma.inherit = ObjetoModelo.inherit
  47. GeradorDoArquivoePharma.inherit( ObjetoModelo )
  48.  
  49. /**
  50. * Descrição     : mensagem trocada entre a process e o objeto de exportação
  51. * Parâmetros    : parâmetro de entrada e de saída recebido da interface
  52. * Retorno       : um ResponseObject com os dados para exportação
  53. **/
  54. GeradorDoArquivoePharma.prototype.geraArquivo =
  55. function GeradorDoArquivoePharma_geraArquivo( inOutParams ){
  56.  
  57.     try{
  58.         this._validaParametros(inOutParams)
  59.  
  60.         var result = this._montaArquivo(inOutParams)
  61.  
  62.         return result
  63.     }finally{
  64.         if( this.dsBeneficiarios && !this.dsBeneficiarios.active){
  65.             this.dsBeneficiarios.close()
  66.             this.dsBeneficiarios = null
  67.         }
  68.         if( this.dsEnderecos && !this.dsEnderecos.active){
  69.             this.dsEnderecos.close()
  70.             this.dsEnderecos = null
  71.         }
  72.     }
  73. }
  74.  
  75. /**
  76. * Descrição     : comportamento privado de validação dos parâmetros recebidos
  77. * Parâmetros    : parâmetro de entrada e de saída recebido da interface
  78. * Retorno       : nenhum, mas pode subir exceção
  79. **/
  80. GeradorDoArquivoePharma.prototype._validaParametros =
  81. function GeradorDoArquivoePharma__validaParametros( inOutParams ){
  82.  
  83.     var functionName = "GeradorDoArquivoePharma__validaParametros()"
  84.     obrigaPassagemDeParametroParaFuncao( functionName, "inOutParams", inOutParams )
  85.     //obrigaPassagemDeParametroParaFuncao( functionName, "O codigo do plano deve ser informado", inOutParams.codplano )
  86.     //obrigaPassagemDeParametroParaFuncao( functionName, "O codigo do cliente deve ser informado", inOutParams.codcliente )
  87.     //obrigaPassagemDeParametroParaFuncao( functionName, "O codigo do produto deve ser informado", inOutParams.codproduto )
  88.     //obrigaPassagemDeParametroParaFuncao( functionName, "O codigo do contrato deve ser informado", inOutParams.codcontrato )
  89.     obrigaPassagemDeParametroParaFuncao( functionName, "A data de referência deve ser informada", inOutParams.dataReferencia )
  90.     obrigaPassagemDeParametroParaFuncao( functionName, "Ao menos um cliente parametrizado deve ser informado", inOutParams.clienteEletros )
  91.  
  92. }
  93.  
  94. /**
  95.  * Descrição    : comportamento privado de construção de arquivo. basicamente o
  96.  *                roteiro seguido pra gerar o arquivo
  97.  * Parâmetros   : parâmetro de entrada e de saída recebido da interface
  98.  * Retorno      : o conteúdo do arquivo de exportação
  99.  **/
  100. GeradorDoArquivoePharma.prototype._montaArquivo =
  101. function GeradorDoArquivoePharma__montaArquivo( inOutParams ){
  102.     var res = new ResponseObject()
  103.  
  104.     this.contadorLinha = 1
  105.    
  106.     this._consultaFiltros(inOutParams)
  107.  
  108.     var linha = this._montaLinhaCabecalho(inOutParams)
  109.     res.write(linha+"\r\n")
  110.     this.contadorLinha++
  111.  
  112.     this._realizaConsulta(inOutParams)
  113.  
  114.     for(this.dsBeneficiarios.first();!this.dsBeneficiarios.eof;this.dsBeneficiarios.next()){
  115.         linha = this._montaLinhaBeneficiarios(this.dsBeneficiarios,inOutParams)
  116.         res.write(linha+"\r\n")
  117.         this.contadorLinha++
  118.     }
  119.  
  120.     this._realizaConsultaAuxiliar(inOutParams)
  121.  
  122.     for(this.dsEnderecos.first();!this.dsEnderecos.eof;this.dsEnderecos.next()){
  123.         if(this.dsEnderecos.pessoacontrato.dependente == this.dsEnderecos.pessoacontrato.titular){
  124.             linha = this._montaLinhaEnderecos(this.dsEnderecos,inOutParams)
  125.             res.write(linha+"\r\n")
  126.             this.contadorLinha++
  127.         }
  128.     }
  129.  
  130.     linha = this._montaLinhaRodape(inOutParams)
  131.     res.write(linha+"\r\n")
  132.  
  133.     return res;
  134. }
  135.  
  136. /**
  137.  * Descrição    : comportamento privado para completar os valores do filtro
  138.  *
  139.  * Parâmetros   : parâmetro de entrada e de saída recebido da interface
  140.  *
  141.  * Retorno      : nenhum, mas o filtro recebido será incrementado com os valores
  142.  *                do perfil de cliente selecionado
  143.  **/
  144. GeradorDoArquivoePharma.prototype._consultaFiltros =
  145. function GeradorDoArquivoePharma_consultaFiltros( inOutParams ) {
  146.  
  147.     var q = "select * from tabela where chave = "+inOutParams.clienteEletros
  148.  
  149.     var dsPerfil = connection.getDataSet(q);
  150.  
  151.     inOutParams.codcontrato = dsPerfil.zcontratosepharma
  152.     inOutParams.codproduto  = dsPerfil.zprodutosepharma
  153.     inOutParams.codplano    = dsPerfil.zplanosepharma
  154.     inOutParams.codcliente  = dsPerfil.codigo
  155.     inOutParams.agregador   = dsPerfil.zcodigoagregadorepharma
  156.     inOutParams.numerador   = connection.createNumber(dsPerfil.znumeradorepharma)[2]
  157.    
  158.     dsPerfil.close()
  159.  
  160. }
  161.  
  162. /**
  163.  * Descrição    : comportamento privado de consulta de beneficiários
  164.  * Parâmetros   : parâmetro de entrada e de saída recebido da interface
  165.  * Retorno      : nenhum, mas instancia o dataSet de beneficiários
  166.  **/
  167. GeradorDoArquivoePharma.prototype._realizaConsulta =
  168. function GeradorDoArquivoePharma__realizaConsulta( inOutParams ){
  169.  
  170.     var dtReferencia = inOutParams.dataReferencia.toSqlString()
  171.  
  172.     var q = "
  173.         select
  174.            contrato.codigo        as codcontrato,
  175.            plano.codigo           as codplano,
  176.            prod.codigo            as codproduto,
  177.            benef.nome             as nomebeneficiario,
  178.            endereco.uf            as endestado,
  179.            endereco.localidade    as endcidade,
  180.            endereco.sublocalidade as endbairro,
  181.            endereco.logradouro    as endlogradouro,
  182.            endereco.numero        as endnumero,
  183.            endereco.complemento   as endcomplemento,
  184.            endereco.cep           as endcep,
  185.            adesao.*
  186.        from
  187.            vincula adesao
  188.        join
  189.            pessoacontrato pc on pc.chave = adesao.pessoacontrato
  190.        join
  191.            contrato on pc.contrato = contrato.chave
  192.        join
  193.            recurso plano     on plano.chave = adesao.recurso
  194.        join
  195.            vincula prodacess on prodacess.pessoacontrato = pc.chave
  196.        join
  197.            recurso prod      on prod.chave = prodacess.recurso
  198.        join
  199.            entidade benef    on benef.chave = pc.dependente
  200.        join
  201.            vincula endereco  on benef.chave = endereco.entidade
  202.        where
  203.            adesao.classe     in (" + connection.getChildren( -1895935845 ) + ") /* Planos de Saude do Beneficiario */
  204.        and endereco.Classe    = -1897047821 /* Endereços / Principal */
  205.        and plano.chave       in (" + inOutParams.codplano    + ")
  206.        and prod.chave        in (" + inOutParams.codproduto  + ")
  207.        and contrato.chave    in (" + inOutParams.codcontrato + ")
  208.        and adesao.inicio     <= "  + dtReferencia + "
  209.        and (adesao.fim       is null
  210.        or  adesao.fim        >= "  + dtReferencia + ")
  211.    "
  212.  
  213.     this.dsBeneficiarios = connection.getDataSet(q)
  214.  
  215.     // caso não tenhamos resultados
  216.     if(!this.dsBeneficiarios.recordCount)
  217.       throw "A consulta não encontrou resultado.\nMude os parâmetros de busca e tente novamente."
  218.  
  219.     this.dsBeneficiarios.indexFieldNames="pessoacontrato.chcriacao;pessoacontrato.dependente.nome"
  220.  
  221. }
  222.  
  223. /**
  224.  * Descrição    : método privado de consulta de endereços de beneficiários
  225.  * Parâmetros   : lista com todas as chaves de beneficiários titulares
  226.  * Retorno      : nenhum, mas instancia o dataSet de endereços
  227.  **/
  228. GeradorDoArquivoePharma.prototype._realizaConsultaAuxiliar =
  229. function GeradorDoArquivoePharma__realizaConsultaAuxiliar( inOutParams,chavesTitulares ){
  230.  
  231.     this.dsEnderecos = this.dsBeneficiarios
  232. }
  233.  
  234. /**
  235.  * Descrição    : comportamento privado de montagem da linha de cabeçalho
  236.  * Parâmetros   : parâmetro de entrada e de saída recebido da interface
  237.  * Retorno      : a linha de abeçalho
  238.  **/
  239. GeradorDoArquivoePharma.prototype._montaLinhaCabecalho =
  240. function GeradorDoArquivoePharma__montaLinhaCabecalho(inOutParams){
  241.  
  242.     var hoje             = new Date()
  243.     var dia              = hoje.toString("dd/MM/yyyy")
  244.     var hora             = hoje.toString("HH:mm")
  245.  
  246.     // necessário após a alteração em 2016-01-18
  247.     inOutParams.dia  = dia
  248.     inOutParams.hora = hora
  249.  
  250.     var linha = []
  251.  
  252.     // 00 - Header - Cabeçalho do Arquivo
  253.     linha.push(padString("00",                  2,"right","0"))
  254.     linha.push(padString("0310",                4,"right","0"))
  255.     linha.push(padString(inOutParams.agregador, 6,"right","0"))
  256.     linha.push(padString(inOutParams.numerador, 6,"right","0"))
  257.     linha.push(padString(dia,                  10,"right"," "))
  258.     linha.push(padString(hora,                  5,"right"," "))
  259.     linha.push(padString("T",                   1,"right"," "))
  260.     linha.push(padString(" ",                 120,"right"," "))
  261.     linha.push(padString(this.contadorLinha,    6,"right","0"))
  262.  
  263.     return linha.join("")
  264. }
  265.  
  266. /**
  267.  * Descrição    : comportamento privado de montagem da linha de beneficiário
  268.  * Parâmetros   : o dataset já posicionado no beneficiário a ser colocado na linha
  269.  * Retorno      : a linha de beneficiário
  270.  **/
  271. GeradorDoArquivoePharma.prototype._montaLinhaBeneficiarios =
  272. function GeradorDoArquivoePharma__montaLinhaBeneficiarios(dsBeneficiarios,inOutParams){
  273.  
  274.     var pessoacontrato = dsBeneficiarios.pessoacontrato
  275.     var dependente     = pessoacontrato.dependente
  276.     var codBeneficio   = dsBeneficiarios.codproduto
  277.     var cpf            = onlyNumbers(dependente.cgccpf)
  278.     var dtnascimento   = dependente.nascimento.toString("dd/MM/yyyy")
  279.     var dtinicio       = dsBeneficiarios.inicio.toString("dd/MM/yyyy")
  280.     var dtfim          = dsBeneficiarios.fim.toString("dd/MM/yyyy")
  281.  
  282.     var linha = []
  283.  
  284.     // 01 - Registro de Beneficiários (Registro que contém as informações dos beneficiários titulares e dependentes)
  285.     linha.push(padString("01",                           2,"right","0"))
  286.     linha.push(padString("I",                            1,"right"," "))
  287.     linha.push(padString(inOutParams.codcliente,         6,"right","0"))
  288.     linha.push(padString(codBeneficio,                   6,"right","0"))
  289.     linha.push(padString(dependente.nome,               50,"right"," "))
  290.     linha.push(padString(pessoacontrato.codigo,         20,"left" ," "))
  291.     linha.push(padString(pessoacontrato.zcoddependente,  2,"right","0"))
  292.     linha.push(padString(dtnascimento,                  10,"right"," "))
  293.     linha.push(padString(" ",                           14,"left" ," "))
  294.     linha.push(padString(dependente.sexo,                1,"right"," "))
  295.     linha.push(padString(inOutParams.dia,               10,"right"," "))
  296.     linha.push(padString(dtfim,                         10,"right"," "))
  297.     linha.push(padString(cpf,                           11,"right","0"))
  298.     linha.push(padString(" ",                           11,"right"," "))
  299.     linha.push(padString(this.contadorLinha,             6,"right","0"))
  300.  
  301.     return linha.join("")
  302. }
  303.  
  304. /**
  305.  * Descrição    : comportamento privado de montagem da linha de endereços
  306.  * Parâmetros   : o dataset de endereços e a chave do beneficiário titular
  307.  * Retorno      : a linha de endereço
  308.  **/
  309. GeradorDoArquivoePharma.prototype._montaLinhaEnderecos =
  310. function GeradorDoArquivoePharma__montaLinhaEnderecos(dsEnderecos,inOutParams){
  311.  
  312.     var pessoacontrato = dsEnderecos.pessoacontrato
  313.     var codBeneficio   = dsEnderecos.codproduto
  314.     var endcep         = onlyNumbers(dsEnderecos.endcep)
  315.  
  316.     var endbairro      = ""
  317.     var endcidade      = ""
  318.     var endestado      = ""
  319.    
  320.     if (dsEnderecos.endbairro) {
  321.         endbairro = dsEnderecos.endbairro.nome
  322.     }
  323.     if (dsEnderecos.endcidade) {
  324.         endcidade = dsEnderecos.endcidade.nome
  325.     }
  326.     if (dsEnderecos.endestado){
  327.         endestado = dsEnderecos.endestado.codigo
  328.     }
  329.  
  330.     var linha = []
  331.  
  332.     // 02 - Registro de Endereço de Beneficiarios "Informado apenas para o titular"
  333.     linha.push(padString("02",                        2,"right","0"))
  334.     linha.push(padString(inOutParams.codcliente,      6,"right","0"))
  335.     linha.push(padString(codBeneficio,                6,"right","0"))
  336.     linha.push(padString(pessoacontrato.codigo,      20,"left" ," "))
  337.     linha.push(padString(dsEnderecos.endlogradouro,  40,"right"," "))
  338.     linha.push(padString(dsEnderecos.endnumero,       5,"right"," "))
  339.     linha.push(padString(dsEnderecos.endcomplemento, 10,"right"," "))
  340.     linha.push(padString(endbairro,                  20,"right"," "))
  341.     linha.push(padString(endcidade,                  30,"right"," "))
  342.     linha.push(padString(endestado,                   2,"right"," "))
  343.     linha.push(padString(endcep,                      8,"right"," "))
  344.     linha.push(padString(" ",                         5,"right"," "))
  345.     linha.push(padString(this.contadorLinha,          6,"right","0"))
  346.  
  347.     return linha.join("")
  348. }
  349.  
  350. /**
  351.  * Descrição    : comportamento privado de montagem da linha de rodapé
  352.  * Parâmetros   : parâmetro de entrada e de saída recebido da interface
  353.  * Retorno      : a linha de rodapé
  354.  **/
  355. GeradorDoArquivoePharma.prototype._montaLinhaRodape =
  356. function GeradorDoArquivoePharma__montaLinhaRodape(inOutParams){
  357.     var linha = []
  358.  
  359.     linha.push(padString("99",                 2,"right","0"))
  360.     linha.push(padString(this.contadorLinha,   6,"right","0"))
  361.     linha.push(padString(" ",                146,"right"," "))
  362.     linha.push(padString(this.contadorLinha,   6,"right","0"))
  363.  
  364.     return linha.join("")
  365. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement