• Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!

Mi aplicación

Comparte tus proyectos y aplicaciones desarrolladas con Ext.

Ext.foro.Novato
Mensajes: 97
Registrado: 18 Jul 2008, 06:47
NotaPublicado: 20 Ago 2008, 07:53
Bueno lo prometido es deuda.

Podeis ver la aplicación online AQUI


Podeis descargar el código AQUI

Bueno podeis ver que tengo el código mas organizado y separado por ficheros para hacer la aplicación mas mantenible. También podeis ver como he solucionado el tema del autoajuste de las grid que varias personas preguntaban por este foro.

Como buen programador me interesa tener un código límpio para hacer buenos desarrollos y futuras ampliaciones.


Bueno ahora os planteo el problema que tengo. A ver si me ayudais a solucionarlo y puedo avanzar.

Podeis ver en el archivo app.client_window.js está la definición del código de la ventana que me da de alta los clientes.

Código: Seleccionar todo
Ext.ns('app');


app.clientWindow  = Ext.extend(Ext.Window, {
    // Constructor Defaults, can be overridden by user's config object

    layout:'fit',
    width:700,
    height:500,
    modal: true,
    closeAction:'hide',
    plain: true,
   buttons: [
        {
            id: 'button_save',
            text: 'Guardar',
            scope: this,
            handler: function () {
               this.saveClient() ;
            }
      }
        ,{
            text: 'Cerrar',
            scope: this,
            handler: function () {
               this.closeWindow();
            }
        }
   ]
   ,
   newForm: new Ext.FormPanel({
           id:'window_client_form',
           labelWidth: 75, // label settings here cascade unless overridden
           url:'clientes/save_new_client.php',
           frame:true,
           border:false,
           bodyStyle:'padding:5px 5px 0',
           width: 700,
           defaults: {width: 230},
           defaultType: 'textfield',

           items: [

              {
                   fieldLabel: 'Razón Social',
                   name: 'cli_razon_social',
                   allowBlank:false
               },{
                   fieldLabel: 'CIF/NIF',
                   name: 'cli_cif_nif',
                   allowBlank:false
               },{
                   fieldLabel: 'Dirección',
                   name: 'cli_direccion'
               },
               {
                   fieldLabel: 'Localidad',
                   name: 'cli_localidad',
                   allowBlank:false
               },
               {
                   fieldLabel: 'CP',
                   name: 'cli_cp',
                    allowBlank:false
               },
               {
                   fieldLabel: 'Provincia',
                   name: 'cli_provincia',
                    allowBlank:false
               },
               {
                   fieldLabel: 'Pais',
                   name: 'cli_pais',
                    allowBlank:false
               },
               {
                   fieldLabel: 'Teléfono',
                   name: 'cli_telefono'
               },
               {
                   fieldLabel: 'Email',
                   name: 'cli_email',
                   vtype:'email'
               },
               {
                   fieldLabel: 'Web',
                   name: 'cli_web'
               },
               {
                   fieldLabel: 'Cuenta Bancaria',
                   name: 'cli_cuenta_banco'
               }

           ]
       })
   ,


    closeWindow: function () {
      alert("entro");
      this.newForm.getForm().reset();
        this.hide();
    },

    saveClient : function () {
       this.newForm.getForm().submit({
          waitTitle:'Creando registro ...',
         //waitMsg:'Sending data...',

           success: function(f, a){
               if (a.success)
               {
                  f.reset();
                  //Creamos la ventana
                  this.hide();
                  //Recargamos la grid
                  Ext.example.msg('Mensaje del sistema', 'Nuevo cliente creado');
                  app.client_store.reload();
               }
           },
           failure: function(){
                       // código para error
           }
       });
    }
    ,
   initComponent : function () {
      //Comprovamos si se le pasa para que no de error
      if (this.record) var record=this.record.data;

        var args = {
            items : [this.newForm]
        }

        //Dependiento de tipo de ventara realizacremos una acciones o otras
      switch (this.windowType)
      {
         case 'new':
            this.title='Nuevo Cliente'
         break;
         case 'modify':
            this.title='Editar registro: ' + record.cli_razon_social;
         break;
      }
        Ext.apply(this, args);
        app.clientWindow.superclass.initComponent.apply(this, arguments);
    }
});

// register xtype to allow for lazy initialization
Ext.reg('client_window', app.clientWindow );

La idea es la siguiente. Dejar toda la programación referente al alta y modificación de los clientes encapsulada aqui.

Lo plantee así para poder usar la ventana desde diferentes sitios y funcionaria de la siguiente forma:

