Posted by Thiago Tue 27th Mar 2007 19:25 - Syntax is JavaScript - 119 views
Download | New Post | Modify | Hide line numbers
Description:
Tente achar o erro.

  1. /**
  2. * Arquivo com objetos e regras de negócio referentes ao gerenciamento
  3. * de Classe Mat Med.
  4. *
  5. * Usa FacadePCE no lado do servidor para acessar o modelo de
  6. * dominio server-side.
  7. *
  8. * Objetos JSON representando VO´s devem ser criados na primeira metade do arquivo
  9. * Objetos com regras de negócio devem ser colocados na segunda métade do arquivo
  10. *
  11. * @author Thiago Antonius
  12. */
  13. var absUtil           = AbstratoUtil.View.Validator;
  14. var funcaoRegistrada;
  15. var supremoBase       = new SupremoBase();                                                             
  16.  
  17. var ContaContabilGridTemplate = {
  18.     cols : [
  19.              ['Código','codigo', {width: "90"} ],                     
  20.                ['Descrição','descricao', {width: "300"}]                                                                                                                           
  21.             ]
  22. }                                     
  23.  
  24. /**
  25. * Gerenciador de classes de material e medicamento
  26. *
  27. * Contem métodos com regras de negócio.
  28. */
  29. var GerenciadorClasseMatMed = Class.create();
  30.  
  31. GerenciadorClasseMatMed.prototype = {
  32.  
  33.     initialize: function(){
  34.         this.absUtil          = AbstratoUtil.View.Validator;
  35.     },
  36.    
  37.     validar: function(){
  38.         var me = new GerenciadorClasseMatMed();
  39.        
  40.         var fields = [
  41.                               ["classeDescricao"    , "Descrição"            , "O campo Descrição é obrigatório"                                    , absUtil.SINGLE, true, "not-null"],
  42.                               ["classeGrupo"            , "Classe Grupo"            , "O campo Classe Grupo deve conter apenas números"            , absUtil.SINGLE, true, "number"],
  43.                               ["classeSubGrupo"        , "Classe Sub-Grupo"        , "O campo Classe Sub-Grupo deve conter apenas números"        , absUtil.SINGLE, true, "number"],
  44.                               ["classeSubSubGrupo"    , "Classe Sub-Sub-Grupo", "O campo Classe Sub-Sub-Grupo deve conter apenas números"    , absUtil.SINGLE, true, "number"]
  45.                          ];
  46.         absUtil.registerForm("classeMatMed"); //registra o formulário
  47.         absUtil.registerFields(fields);   
  48.         absUtil.submitionType(absUtil.SUBMITION_AJAX);
  49.         absUtil.ALERT_MODE = "modal";
  50.        
  51.         //funcao que será chamada depois da validação, casa a mesma seja realizada com sucesso.
  52.         funcaoRegistrada = absUtil.callFunctionAfterValidation( eval( $('operacao').value ) );
  53.        
  54.         //Registra campos que serao validados on-the-fly (apenas numero)       
  55.         absUtil.validateOnEvent("classeGrupo"            , "onkeypress", "only-number");
  56.         absUtil.validateOnEvent("classeSubGrupo"        , "onkeypress", "only-number");
  57.         absUtil.validateOnEvent("classeSubSubGrupo"    , "onkeypress", "only-number");
  58.         absUtil.validateOnEvent("codigoContaContabil"        , "onkeypress", "only-number");
  59.  
  60.         //botao que valida o form     
  61.          var evtRouter = new EventRouter($('btnConfirmarClasseMatMed'), 'onclick');
  62.               evtRouter.addListenner(absUtil.validate);                                 
  63.     }//validar()
  64. }// fim object GerenciadorClasseMatMed
  65.  
  66. function cadastrar() {
  67.     gPersistir( CONST_CLASSE_MAT_MED, CONST_CLASSE_MAT_MED_MAP, CONST_FACADE_PCE, CONST_CADASTRAR);
  68. }//cadastrar()
  69.  
  70. function atualizar(){
  71.     gPersistir( CONST_CLASSE_MAT_MED, CONST_CLASSE_MAT_MED_MAP, CONST_FACADE_PCE, CONST_ATUALIZAR);           
  72. }// fim atualizar()
  73.  
  74. function deletar(){
  75.    
  76.     if($('classeCodigo').value != "" &&
  77.         $('classeGrupo').value  != "" &&
  78.         $('classeSubGrupo').value != "" &&
  79.         $('classeSubSubGrupo').value != "" &&
  80.         $('classeDescricao').value != ""){
  81.        
  82.         supremoBase.deleteConfirm(
  83.             'Tem certeza que deseja deletar a Classe Mat Med: '+$('classeDescricao').value+' ?',
  84.             300,
  85.             90,
  86.             function() {
  87.                 var classeMatMedPopulada = AbstratoJ.buildObject("ClasseMatMed");
  88.                 /*
  89.                  * chama a funcao deletarClasseMatMed do server-side
  90.                  * e devolve a resposta para a funcao callback.
  91.                  */
  92.                 FacadePCE.deletarClasseMatMed( classeMatMedPopulada , function(result) { gPersistirClasseMatMedCB(result, CONST_DELETAR) } );
  93.                
  94.                 notification(CONST_NOTIFICATION_WAIT_MSG, CONST_NOTIFICATION_WAIT_CSS);       
  95.                  return true;
  96.             },
  97.             function() { return false; }   
  98.         );   
  99.     } else {
  100.         notification('Favor procurar e carregar a Classe Mat Med antes, clicando na lupa ou digitando o grupo, sub-grupo e sub-sub-grupo da classe.', CONST_NOTIFICATION_ERROR_CSS);
  101.     }                             
  102. }// fim deletar()
  103.  
  104. function gPersistirClasseMatMedRN(_obj , _action) {
  105.    
  106.     try{
  107.         if(_obj.codigoClasseSubGrupo == 0 && _obj.codigoClasseSubSubGrupo == 0
  108.             && ( _obj.contaContabil == undefined || _obj.contaContabil == null
  109.                  || _obj.contaContabil.codigo == undefined || _obj.contaContabil.codigo == null ) )     {
  110.             notification('É preciso escolher a conta contábil para a classe principal.', CONST_NOTIFICATION_ERROR_CSS);
  111.             $('codigoContaContabil').focus();
  112.             return false;
  113.         } else {
  114.             if ( ( _obj.codigoClasseSubGrupo != 0 || _obj.codigoClasseSubSubGrupo != 0 )
  115.                   && _obj.contaContabil != undefined  ) {
  116.  
  117.             notification('Os Sub-Grupos e Sub-Sub-Grupos pertecem a mesma conta contábil do Grupo Pai, logo não pode atritubir uma conta contábil especifica para eles.', CONST_NOTIFICATION_ERROR_CSS);           
  118.             $('codigoContaContabil').value = "";           
  119.             $('descricaoContaContabil').value = "";           
  120.             $('codigoContaContabil').focus();           
  121.             return false;               
  122.             }
  123.         }
  124.  
  125.         return true;
  126.     } catch(e) {
  127.         notification('Ocorreu um erro inexperado durante a '+_action+' de classe mat med, favor tentar novamente mais tarde ou entrar em contato com o administrador do sistema.', CONST_NOTIFICATION_ERROR_CSS);
  128.         alert(e.message)
  129.         return false;
  130.     }
  131.    
  132. }
  133.  
  134. /*
  135. * Função callback para o insert, update e delete.
  136. */
  137. function gPersistirClasseMatMedCB(resposta, operacao) {
  138.     if(resposta.erro==true){
  139.         notification(resposta.msg, CONST_NOTIFICATION_ERROR_CSS);   
  140.     }else{
  141.         switch (operacao) {
  142.             case CONST_CADASTRAR:
  143.                 notification('A classe Mat Med "'+resposta.vo.descricao+'" foi cadastrada com sucesso.', CONST_NOTIFICATION_SUCCESS_CSS);                           
  144.                 break;
  145.             case CONST_ATUALIZAR:
  146.                 notification('A classe Mat Med foi atualizada com sucesso.', CONST_NOTIFICATION_SUCCESS_CSS);           
  147.                 break;
  148.             case CONST_DELETAR:
  149.                 notification('A classe Mat Med foi deletada com sucesso.', CONST_NOTIFICATION_SUCCESS_CSS);                           
  150.                 break;                               
  151.         }
  152.  
  153.         /*
  154.          * chama a função para preparar a tela
  155.          * para pesquisa, da mesma form como ela foi aberta.
  156.          */
  157.         _prepareClasseMatMedScreen(ACTION_SEARCH);
  158.      }
  159. }//fim gPersistirClasseMatMedCB()
  160.  
  161. /**
  162. * Implementação da função initial do operationBar
  163. * Prepara a tela pro formato inicial.
  164. */
  165. function initial() {
  166.     var gcmm       = new GerenciadorClasseMatMed();
  167.     gcmm.validar();       
  168.     _prepareClasseMatMedScreen(ACTION_SEARCH);   
  169.     $('classeGrupo').focus();
  170. }
  171.  
  172. /**
  173. * Implementação da função search do operationBar
  174. * Prepara a tela para pesquisa através da factory e
  175. * chama a window de pesquisa, limpando o form antes.
  176. */
  177. function preSearch(){
  178.     _prepareClasseMatMedScreen(ACTION_SEARCH);   
  179.     zoom('classe_mat_med');
  180. } // fim preSearch()
  181.  
  182. /**
  183. * Implementação da função preAdd do operationBar
  184. * Prepara a tela para adicionar um novo registro
  185. * através da factory e ajusta o formulário para
  186. * essa operação.
  187. */
  188. function preAdd(){
  189.     _prepareClasseMatMedScreen(ACTION_ADD);
  190. } // fim preAdd()
  191.  
  192. /**
  193. * Prepara (monta os campos) a tela de classe Mat Med
  194. * de acordo com a acao que vai ser executada.
  195. *
  196. * @param action acao que var ser executada.
  197. */
  198. function _prepareClasseMatMedScreen(action) {
  199.    
  200.     if(action == null || action.length == 0) return;
  201.    
  202.     var _action = action.toLowerCase();   
  203.    
  204.     switch (_action) {
  205.         case ACTION_ADD:
  206.             /*
  207.              * Muda o label do botão confirmar e
  208.              * muda a operação para depois da validação
  209.              * ser possível  chamar a função correta
  210.              * através da função absUtil.callFunctionAfterValidation(...).
  211.              */
  212.             $('btnConfirmarClasseMatMed').value = "Confirmar";
  213.             $('operacao').value  = "cadastrar";
  214.        
  215.             absUtil.unregisterFunction(funcaoRegistrada);
  216.             funcaoRegistrada = absUtil.callFunctionAfterValidation( eval( 'cadastrar' ) );
  217.            
  218.             //Limpa os campos do form
  219.             clearForm();           
  220.            
  221.             /*
  222.              * Se o usuário poder cadastrar, habilita os fields
  223.              * caso contrário desabilita os campos porém coloca uma
  224.              * cor de fundo mais clara para o usuário poder visualizar
  225.              * os dados.
  226.              */
  227.             if(ADD) {
  228.                 AbstratoJ.enableFields('ClasseMatMed', true, CONST_TEXT_FIELD_CSS);         
  229.                 display('btnConfirmarClasseMatMed', true);           
  230.                 display('btnDeletarClasseMatMed', false);       
  231.  
  232.                 /*
  233.                  * Mostra o segundo fieldset pois o mesmo estava desabilitado.
  234.                  * Para o primeiro fieldset não precisa usar o display,
  235.                  * pois a todo momento ele está visivel.
  236.                  */
  237.                 display('blocoField2', true);       
  238.                
  239.                 /*
  240.                  * Desabilita o campo descricaoContaContabil
  241.                  * pois o mesmo só é para visualizacao. E só
  242.                  * vai mudar a classe para textFieldViewDisabled
  243.                  * quando uma conta Contabil for carregada.
  244.                  * Mostra a imagem do ZoomContaContabil.
  245.                  */
  246.                 $('descricaoContaContabil').disabled = true;
  247.                 $('descricaoContaContabil').className = CONST_TEXT_FIELD_DISABLED_CSS;                                           
  248.                 display('imgZoomContaContabil', true);               
  249.                
  250.                 /*
  251.                  * Retira a função associada ao evento
  252.                  * onkeydown do elemento classe Sub-Sub-Grupo
  253.                  */                                 
  254.                 $('classeSubSubGrupo')['onkeydown'] = function(){};               
  255.             }       
  256.             /*
  257.              * Esconde a mensagem de notificação pois a mesma pode está
  258.              * lá devido a alguma ação realizada anteriormente. E esconde também
  259.              * o botão delete.
  260.              */
  261.             display('notificationBox', false);     
  262.             $('classeGrupo').focus();                   
  263.             break;       
  264.         case ACTION_UP:
  265.             /*
  266.              * Muda o label do botão confirmar par Atualizar e 
  267.              * muda a operação para depois da validação
  268.              * ser possível  chamar a função correta
  269.              * através da função absUtil.callFunctionAfterValidation(...).
  270.              */
  271.             $('btnConfirmarClasseMatMed').value = "Atualizar";
  272.             $('operacao').value  = "atualizar";
  273.        
  274.             absUtil.unregisterFunction(funcaoRegistrada);
  275.             funcaoRegistrada = absUtil.callFunctionAfterValidation( eval( 'atualizar' ) );       
  276.            
  277.             /*
  278.              * Se o usuário poder atualizar, habilita os fields e aproveita
  279.              * e mostra o botão Atualizar para não precisar realizar outro if
  280.              * abaixo como no delete.
  281.              * Se ele só poder deletar e/ou visualizar, os campos
  282.              * ficam desabilitados porém com uma cor melhor para poder
  283.              * visualizar os dados.
  284.              * Porém o field descricaoContaContabil fica desabilitado de
  285.              * qualquer forma, pois o mesmo é só para visualização.
  286.              * Mostra a imagem do zoomContaContabil.
  287.              */
  288.             if(UP) {
  289.                 AbstratoJ.enableFields('ClasseMatMed', true, CONST_TEXT_FIELD_CSS);         
  290.                 display('btnConfirmarClasseMatMed', true);       
  291.                
  292.                 $('descricaoContaContabil').disabled = true;
  293.                 $('descricaoContaContabil').className = CONST_TEXT_FIELD_VIEW_DISABLED_CSS;   
  294.                 display('imgZoomContaContabil', true);               
  295.             }else{
  296.                 AbstratoJ.enableFields('ClasseMatMed', false, CONST_TEXT_FIELD_VIEW_DISABLED_CSS);                     
  297.             }
  298.    
  299.             /*
  300.              * Mostra o botão deletar só se o usuário tiver permissão
  301.              */           
  302.             if(DEL)
  303.                 display('btnDeletarClasseMatMed', true);       
  304.                
  305.             /*
  306.              * Mostra o segundo fieldset pois o mesmo estava desabilitado.
  307.              * Para o primeiro fieldset não precisa usar o display,
  308.              * pois a todo momento ele está visivel.
  309.              */
  310.             display('blocoField2', true);   
  311.             break;       
  312.         case ACTION_DEL:       
  313.             break;   
  314.         case ACTION_SEARCH:
  315.             clearForm();   
  316.            
  317.             /*
  318.              * Atribui a função ao onkeydown elemento
  319.              * para poder ser possível pesquisar via TAB.
  320.              */
  321.             $('classeSubSubGrupo')['onkeydown'] =
  322.                 function(event) {
  323.                     supremoBase.onTab(event,"searchObject('classe_mat_med','classeMatMed', 'ClasseMatMed')");
  324.                 }           
  325.             /*
  326.              * Desabilita os campos do formulário e esconde os botões.
  327.              * A pesquisa é feita atraves do clique na lupa que abre o "pop-up" de busca.
  328.              * ou a através dos campos Classe Grupo, Classe Sub-Grupo e Classe Sub-Sub-Grupo.
  329.              * Não é necessário testar se o usuário tem permissão para
  330.              * buscar, pois se o mesmo tem permissão de acesso a tela, ele poderá
  331.              * realizar buscas.
  332.              */
  333.             AbstratoJ.enableFields('ClasseMatMed', false, CONST_TEXT_FIELD_DISABLED_CSS);         
  334.             display('notificationBox', false);
  335.             display('btnConfirmarClasseMatMed', false);   
  336.             display('btnDeletarClasseMatMed', false);   
  337.             display('blocoField2', false);   
  338.             display('imgZoomContaContabil', false);   
  339.            
  340.            
  341.             /*
  342.              * Habilita esses 3 campos para o usuário poder buscar através
  343.              * dos grupos da classe digitando e depois apertando a tecla TAB
  344.              * no ultimo grupo.
  345.              */                     
  346.             $('classeGrupo').disabled = false;
  347.             $('classeGrupo').className = CONST_TEXT_FIELD_CSS;       
  348.             $('classeSubGrupo').disabled = false;
  349.             $('classeSubGrupo').className = CONST_TEXT_FIELD_CSS;           
  350.             $('classeSubSubGrupo').disabled = false;   
  351.             $('classeSubSubGrupo').className = CONST_TEXT_FIELD_CSS;                                       
  352.             break;
  353.         default:
  354.             break;
  355.     }
  356. } // fim _prepareClasseMatMedScreen()
  357.  
  358. /**
  359. * Limpa o form principal.
  360. */
  361. function clearForm(){
  362.     AbstratoJ.clearFields(CONST_CLASSE_MAT_MED_MAP);   
  363. } //fim clearForm()   
  364.  
  365. /*************************************************/
  366. /** Funções que tratam o resultado da busca de  **/
  367. /** algum objeto.                               **/
  368. /*************************************************/
  369.  
  370. /**
  371. * Tratamento do resultado da busca de Classe Mat Med
  372. * idenpendente se ela foi realizada via tab ou via window.
  373. */
  374. function classeMatMedBuscarCB(resposta){
  375.     if(resposta.erro || resposta.vo == null) {
  376.         notification(resposta.msg, CONST_NOTIFICATION_ERROR_CSS);
  377.         _prepareClasseMatMedScreen(ACTION_SEARCH);   
  378.     }else{
  379.      
  380.         AbstratoJ.fillFormWithObject(resposta.vo[0], 'ClasseMatMed');
  381.         /*
  382.          * Depois de buscado e setado os atributos da
  383.          * Classe Mat Met nos seus respectivos campos
  384.          * chama a função responsavel por montar a tela para
  385.          * atualizar e a função _prepareClasseMatMedScreen para
  386.          * montar a tela de acordo com a ação.
  387.          */
  388.         _prepareClasseMatMedScreen(ACTION_UP);       
  389.         notification('A Classe Mat Med '+resposta.vo[0].descricao+' foi carregada com sucesso.', CONST_NOTIFICATION_SUCCESS_CSS);                                 
  390.     }             
  391. }
  392.  
  393. /**
  394. * Tratamento do resultado da busca de Conta Contabil
  395. * idenpendente se ela foi realizada via tab ou via window.
  396. */
  397. function contaContabilBuscarCB(resposta) {
  398.     if(resposta.erro || resposta.vo == null) {
  399.         notification(resposta.msg, CONST_NOTIFICATION_ERROR_CSS);
  400.     }else{
  401.         AbstratoJ.fillFormWithObject(resposta.vo[0], 'ContaContabil' , 'classeMatMed');
  402.         /*
  403.          * Depois de buscado e setado nos respectivos campos
  404.          * chama a função responsavel por montar a tela para
  405.          * atualizar e a função _prepareClasseMatMedScreen para
  406.          * montar a tela de acordo com a ação.
  407.          */           
  408.         notification('A Conta Contábil '+resposta.vo[0].descricao+' foi carregada com sucesso.', CONST_NOTIFICATION_SUCCESS_CSS);                                                           
  409.        
  410.         /*
  411.          * Muda a classe da descricaoContaContabil
  412.          * para ser possível visualizar o valor.
  413.          */
  414.         $('descricaoContaContabil').className = 'textFieldViewDisabled';           
  415.     }
  416. }
  417.  

PermaLink to this entry https://pastebin.co.uk/12294
Posted by Thiago Tue 27th Mar 2007 19:25 - Syntax is JavaScript - 119 views
Download | New Post | Modify | Hide line numbers

 

Comments: 0