miércoles, 29 de junio de 2011

Unificar Documentos de identidad en un solo campo

Luego de varios intentos de registrar en BD documentos de identidad un buen amigo me paso un código que probablemente solucione el tema de unificar criterios en cuanto a números de documentos de identificación para una estructura de datos que contendrá información de personas.. Típico que necesitas registrar en tu aplicación datos personales, incluyendo documentos legales de identificación, normalmente podrías generar un solo campo tipo text para meter ahí lo que sea, o crear diferentes campos para guardar la info del documento de identidad (Cédula de identidad, pasaporte, etc)

Bien hace un tiempo me mandaron esta solución pero no sabia donde la había dejado, la volví a encontrar me pareció interesante y la voy a aplicar en un proyecto nuevo.. prueben este PHP y verifiquen lo generado, la idea es generar un único campo para guardar el dato de la identificación de la persona que se genera...
$str = "V158202995";
echo 'cadena enviada= '.$str;
$arr2 = str_split($str, 1);
foreach ($arr2 as $array):
       echo 'valor= '.$array.' codigo ascii= '.ord($array);
       $asci.=ord($array);
endforeach;
echo 'cadena resultante en codigo ascii= '.$asci;
$asci2 = str_split($asci, 2);
foreach ($asci2 as $array):
       echo 'valor en codigo ascii= '.$array.' valor normal= '.chr($array);
       $asc.=chr($array);
endforeach;
echo 'cadena reconstruida= '.$asc; 

el resultado de lo ejecutado sera asi:
cadena enviada= V158202995
valor= V codigo ascii= 86
valor= 1 codigo ascii= 49
valor= 5 codigo ascii= 53
valor= 8 codigo ascii= 56
valor= 2 codigo ascii= 50
valor= 0 codigo ascii= 48
valor= 2 codigo ascii= 50
valor= 9 codigo ascii= 57
valor= 9 codigo ascii= 57
valor= 5 codigo ascii= 53
cadena resultante en codigo ascii= 86495356504850575753
valor en codigo ascii= 86 valor normal= V
valor en codigo ascii= 49 valor normal= 1
valor en codigo ascii= 53 valor normal= 5
valor en codigo ascii= 56 valor normal= 8
valor en codigo ascii= 50 valor normal= 2
valor en codigo ascii= 48 valor normal= 0
valor en codigo ascii= 50 valor normal= 2
valor en codigo ascii= 57 valor normal= 9
valor en codigo ascii= 57 valor normal= 9
valor en codigo ascii= 53 valor normal= 5
cadena reconstruida= V158202995
Luego se guarda en BD el ascii generado... Podrias generar un metodo para hacer la transformacion y el reverso del numero y lo invocas antes de llamar al metodo save()

Y listo!

martes, 14 de junio de 2011

Exportar a Excel en Symfony

Típico que necesitas exportar a una hoja de calculo el resultado de alguna consulta..
bien, es simple, solo debes indicar en el action que no usaras el layout y que vas a cambiar el tipo de salida de la respuesta..
Primero, supongamos que vamos a enviar a una hoja de calculo nuestro Index, podriamos generar un action para realizar esta tarea.
En el index agragamos un vinculo a nuestra accion

<a class="ods" href="<?php echo url_for('item/indexExport') ?>">Exportar</a>

Y la accion seteamos el layout en false y modificamos el contentype del response...
public function executeIndexExport(sfWebRequest $request)
  {
   $this->items = Doctrine_Core::getTable('Item')
      ->createQuery('a')
      ->orderBy('a.categoria_id,a.descripcion')
      ->execute();
   $this->setLayout(false);
   $this->getResponse()->setContentType('application/msexcel');
   $this->setTemplate('index');
  }

luego... ejecutas, pruebas y guardas el archivo generado y listo!

lunes, 6 de junio de 2011

Comenzar un proyecto en Symfony 1.4 (part.2)

bien.. ya sabemos como comenzar un proyecto Symfony
Ahora veamos el resto de los pasos.. comencemos desde el inicio:
$ cd /var/www/
$ mkdir -p proy
$ cd proy/
$ mkdir -p lib/vendor
$ cd lib/vendor
$ tar zxpf /home/usuario/Escritorio/symfony-1.4.4.tgz 
$ mv symfony-1.4.4/ symfony
$ symfony -V
$ symfony generate:project proy
Verifica el post para crear el Comendo Symfony
PARA SEGURIDAD CONTRA ATAQUES XSS Y CSRF
symfony generate:app --escaping-strategy=on --csrf-secret=ClaveUnicaSecreta frontend
Ahora creamos el Virtual Host para nuestro proyecto proy