como veis le pasamos diferentes parámetros que me marcarán el modo de trabajar de la ventana.

win = new app.clientWindow({windowType:'new'});
win.show(this);


El parámetro windowType indicará si se tiene que crear un nuevo cliente (new), si se tiene que modificar
uno existente ( modify ), en este caso en el parámetro record, se parasé el record que contine los datos del cliente.
El parámetro "modal" lo tengo pensado para un modo de funcionamiento diferente. Ya os contaré mas adelante.

Bueno, ahora necesito vuestra ayuda ... :P

El problema está en que al clickar los botos de la ventana no hace nada. Si clicko en cerrar, el firebug dice "this.closeWindow is not a function"

Si vemos la definición de los botones:
Código: Seleccionar todo
buttons: [
        {
            id: 'button_save',
            text: 'Guardar',
            scope: this,
            handler: function () {
               this.saveClient() ;
            }
      }
        ,{
            text: 'Cerrar',
            scope: this,
            handler: function () {
               this.closeWindow();
            }
        }
   ]

Creo que el problema esta en el uso del "this" ,que dentro de la función ese this no se refiere a app.clientWindow. He mirado el tema de los scope pero no lo entiendo completamente. Entendi que el el scope es mas o menos el valor de la variable this.

Si estas trabajando dentro objeto el this es ese objeto , pero en una función interior no es asi. Las funciones no tienen this ( o scope ) y este hace referencia al objeto window del navegador y claro aqui no hay definida ninguna funcion saveClient.

No se si me explicado correctamente.

Bueno, el tema es que no se como solucionar esto. Si podeis arrojar un poco de luz estaria muy agradecido y seria bueno para toda la comunidad ya parece una programación que se use con frequencia.

Toda ayuda será bien recibida.

