Me cago en vos, AFIP

El lunes a las 8am empecé mis trámites de (re)empadronamiento al Monotributo. Recién a las 12hs pude saber que ese día fracasaría, porque las "pruebas" de mi domicilio fiscal no eran válidas.

El martes, flamantemente concubinado con Nati para que me sirvan las facturas a su nombre, después de esperar que el burócrata que te saca la fotito y te hace firmar en el sensor (datos "biométricos", le llaman, pomposos) se parara cada 5 minutos, jugara con el aire acondicionado a su espalda y mandara mensajitos por celular mientras la gente de la cola (yo incluído) se inflaba de rabia, pude obtener la inscripción y la clave, la rebuscada combinación alfanumérica "hola1234", que es igual para todos (podrían, ya que están, imprimirla en el formulario, cierto?).

Se suponía que con ese trámite de sólo 2 mañanas, al otro día (porque la era digital lleva su tiempo) podría terminar los trámites via web. Pero se suponía nomás, porque la plataforma virtual-> de AFIP no funciona con navegadores que no sean Internet Explorer. En Firefox (o cualquiera de los navegadores libres) uno hace click y el formulario nunca se envía.

System Message: WARNING/2 (<string>, line 25)

Explicit markup ends without a blank line; unexpected unindent.

Esto es, por supuesto, porque está programada fuera de estándares. Vean qué boludez:

Element referenced by ID/NAME in the global scope. Use W3C standard document.getElementById() instead.

Este chorizo tira Firebug:

System Message: WARNING/2 (<string>, line 37)

Explicit markup ends without a blank line; unexpected unindent.

Es un doble esfuerzo indignarse con los burócratas (que llenan formularios de papel o scripts javascript erróneos) y también con los que en la cola, indignados, bociferan en voz alta frases noventistas como "esto no va a mejorar hasta que lo privaticen", buscando alguna complicidad, imagino.

Pero me niego a naturalizar que las cosas del Estado deban andar mal. No sólo porque las pagamos entre todos (mucha veces, más de lo que valen) sino porque necesitamos un Estado que funcione para que todas las demás cosas funcionen bien.

El discurso (y el avance) privatizador, comprobadamente perjudicial para el pueblo, ya no tiene tanta cancha como antes. Pero es hora de que empecemos, como Estado, pero sobre todo como ciudadanos concientes de que lo necesitamos, a sanarlo, quererlo, exigirlo y fortalecerlo.

Charla: python a los bifes

Víctima de la ausencia de tiempo y la mala costumbre, a ultísimo momento terminé de preparar las diapositivas para la charla que dí hoy en el marco de las Conferencias de Ingeniería en Computación, Electrónica y Biomédica 2010 de mi facu.

La charla se tituló Python a los bifes: casos reales de aplicación en Ingeniería. Las diapositivas se pueden ver acá.

(F11 para ver a pantalla completa)

El resúmen de dos líneas decía:

Basta de hablar y hablar de lo bueno que está Python: en la cancha se ven los pingos. Mostraré problemas reales de la carrera resueltos con este poderoso (y simple) lenguaje. Trabajos de Sistemas de Computación, Sistemas Operativos II, Paradigmas de programación y mi proyecto integrador en curso

Hubo unas 40 personas, y estuvo, creo, bastante bien. Como no practiqué (me siento estúpido hablando solo, y mi novia me mira desorbitada — aburrida — cuando le hablo de computadoras) no calculé bien el tiempo y los ejemplos, que era el quid de la cuestión, fueron a paso raudo. Pero creo que a la gente le gustó y ojalá alguno se sienta motivado para leer el tutorial de python y sumarse a PyAr.

Fuentes

La presentación fue escrita en RST y procesada con la herramienta rst2s5.

Tiene una licencia cc-By-NC-SA. Podés descargar todos los fuentes con las imágenes y algunos ejemplos de este tar:

Integración de DineroMail en SimpleCart (js)

Continuando con el artículo anterior hay tener en cuenta que cuando decimos "sistema de e-commerce simple" implica que tiene que ser simple también para el comprador.

En Argentina (y varios otros paises de latinoamérica) PayPal o GoogleCheckout no son de uso masivo, porque el e-commerce no es una práctica común y desde nuestro país es realmente imposible "poner" plata en una cuenta de esas — salvo que sea un pago efectuado desde el extranjero — , y es bastante engorroso sacarla. Además, quizas lo más importante, no aceptan pagos la mayoría de las monedas locales latinoamericanas.

|image1|

Por eso he integrado a SimpleCart (js) el sistema de pagos virtuales Dineromail.com que es similar a los otros pero orientado al mercado latinoamericano. Se puede utilizar desde Argentina, Brasil, Chile, México y (al parecer) próximamente Colombia, pagando en moneda local de cada país o en dólares.

La implementación está integrada al código original en javascript, no sobre SPIP, por lo que puede ser útil para usarlo independientemente o integrarlo con otro CMS.

El código está disponible en GitHub

Instalación rápida

Obviamente, se incluye el código javascript en la cabecera de la página HTML.

System Message: WARNING/2 (<string>, line 40)

Literal block expected; none found.

y se definen, al menos, las variables requeridas:

</root>

¡Listo! Al hacer Checkout, el contenido del carrito será enviado a DineroMail para procesar el pago.

Otros parámetros

