Facturación en OpenERP

Un par de opciones en el tema de facturación en OpenERP que confunden un poco son la de facturación desde albaranes o facturación desde pedidos. Incluso, pueden marcarse ambas y seleccionarse en ese caso cual tipo de facturación se hará por defecto. Para mis gustos, sería ideal que pudiéramos definir el tipo de facturación cuando creamos un nuevo cliente pero esa opción no está habilitada sin tener que insertar algunas líneas de programación adicional. Por ahora y volviendo al tema de facturación, tenemos lo siguiente:

Facturación desde Pedidos de Venta: Con esta opción podemos facturar el pedido de ventas del cliente e incluso podemos hacer modificaciones a la factura final por lo que no es mucho problemas si el pedido de ventas se modificó sobre la marcha con un par de ítems de más o de menos. Muchos de nuestros clientes requieren por su estructura administrativa que la factura sea estrictamente similar a su orden de compra por lo que es nuestra “opción por defecto” en OpenERP. Cuando se selecciona esta opción, el botón de “crear factura” aparece sobre el pedido de ventas.

Facturación desde albaranes de salidas: Muchas compañías utilizan este método de facturación para un mayor control de su inventario y lo que se despacha y factura desde el. Básicamente es un sistema de “facturo lo que voy despachando” pero tiene en contra que muchos clientes, como lo mencioné anteriormente, no aceptan facturas parciales de una misma orden de compra. Cuando se selecciona esta opción, el botón de crear factura se encuentra en la nota de entrega (albarán de salida).

Abrir automáticamente la página de pestaña nueva al iniciar Firefox 13

Firefox ha implementado una nueva página de “nueva pestaña”que es bastante funcional y verdaderamente parecida a la página que navegadores como Safari, Chrome y Opera implementaron hace tiempo atrás. Sin embargo, con sus pro y sus contras, sigo siendo fiel seguidor de Mozilla (tanto Firefox como Thunderbird).

Ahora bien, si queremos que esta página de “nueva pestaña” se convierta en nuestra página de inicio por defecto, solo debemos seguir un sencillo paso. Abrimos nuestro panel de opciones (Botón Firefox -> Opciones -> Opciones) y colocamos como nuestra página de inicio lo siguiente:

about:newtab

Y en el campo “Cuando Firefox inicie:” abrimos el menú desplegable y seleccionamos “Mostrar mi página de inicio

Ya con esto tendremos esa nueva página funcional cada vez que abramos nuestro navegador.

Trabajar con “Checkboxes” y Custom Post Type en WordPress

Con Custom Post Type podemos realizar infinidad de tipos de Posts y recientemente, mientras trabajaba en una aplicación de reportes, tuve que añadir algunos checkboxes donde el cliente pudiera definir algúnas variables que no se podían manejar con input type="select" por ejemplo.

Sin embargo, hay que aplicar un pequeño truco con los checkboxes ya que se debe “rescatar” la variable del $_POST y guardar el valor en otra variable.

Generalmente, si trabajamos con input type="text", textarea o input type="select" podemos guardar las variables de la siguiente manera:

add_action('save_post', 'save_details');
function save_details() {
global $post;
$my_var_1 = "my_var_name";
update_post_meta($post->ID, $my_var_1, $_POST[ $my_var_1 ]);
}

Donde my_var_name es el nombre de la variable enviada por un input y $_POST[ $my_var_1 ] rescata el valor de esa variable.

Ahora, si trabajamos con checkboxes, antes de la función update_post_meta debemos hacer comprobar si el checkbox fué marcado y luego rescatamos la variable. Por ejemplo:

add_action('save_post', 'save_details');
function save_details() {
global $post;
$my_chckbx_name = "option_a";
$my_option_a = 0;
// Pregunto si $my_var_name existe
if( isset( $_POST[ $my_var_name ] ) ) {
// Si existe, le asigno el valor a $my_chckbx
$my_chckbx = $_POST[ $my_var_name ];
// Pregunto si $my_chckbx tiene el valor enviado por el checkbox marcado
if ( $my_chckbx == "ON" ) {
// Si el checkbox fué marcado, le asigno el valor de 1 a la variable $my_option_a y la guardo luego
$my_option_a = 1;
} else { $my_option_a = 0; }
}
update_post_meta($post->ID, $my_chckbx_name, $_POST[ $my_option_a ]);
}