Un saludo.
Manolo López Torrent
I+D
LimeStudio S.L. (( http://www.limestudio.es )
Para no ver esta publicidad, debes ser usuario del Foro.
Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)


Cuixer, una forma de administrar páginas web que nunca viste!

Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 20 Ago 2008, 16:41
esta bueno, el tema del error no me sale puesto que parece ke deshabilitaste la función close de la ventana.... por lo menos en el online


saludos....y vamos progresando como todos jeje

gracias = por subir el código para los principiantes ayuda bastante

Ext.foro.Nuevo
Mensajes: 3
Registrado: 11 Ago 2008, 17:45
Ubicación: Argentina
NotaPublicado: 21 Ago 2008, 10:36
Hola, keria saber si habias podido solucionar el problema que tenias con los botones. gracias.

Ext.foro.Novato
Mensajes: 97
Registrado: 18 Jul 2008, 06:47
NotaPublicado: 21 Ago 2008, 17:49
Bueno ya he solucionado el tema de los botones y la ventana. Casi tengo terminada la gestión de clientes. Al menos ya se puede dar de alta, baja y modificar registros.

He actualizado el zip del código con los nuevos cambios.

Ale a disfrutarlos.

Otro día mas.
Manolo López Torrent
I+D
LimeStudio S.L. (( http://www.limestudio.es )

Ext.foro.Novato
Mensajes: 97
Registrado: 18 Jul 2008, 06:47
NotaPublicado: 01 Sep 2008, 14:25
Bueno señores, la aplicación está casi casi terminada. Bueno! falta algunos detalles pero la funcionalidad básica de mi ERP esta casi lista.

Podeis ver una demo [url=http://lime-studio.es/test/test12/]AQUí
Manolo López Torrent
I+D
LimeStudio S.L. (( http://www.limestudio.es )
Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 01 Sep 2008, 18:00
Muy pero muy buen trabajo Manolo. ;)
Mis felicitaciones!
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen

Ext.foro.Novato
Mensajes: 97
Registrado: 18 Jul 2008, 06:47
NotaPublicado: 02 Sep 2008, 15:02
Acabo de hacer actualizaciones y ya estan subidas.

Revisad los links que vale la pena.
Manolo López Torrent
I+D
LimeStudio S.L. (( http://www.limestudio.es )
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 02 Sep 2008, 18:07
esta re bueno ;)
el tema de los tabs abajo mezclando datos al cliente

excelente manolo
Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 02 Sep 2008, 23:35
Me impresionó el FileManager, lo hiciste vos? Lo compartió alguien? Si es así, por favor, agradecería que nos compartas el link para descargarlo.
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen

Ext.foro.Novato
Mensajes: 97
Registrado: 18 Jul 2008, 06:47
NotaPublicado: 03 Sep 2008, 02:15
Gracias por vuestro apoyo. Espero poder contribuir todavía más en estos foros con ejemplos, código y aplicaciones. También animo al resto de gente a que lo haga. Aunque tengan un pequeño proyecto pueden subir aqui sus demos y código y tal vez sus ideas o comentarios ayuden a otra gente.

El file manager no lo hize yo. Es una aplicación que encontré en los foros oficiales y pense en "trastear" un poco con ella. Aprovechando que estaba trabajando con el tema de los iframe, pues decidí meterla. [url=http://code.google.com/p/extjsfilemanager/]AQUí
Manolo López Torrent
I+D
LimeStudio S.L. (( http://www.limestudio.es )
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 05 Sep 2008, 13:18
Manolo, sabes no puedo descubrir bien tu código.....(perdona lo odioso que soy)
pero como puedes manejar las grillas? si tienes tiempo podrías hacerte un ejemplo pequeño?

no puedo dejar el ancho ni largo de estas si lo divido en 2 tabpanel la pagina

saludos...y ojala me escuches jeje

san manolo jejej

Ext.foro.Novato
Mensajes: 97
Registrado: 18 Jul 2008, 06:47
NotaPublicado: 06 Sep 2008, 01:55
No te preocupes, leer código de otros es muy complicado y cada uno tiene sus métodos.A que te referieres con lo de que no sabes como manegar las grillas? Mira a ver si puedes especificar un poco o me dices que parte del código es y te lo explico con mucho gusto.

Te comento un poco por ejemplo el tema de las grids, por si te sirve de ayuda. Aquí lo que hago es tener las definiciones de los stores en un archivo diferente ( app.store.js ) luego las selecciono cuando quiero con "Ext.StoreMgr.get('gridClientStore')". No se si eso te puede servir de ayuda.
Manolo López Torrent
I+D
LimeStudio S.L. (( http://www.limestudio.es )
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 08 Sep 2008, 19:51
mira..por ejempo
tengo 2 Panel que se encuentran llamados en otro Panel (Panelview)...a traves de items:[ PanelEmpresa, PanelContacto]
y este Panelview se encuentra llamado en un viewport con tipo layout : 'border'
el tema es que aparece en el centro pero no utilizando la totalidad del panelview...

ojala me entiendas....sino te lo explico con codigo


Código: Seleccionar todo
  var Panelview= new Ext.Panel({
       region:'center',
      border: false,
      //layout: 'fit' ,
      frame: true,
       deferredRender:false,
       //activeTab:0,
      //margins:'3 3 3 0',
       enableTabScroll:true,
       items: [ PanelEmpresa,PanelContacto ]
   });

Código: Seleccionar todo
  var viewport = new Ext.Viewport({
      layout:'border',
      items:[ PanelNorth  ,PanelWest, Panelview]
         
      
   });
Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 08 Sep 2008, 21:38
Creo que en tu Panelview tendrías que descomentar el atributo layout: 'fit' y en, por ejemplo, PanelEmpresa le asignas el atributo forceFit: true.

Creo que con eso se te tendría que solucionar.

PD: Cuando pongas código, la etiqueta no es codigo sino code. ;)
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen
Avatar de Usuario
Ext.foro.Miembro
Mensajes: 152
Registrado: 02 May 2008, 12:36
Ubicación: Santiasko, Chile
NotaPublicado: 09 Sep 2008, 14:00
tampoco funciono........no logro entendeder como funciona ...te muestro el codigo...si lo corres en firefox funciona sin problemas, si corres el scroll a la izq aparecen todas las columnas , pero en ie ni siquiera aparece el scroll

Código: Seleccionar todo
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Grid3 Example</title>


    <!-- Hoja de estilos Ext -->
<link rel="stylesheet" type="text/css" href="js/lib/ext/resources/css/ext-all.css" />
<!-- Adaptador Base Ext -->
<script type="text/javascript" src="js/lib/ext/adapter/ext/ext-base.js"></script>
<!-- Librería general Ext -->
<script type="text/javascript" src="js/lib/ext/ext-all-debug.js"></script>


<script>


Ext.onReady(function(){

    Ext.QuickTips.init();
     
   var myDataContacto = [
        [ 'jmaronez@mbross.com','Juan Mardonez','123','123','123','123','123','123','123','123','123','123','123','123' ,'123','123','123'],
        [ 'mibanez@prosegur.cl','Maria Ibañez' ,'123','123','123','123','123','123','123','123','123','123','123','123','123','123','123' ],
        [ 'stelargibson@gmail.com','Stelar Gibson','123','123','123','123','123','123','123','123','123','123','123','123','123','123','123' ],
        [ 'llopez@hotmail.com','Luisa Lopez','123','123','123','123','123','123','123','123','123','123','123','123','123','123','123']
    ];
      
   var storeContacto = new Ext.data.ArrayReader({},
      [
         {name: 'fecha_comp'}, 
         {name: 'tipo_movimiento'} ,
         {name: 'n_comprobante'} ,
         {name: 'tipo_doc'},
         {name: 'estado'} ,
         {name: 'monto_bruto'} ,
         {name: 'monto_neto'} ,
         {name: 'imp_ret'} ,
         {name: 'cuenta_contable'} ,
         {name: 'tipo_rechazo'} ,
         {name: 'fecha_doc'} ,
         {name: 'n_documento'} ,
         {name: 'rut_proveedor'} ,
         {name: 'glos_documento'} ,
         {name: 'usuario'} ,
         {name: 'fecha_ingreso'} ,
         {name: 'hora_ingreso'} 
      ]
   );
   
   /************************************************************
       * Crea la grilla
       ************************************************************/
 
   var gridContacto = new Ext.grid.GridPanel({
       store: new Ext.data.Store({
            reader: storeContacto,
            data: myDataContacto
         }),
       cm: new Ext.grid.ColumnModel([
         {header: "Tipo movimiento", width: 60, dataIndex: 'tipo_movimiento', sortable: true},
         {header: "Nº Comprobante",  dataIndex: 'n_comprobante', sortable: true} ,
         {header: "Tipo documento",  dataIndex: 'tipo_doc', sortable: true},
         {header: "Estado",  dataIndex: 'estado', sortable: true},
         {header: "Monto Bruto"  ,dataIndex: 'monto_bruto', sortable: true},
         {header: "Monto Neto" , dataIndex: 'monto_neto', sortable: true},
         {header: "Imp/Ret",   dataIndex: 'imp_ret', sortable: true},
         {header: "Cuenta Contable",  dataIndex: 'cuenta_contable', sortable: true},
         {header: "Tipo Rechazo",   dataIndex: 'tipo_rechazo', sortable: true},
         {header: "Fecha doc",   dataIndex: 'fecha_doc', sortable: true},
         {header: "Nº Documento",  dataIndex: 'n_documento', sortable: true},
         {header: "Rut Proveedor",   dataIndex: 'rut_proveedor', sortable: true},
         {header: "Glosa Documento",  dataIndex: 'glos_documento', sortable: true},
         {header: "Usuario",   dataIndex: 'usuario', sortable: true},
         {header: "Fecha Ingreso",  dataIndex: 'fecha_ingreso', sortable: true},
         {header: "Hora Ingreso",   dataIndex: 'hora_ingreso', sortable: true}
         
      ]),
      //width:600,
        height:300,
        frame:true ,
      stripeRows: true,
      loadMask: {msg:'Cargando Datos...'}
   });
      
      
   panel2 = new Ext.Panel({
      region:'center',
      title: 'MANTENEDOR DE BANCOS',
      iconCls: 'flag',
      deferredRender:false, 
      items: [ gridContacto]
   })

   
   // Panel Contenedor Imágenes Header
    var PanelHeader = new Ext.Panel({
       contentEl: 'north',
       border: false,
       height: 32,
       bodyStyle: 'background-color:#e0e7f7'
    });

   

   var PanelIzquierdo = new Ext.Panel({
      region:'west',
      id:'west-panel',
      title:'Opciones',
      split:true,
      width: 200,
      minSize: 175,
      maxSize: 400,
      collapsible: true,
      layout:'accordion',
      layoutConfig:
      {
         animate:true
      },
      items: [{
            title:'Buscar Local',
         contentEl: 'form2',
         frame: true,
            border:false,
         //collapsed: true,
            iconCls:'find'
         }]
   });
   
   
   view = new Ext.Viewport({
         layout:'border',
         items : [PanelIzquierdo, panel2]
   });
   

});
</script>

</head>
<body> 
<div id="form2"> <!-- Formulario de búsqueda 2-->
      <form name="form2" method="post">
         <table border=0>
            <tr><td>Local</td><td><input type="text" name="cod_empresa"> </td></tr>
            
            <tr><td align=center colspan=2>
             <input type="button" value="Consultar">
               </td>
            </tr>
         </table>
      </form>
   </div>

</body>
</html>

ojala me pudieses ayudar


saludos..y muchas gracias
Siguiente

Volver a Ejemplos y proyectos





  • Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!