En el navegador
http://localhost.proy/
y para ver la aplicacion funcionando en modo desarrollo
http://localhost.proy/frontend_dev.php

Creando al estructura de datos
$ sudo su
# su - postgres
$ psql
postgres=#  create database proy_db with owner u_test;
postgres=#  CREATE TABLE persona
(
  id serial NOT NULL,
  nacionalidad character(1),
  ci numeric(10),
  nombre character varying(100) NOT NULL,
  apellido character varying(100) NOT NULL,
  sexo character(1),
  fecha_nac date,
  created_at timestamp without time zone,
  updated_at timestamp without time zone,
  CONSTRAINT persona_pkey PRIMARY KEY (id),
  CONSTRAINT persona_ci_key UNIQUE (ci)
);
ALTER TABLE persona OWNER TO u_test;
postgres=#  \q
$ exit
# exit
/// Estando nuevamente en /var/www/proy ///
$ symfony configure:database "pgsql:host=localhost;dbname=proy_db" u_test 123456
$ symfony doctrine:build-schema
//SI TIENES CAMPOS AUTO ADMINSTRABLES created_at updated_at
//debes ejecutar el comando para el schema
//buscar en el schema los campos created_at updated_at ELIMINALOS y colocar al inicio de la clase del schema actAs: { Timestampable: ~ }
Persona:
connection: doctrine
tableName: persona
actAs: { Timestampable: ~ }
columns:
id:.....
.....
luego ejecutas:
$ symfony doctrine:build --model
$ symfony doctrine:build --filters
$ symfony doctrine:build --forms
o en todo caso
$ symfony doctrine:build --all --no-confirmation
//modificar proy/lib/form/doctrine/PersonaForm.class.php y agregas lo siguiente dentro del metodo configure()
public function configure()
  {
 unset($this['created_at']);
        unset($this['updated_at']);
        .....
        ...
        ..
  }

De la sigueinte manera se crean CRUD (CREATE,RETRIEVE,UPDATE,DELETE) para los modulos de la aplicacion
// symfony doctrine:generate-module --with-show --non-verbose-templates aplicacion modulo Modelo
en nuestro caso el CRUD para la clase persona
$ symfony doctrine:generate-module --with-show --non-verbose-templates frontend persona Persona

y ahora a probar...
http://proy.localhost/frontend_dev.php/persona

Comenzar un proyecto en Symfony 1.4

Aqui dejo unos sencillos pasos para comenzar a configurar un proyecto con symfony 1.4 con ORM Doctrine

Descargar la version de symfony que desee utilizar
ej. symfony 1.4.4

Url de consulta
http://www.symfony-project.org/jobeet/1_4/Doctrine/es/01

Para descargar la version 1.4.4
http://www.symfony-project.org/installation/1_4
Descargar symfony-1.4.4.tgz

Crear proyecto
$ cd /var/www/
$ mkdir proy
$ cd /proy
$ mkdir -p lib/vendor
$ tar zxpf /home/usuario/Escritorio/symfony-1.4.4.tgz
$ mv symfony-1.4.4/ lib/vendor/symfony
Verifica la version y la configuracion
$ php lib/vendor/symfony/data/bin/symfony -V
$ php lib/vendor/symfony/data/bin/check_configuration.php

Para acceder al symfony q estamos instalando es necerio ejecutar
$ php lib/vendor/symfony/data/bin/symfony -- COMANDOS --
Para mejorar esto crearemos un comando en el shell:
$ vim $HOME/.bashrc
// o usas gedit
$ gedit $HOME/.bashrc

agregamos al final del archivo
alias symfony='./lib/vendor/symfony/data/bin/symfony'
Guardamos los cambios y vamos a OTRA CONSOLA.. para verificar los cambios
NOTA: esta linea de comando funciona solo para los proyectos q posean la carpeta lib/vendor/symfony

para probar el comando
$ cd /var/www/proy
$ symfony -V
Ahora puedes comenzar a hacer todo lo correspondiente con tu proyecto...

NOTA: la versión q se instala por defecto utiliza el ORM Doctrine