El código para generar el checkbox sería:

<?php function my_checkbox() {
global = $post;
$my_post_metas = get_post_custom( $post->ID );
$my_option = "my_option_a";
$my_checkbox = $my_post_metas[ $the_option ][ 0 ];
$my_vars = array( 0 =&gt; array( $my_option, $my_checkbox, "option a" ) );
// Ahora coloco el checkbox en HTML
<input
type="checkbox"
name="<?php echo $my_vars[ 0 ][ 0 ]; ?>"
value="ON"
<?php if( $my_vars[ 0 ][ 1 ] == 1 ) {
echo 'checked="checked"';
} else { // Do Nothing
} ?> />
<?php } ?>

De vuelta a WordPress.com

Sin muchos detalles que dar, trate de hacer un cambio de mi dominio edwinvaldez.com pero por tenerlo con GoDaddy.com, no pude hacerlo ya que ellos se creen dueños de la internet y una vez que se registra un dominio con ellos, es casi imposible recuperarlo.

Pero mientras sigo la batalla, vuelvo a postear desde mi cuenta de WordPress.com la cual es siempre fiel y le hice una renovación con el tema “Chunk” de Tran N.

Hacer un calendario “sin” un calendario

Si eres de los que diseña un sitio en WordPress y no te gusta una “sidebar” automática por el hecho de que prefieres colocar tu propio contenido, entonces has llegado a un buen lugar para discutir algunas aplicaciones de sidebars manuales.

Una de las cosas que uno siempre quiere tener en una página de noticias es un calendario de próximos eventos. He encontrado una manera sencilla de incluir eventos futuros y ordenarlos como calendarios en el front-page del sitio y crear la actividad como un post más. Solo que cada uno de estos posts están categorizados como “calendario” y la fecha de publicación la cambio al día en que se realizará el evento (Lado derecho superior -> Opciones de “Publicar” -> Publicar Inmediatamente -> “Editar”). Inclusive, si se tiene una hora específica, se puede hacer la publicación futura con todos los datos necesarios.

Luego, con un WP_Query() se extraen los datos del post.

Se debe tomar en cuenta que como argumento de búsqueda, se debe utilizar 'post_status=future' y 'order=DESC' para que de esta manera obtengamos los resultados ordenados de “más próximos” a “mas lejanos”. Incluso, con otro WP_Query() podemos mostrar los últimos eventos ya realizados y mostrarlos antes de el próximo a realizarse.

$my_query = new WP_Query('post_status=future&order=DESC&showposts=5');
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID; ?>
<?php echo the_date(); ?>
<?php echo the_title();
echo 'here';?>
<?php endwhile;?>

Como no repetir posts que ya aparecen en el front-page.php?

Con la nueva versión Release Candidate 3.0 de WordPress, se puede utilizar una página de inicio diferente a la contenedora del lazo principal y de esta manera poder personalizar de mejor manera nuestro sitio web.

Sin embargo, hoy estuve colocando algunas cosas en la página principal de uno de mis clientes y al inicio de esta, se encuentran una especie de “Titulares” (con etiqueta Titulares) que luego no quisiera mostrar nuevamente en el resto de la página (en una sección de la página muestro otros resultados de diversas categorías incluyendo “Titulares”). Luego de una búsqueda insaciable y de probar con diferentes opciones, llegué al sitio más lógico donde se debe llegar cuando se necesita ayuda con algún argumento de una función: WordPress Codex.

Con el argumento 'post__not_in' => array() es posible obtener resultador de un WP_query() sin los elementos específicos que le indiquemos al lazo. En mi caso, en cada “query” voy armando el arreglo de los elementos que estoy mostrando para así evitar mostrarlos nuevamente. El código es algo parecido a lo siguiente:

$titleImg = new WP_Query();
$titleImg->query('cat=3&showposts=5');
$i = 0;
$mainPostID = array();
while ($titleImg->have_posts()) : $titleImg->the_post();
$firstImage = ev_get_firstimage();
$curPostID = $post->ID;
$mainPostID[$i] = $curPostID;
$i++;
... Resto del código

Luego, llamo al arreglo $mainPostID en el próximo query:

<?php
$args = array (
'showposts'=>4,
'cat'=>-7,
'post__not_in'=>$mainPostID,
);
$miniNews = new WP_Query();
$miniNews->query($args);
while ($miniNews->have_posts()) : $miniNews->the_post();

Esta es una manera práctica de evitar posts iguales cuando no tenemos una separación por categorías en cierto Query.

XML en PHP o PHP en XML?

Hace unos días atrás, mientras configuraba Cu3er a través de el archivo XML que este trae, me surgió la duda si era posible automatizar este código con algunas funciones de PHP e inclusive, enlazarlo con WordPress para poder utilizar las funciones mismas de WP. Luegos de algunas horas de búsqueda y de intentos fallidos, supe que la respuesta a ambas preguntas era ¡Si se puede!.

Inicialmente, para que un archivo XML pueda utilizar PHP, el archivo mismo debe ser un archivo PHP. En este caso, el típico config.xml de Cu3ber pasó a ser wp_config_cu3er.php. Luego, al inicio del archivo, se debe colocar el header para que sea reconocido como un archivo XML:

header('Content-type:text/xml; charset=utf-8');

En mi caso, todo el archivo está en PHP y con echo´s he definido las etiquetas XML. No he probado hacerlo con funciones PHP seccionadas y dejar lo demás en texto. Finalmente, para que pueda trabajar con las funciones de WordPress, se debe incluir luego del header, una llamada al archivo de configuración inicial de WP:

include('wp-config.php');

Sin embargo, probé el archivo varias veces pero no lograba correrlo desde la carpeta de mi tema hasta que di con una solución bastante sencilla: lo coloqué en el directorio principal de WordPress y lo enlacé desde el Cu3er llamandolo a su ubicación por URL:

http://www.example.com/wp_config_cu3er.php

De esta manera, el app de Cu3er funciona de maravilla y no se siente ningún retraso por esta configuración. Recomiendo que antes de modificar el archivo con funciones, a este se le coloque el header de XML y la llamada al wp_config y se suba al directorio. Una vez allí, actualizar cada modificación y chequear el archivo corroborando que aparezcan todas las etiquetas que queremos sin errores. Cualquier minimo error que tenga el archivo, hará que Cu3er no funciones apropiadamente. Para la prueba del archivo, prefiero hacerlo en Mozilla Firefox ya que este define de mejor manera que función tiene algún error y si no aparece directamente en el navegador, en la opción de “codigo fuente” siempre aparece la linea que quebró al código.

Luego de unos días de silencio

Luego de unos días en silencio, he realizado algunas modificaciones en WordPress para adaptar el tema al medio noticioso. Con la ayuda de Codex (el área de WordPress.org para desarrolladores) y buscando una gran cantidad de información de distintos diseñadores, las cosas marchan bien aunque es un poco frustrante entender de buenas a primeras la programación completa que ofrece la plataforma.