El carrito de DineroMail tiene muchísimos parámetros opcionales que en su mayoría he omitido. Mirá el manual de integración para conocer la API completa. Sin embargo, algunas variables opcionales las tuve en cuenta. Acá listo todas las implementadas:

Variable JS Descripción dmMerchantId Número de cuenta de DineroMail (los primeros 7 digitos sin el dígito verificador /X). (requerido) dmCountryId Código de país del vendedor. 1: Argentina, 2: Brasil, 3: Chile, 4: México. (1 por defecto) dmSellerName Leyenda que el vendedor quiere mostrar en lugar de su email. dmHeaderImage URL de la imagen a mostrar en el Header dmCurrency Moneda de pago. Puede ser USD (dolares) . Si no se define, se usar la moneda local del país del vendedor. dmOkUrl URL donde se re direcciona al comprador en caso de transacción exitosa dmErrorUrl URL donde se re direcciona al comprador en caso de transacción errónea dmPendingUrl URL donde se re direcciona al comprador en caso de transacción pendiente. dmPaymentMethods Cadena de medios de pago permitidos. Por defecto elige todos los medios disponibles para el país, pero se puede configurar específicamente. Por ejemplo para permitir Pago Fácil, Rápipago y Visa en 1, 3 y 6 cuotas: ar_dm;ar_pagofacil;ar_rapipago;ar_visa,1,3,6 Nota: Todas las variables son atributos del objeto simpleCart, por ejemplo simpleCart.dmSellerName = "Vendedor Loco";

Además se puede asignar un código de producto al item.

System Message: WARNING/2 (<string>, line 92)

Literal block expected; none found.

El valor ’X18A’ se envía a DineroMail para futuros controles del vendedor.

Es todo por ahora. ¡A vender!

Actualización

Agregué unos selectores asociados al evento "click" para permitir cambiar dinámicamente el método de pago, de manera de darle más libertad al comprador.

Basta con declarar un elemento que acepte el evento ``onclick `` y asociarlo a alguna de estas clases

System Message: WARNING/2 (<string>, line 104); backlink

Inline literal start-string without end-string.

class descripción simpleCart_to_paypal Activa PayPal como medio de pago simpleCart_to_googlecheckout Activa Google Checkout como medio de pago simpleCart_to_dineromail Activa Google Checkout como medio de pago Un ejemplo de uso podría ser:

Elija su método de pago

SimpleCart(js) para spip

SimpleCart es un sistema para e-commerce muy sencillo íntegramente desarrollado en javascript. Permite realizar ventas mediante PayPal o Google Checkout y es muy extensible para implementar otros sistemas.

En este domingo de procrastinación, decidí integrarlo a SPIP [1]. Lo usaré, espero que pronto, para vender los productos del taller de serígrafía de Mazamorra.

Cómo funciona

Se instala como un plugin común y se configura mediante el plugin CFG. Por ahora sólo soporta PayPal como medio de pago, pero incluiré otros.

SimpleCart usa simples señaladores html, que yo he convertido en balizas.

Baliza Descripción #SIMPLECART_QUANTITY Indica la cantidad de productos #SIMPLECART_ITEMS Muestra los items en el carrito según las cabeceras definidas en la página de configuración #SIMPLECART_TAX_RATE Indica la tasa impositiva indicada en la configuración #SIMPLECART_TAX_COST Indica el total de impuestos #SIMPLECART_SHIPPING_COST Indica el costo de envío en función de la configuración definida #SIMPLECART_TOTAL La suma del precio de los productos en el carrito (Subtotal) #SIMPLECART_FINAL_TOTAL Total considerando impuestos y envío #SIMPLECART_CHECKOUT Genera el botón para finalizar compra (redirige al sistema de pago) #SIMPLECART_EMPTY Genera el botón para vaciar el carrito Con estas balizas puedes armar el carrito en cualquier lado. Los datos del carritos son persistentes usando cookies (incluso se conservan durante un tiempo aunque se abandone la página).

Por ejemplo, este puede ser tu carrito .

<:simplecart:your_cart:> (#SIMPLECART_QUANTITY items)

#SIMPLECART_ITEMS


<:simplecart:subtotal:>: #SIMPLECART_TOTAL<:simplecart:tax_cost:> (#SIMPLECART_TAX_RATE): #SIMPLECART_TAX_COST <:simplecart:shipping_cost:>:  #SIMPLECART_SHIPPING_COST <:simplecart:final_total:>: #SIMPLECART_FINAL_TOTAL

#SIMPLECART_CHECKOUT
#SIMPLECART_EMPTY

Cómo agregar productos

Muy simple. Se sube una imágen como documento definiendo su título y descripción y se la incrusta con el modelo item. El precio se indica con el parámetro price.

Por ejemplo, el documento 111 se vuelve un item si se lo incluye así

<item111|price=23.4>

Un atajo más

El código para el carrito de arriba lo incluí como un modelo para poder incrustarlo directamente desde la redacción de un artículo con ``<cart1> ``.

System Message: WARNING/2 (<string>, line 73); backlink

Inline literal start-string without end-string.

System Message: WARNING/2 (<string>, line 73); backlink

Inline literal start-string without end-string.

Demostración

Si alguien completa la transacción, lo interpretaré como una donación :D.

Descarga

El plugin está en desarrollo sobre spip-zone. Podés hacer un ckeckout SVN