Sin embargo, con algo de paciencia y practica, se llega a modificar el código rapidamente. Para esto, seguí algunos pasos prácticos dados por el amigo Nick La en su blog “Web Designer Wall” (el mismo creador de BestWebGallery. Básicamente se trata de realizar todo el diseño en una hoja HTML de trabajo (yo la llamé workfile.html) y luego llevar este código a las diferentes partes de la estructura del tema de WordPress – header.php | index.php |footer.php -.

Para complementar un poco el código, utilicé algunas funciones ya definidas por WP en Codex. De esta manera, es totalmente personalizable con la hoja de estilos CSS cada uno de los elementos de la página. En entradas siguientes voy a colocar algunos ejemplos de los códigos utilizados y también de como mudar todo el sitio a otro host.

Publicado con WordPress para BlackBerry.

Segunda prueba desde el Blackberry

Esta es mi segunda prueba desde el blackberry con algunos cambios en el software de WordPress para estos dispositivos. Aun no encuentro como cambiar la apariencia del blog (cuando es hospedado en WordPress) para navegadores móviles.

Quiero probar algunas bondades multimedia que ofrece el software y ver como se ve desde el escritorio. Estoy incluyendo un video y una imagen para probar el auto resizing de WPM.

Nota posterior desde versión de escritorio: El video no se cargó. Pesaba 7mb y en dos oportunidades la aplicación móvil generó error. No hay una manera sencilla de que las imágenes queden centradas desde WPM. Se debe retocar luego desde el escritorio del WPPC o en su defecto, una vez publicada la entrada, volver a abrirla desde WPM y editar las líneas de código HTML que aparacen en el lugar donde debe ir la imágen y agregarle los atributos deseados como eliminar el marco, centrar, cambiar el tamaño o colocar el código dentro del texto para que quede embebida dentro del texto. Finalmente, al buscar el archivo multimedia en el BlackBerry, se debe pulsar la tecla RIM y luego “seleccionar” en lugar de simplemente hacer click sobre la imagen.

Actualización 03JUN2010 -> Se puede llevar la imagen a cualquier lado del post cambiando los valores CSS en la línea de edición de WPM.

Probando Drive Tech versión móvil

Ya completa la versión oficial de DriveTech.com.ve para navegadores “normales”, estoy haciendo una “edición de bolsillo” para navegadores móviles, orientado principalmente a los navegadores actuales incluidos en los BlackBerry, Htc y Nokia. Ya esta formalmente abierta y solo estoy en la generación y montaje de una base de datos para hacer busqueda de información de interés para nuestros clientes. Por defecto, al navegar hacia http://www.drivetech.com.ve desde un dispositivo móvil, la página debería reconocer de inmediato el navegador y guíar al usuario hasta la versión de bolsillo (DriveTech : mobile).

La redirección está hecha en PHP y el código base lo encontré en una referencia de Julio Cesar Sandoval. El código ha sido probado en un BlackBerry Javelin (8900) con firmware 5.0.0.509 y un HTC Tattoo con Google Android y hasta ahora marcha bien.

Actualización 18:20 -> En el iPhone se ve perfecto pero no trabaja el anchor de Ir Arriba en cada página…

Adaptando WordPress

A partir de hoy, comienzo un pequeño proyecto de adaptar WordPress a la web de unos amigos para documentar noticias del ámbito deportivo en la región.  Con algunos cambios en la estructura HTML y CSS de la versión descargable de WP, quizás la tarea no sea muy complicada aunque una vez que comiencen las pruebas, las iré publicando para discutirlas con aquellos que tengan aplicaciones similares. Quizás para algunos ya sea un pan comido este tipo de adaptaciones lo cual es importante para conocer comentarios y resultados en estas prácticas.

WordPress sigue siendo actualmente una herramienta muy potente, manejable y flexible lo cual nos brinda esa oportunidad de configurarla a nuestro mejor estilo.

Ya veremos que nos deparan los días proximos…

www.drivetech.com.ve

Vista PreviaNo hay nada mejor para comenzar un blog que no tener mucho que decir.

Anoche, un poco tarde, terminé mi primer proyecto de página web luego de 10 años de conocimientos en páginas de intranet, código HTML para terceros, ayuda en algunas funciones PHP para sitios de amigos y algunos inventos con CSS. Un diseño bastante sencillo, con un par de películas SWF, algunos archivos esenciales para la descarga de los clientes y un par de links a Adobe Reader Installer. Las imágenes estan almacenadas en Picasa (de Google) y a través de un código sencillo de “embedding” se pueden integrar a la página con Cooliris (uno de los complementos de Firefox que mas me gustan). El sitio esta siendo probado con Firefox 3.6.3 e Internet Explorer.

El sitio esta programado en HTML con algunas líneas de PHP (junto con MySQL) y los estilos estan definidos bajo el estándar CSS. Toda está editado en Adobe Dreamweaver CS4 y las imágenes son optimizadas con Adobe Fireworks CS4 (utilizo este programa desde su versión 3 de Macromedia y pasando por su versión MX, hasta el año 2005 cuando Macromedia fué adquirido por Adobe y comenzaron las versiones Creative Suite X – CS3/CS4/CS5).

Las películas SWF son editadas en SwishMax Ver1.0.2007 (cualquiera que me conozca de mi epoca universitaria sabe mi gusto por este programa desde sus inicios con SwhishLite) y la paleta de colores está definida en Adobe Kuler (una interesante aplicación flash en línea).

Algunos recursos adicionales son el famoso Block de Notas de Windows XP (el procesador de texto mas estable que conozco!), FTP Commander de Internet-Soft Corp, y el complemento ScreenGrab para Mozilla Firefox (muy útil para tomar pequeñas imágenes – thumbnails – de una página web desde el progpio navegador).