domingo, 14 de febrero de 2010

Factura Electrónica de Exportación y ejemplo soap simple

El Web Service de Factura Electrónica de Exportación (WSFEX) es un nuevo servicio web de la AFIP para autorizar facturas electrónicas de comercio exterior (obtener el CAE).

Para poder usar estos webservices, como se comento en varias oportunidades, desarrollamos interfaces propias hechas en Python debido a la incompatibilidad y complejidad de otras soluciones (.NET, Java, PHP).

A continuación se presenta un ejemplo de cuatro simples pasos, sobre como usar SoapClient y SimpleXmlElement para consultar fácilmente los servicios web de AFIP:

Paso 1: Importar las clases que necesitamos utilizar de nuestras librerias de XML y SOAP:
from simplexml import SimpleXMLElement
from soap import SoapClient

Paso 2: Revisar el wsdl que describe los servicios y extraer URL, acción y espacio de nombres (buscar atributos location, soapAction -sin la operación-, targetNamespace respectivamente):
WSFEXURL = "https://wswhomo.afip.gov.ar/wsfex/service.asmx"
SOAP_ACTION = 'http://ar.gov.afip.dif.fex/'
SOAP_NS = "http://ar.gov.afip.dif.bfe/"

Paso 3: Creamos nuesto cliente SOAP de servicio web:
client = SoapClient(WSFEXURL,action=SOAP_ACTION, namespace=SOAP_NS, trace=True)

Paso 4: Llamamos a la función remota, por Ej. FEXDummy que obtiene el estado de los servidores de la AFIP. Para ello debemos invocar el método "virtual" del objeto client de acuerdo como especifíca el wsdl (se recomienda leer el manual del desarrollador que proporciona AFIP ya que el wsdl no es muy intuitivo). Como respuesta nos devuelve un objeto XML al cual podemos acceder directamente por sus atributos:
response = client.FEXDummy()
result = response.FEXDummyResult
print str(result.AppServer)
print str(result.DbServer)
print str(result.AuthServer)

Esto es todo, si funcionan bien nos debería imprimir el estado de los servidores (OK si estan funcionando).

Notar la simplicidad y dinamismo gracias a Python, sin perder flexibilidad, pudiendo invocar métodos arbitrarios y convertir los tipos de datos según nuestras necesidades.

En este caso el método del servicio web no recibe parámetros, si los tuviera se pasarían como argumentos por nombre (usando valores simples, diccionarios u objetos) de Python, ej.: 
response = client.FEXGetPARAM_MON(Auth={"Token": token, "Sign": sign, "Cuit":long(cuit)})
También puede tomarse como referencia los ejemplos de AFIP hechos en PHP, ya que desarrollamos estas herramientas para que sean similares.

El código completo para utilizar el servicio web de factura electrónica de exportación puede ser descargado de google code

Para más información y novedades sobre estos temas exite un grupo de noticia, el sitio con información general del proyecto y la páginas sobre factura electrónicainformación técnica y la interfaz PyAfipWs.

domingo, 7 de febrero de 2010

web2py: el marco de trabajo web impresionante

Aprovechando el lanzamiento de la lista de correo y sitio web para la comunidad en español de web2py ("el framework web empresarial" que permite el desarrollo rápido de aplicaciones web2.0 profesionales), publico esta traducción de una recomendación que hice en ohloh:

Habiendo trabajado con jsp, php, turbogears y/o django,  cuando conozca web2py no va a querer mirar átras...

Web2Py hace al desarrollo web fácil y más eficiente, permite enfocarse en la lógica del negocio y no en temas técnicos triviales o esotéricos.

Características principales imponentes (por lo menos para mí):
  • Instalación muy simple, practicamente sin configuración (tanto de forma independiente y mod_wsgi)
  • La capa de abstracción a la base de datos (DAL) permite consultas poderosas sin siquiera una única linea de SQL, y no se necesitan complejas clases del modelo (adiós ORMs...)
  • Intuitivo y con curva de aprendizaje muy baja, ideal para ser enseñado en el aula para niveles principiantes
  • Estructura sólida todo-incluido, incluyendo ajax, menús, formularios, caching, GAE, etc. Su diseño limpio y seguro previene los problemas más comunes del desarrollo web.
  • Verdaderamente pythónico: modelos, vistas y controladores dinámicos, simples y explícitos, con un lenguaje de plantillas programable con python y ayudantes HTML.
  • Sin complicaciones de línea de comandos, incluso incluye un entorno integrado de desarrollo y herramientas de administración totalmente en línea, con un editor de código y html web, sistema de tickets de error, subida de archivos, etc.

viernes, 5 de febrero de 2010

Orientar al Software Libre la carrera de Analista de Sistemas (proyecto)

En el Instituto Superior Tecnológico Blaise Pascal (terciario donde trabajo dictando dos materias de la "Tecnicatura Superior en Análisis de Sistemas"), venimos analizando algunas dificultades que se presentan en el desarrollo de la carrera, entre ellas: dispersión de contenidos, problemas para alcanzar los objetivos téoricos y prácticos adecuados, falta de motivación, aislamiento, etc.

Para superar estas dificultades, y teniendo en cuenta el tiempo como un factor limitante (tanto de docentes como de alumnos), una primer medida fue unificar los trabajos prácticos y apoyarlos transversalmente desde distintas materias. Si bien hubo una mejora, también hubo algunas complicaciones. Principalmente, la variedad de proyectos y herramientas fue contraproducente, no alcanzando las horas de clase destinadas a la práctica para abordar correctamente las dificultades planteadas por cada alumno.

Por ello, y para terminar de reforzar los contenidos y superar todas estas dificultades, es donde surge el software libre como solución. Por sus características abiertas y participativas, no solo se unificarían y profundizarían los temas teóricos, generando una continuidad más armoniosa entre las distintas asignaturas (eliminando temas solapados y mejorando el aprovechamiento de los tiempos disponibles), sino que además proveería proyectos concretos y reales para la práctica profesional.
De este modo nació el "Proyecto Curricular Institucional de la Carrera Analista de Sistemas orientado al software libre", inicialmente como un conjunto de ideas planteadas en las distintas reuniones entre docentes, que luego organicé en un documento más formal, con su debida justificación, y esperamos terminar de discutir y aplicar para este ciclo lectivo.

Este proyecto cumple con el plan estudio propuesto por la provincia de Buenos Aires utilizando integramente software libre, y su estructura es similar a los planes que se dictan en universidades nacionales y privadas (en ocasiones también con herramientas libres), aunque la carga horaria y objetivo son sensiblemente diferentes, por ello también la necesidad de optimizar los tiempos y ampliar los horizontes de salida laboral. 
Si bien es un proyecto específico para este instituto (ya que tiene en cuenta la situación y contexto local), puede ser aplicable a otras instituciones, ya que se basa en la resolución provincial que regula la tecnicatura, por lo que cada institución podría adaptarlo según sus necesidades específicas con la correspondiente capacitación docente (para ello se está trabajando desde el nuevo programa INTI-Sol, desde el taller de Educación y Capacitación).

Como eje se plantea tres herramientas básicas principales: GNU/Linux como sistema operativo, Python como lenguaje de programación y PostgreSQL como la base de datos. La elección, que responde a varios criterios detallados en el documento, es la que estimamos más adecuada teniendo en cuenta sus características didácticas, nuestros conocimientos como docentes y la posibilidad de capacitación y desarrollo de los contenidos y objetivos de las asignaturas (y de hecho ya se venía trabajando con dicho software satisfactoriamente).
Seguramente otros docentes pueden estimar que para su problemática se ajustan otras herramientas, bienvenidas sean, en mi opinión la diversidad es una ventaja, no un problema. Igualmente se planea usar o estudiar otras alternativas (Windows, PHP, MySQL, OpenOffice Base/Basic simil Access/VB) para que el alumno pueda comparar y elegir libremente.

Cabe aclarar que además están disponibles herramientas libres para todas las necesidades de la carrera (desde el editor de textos hasta repositorio de código, diagramación, etc.), y de más esta decir que el software libre es maduro, comercialmente viable (usado por las principales empresas y organismos, estatales y privados) y no solo cumple con los contenidos teórico-prácticos sino que también contempla las implicancias éticas de la profesión en el contexto social de nuestro país, y permite al alumno proveer soluciones y servicios diferenciados y competitivos.

La idea es que, en la medida de lo posible, todos los materiales (apuntes, trabajos prácticos, etc.) sean libres (licencia GNU Free Documentation License -GFDL- o similar), garantizando para sus contenidos, exactamente los mismos derechos que tienen los usuarios del software libre sobre las aplicaciones.
Además, creo que es fundamental que estos materiales sean generados dentro de la comunidad (ya sea para compartir recursos y unificar criterios entre los distintos docentes, como para favorecer la investigación y actitud autodidacta de los alumnos). En esto vengo trabajando en los sitios de los grupos de usuarios de PythonPostgreSQL en Argentina, tratando de retribuir generando materiales (apuntes, tutoriales, presentaciones, traducción de documentación, etc.), ya que creo que un punto esencial para elegir estas herramientas es que existan localmente comunidades fuertes y activas.

Desde ya queda abierta la convocatoria para que podamos colaborar entre todos y lograr una enseñanza sustancial y significativa.

Por último, los interesados que deseen revisar el documento de trabajo pueden hacerlo en GoogleDocs:
http://docs.google.com/Doc?tab=edit&dr=true&id=dd9bm82g_428g8zvfvdx
Última Versión Publicada:

Licencia y Aviso Legal

CC BY-SACopyright (C) 2009 - 2013 Mariano Reingart reingart@gmail.com - Visite el sitio http://reingart.blogspot.com/ para novedades. Salvo indicación contraria, el texto de esta página está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0 Unported; podrían ser aplicables cláusulas adicionales.

Se solicita mantener el aviso de copyright (enlazando al texto original), compartir las obras derivadas bajo la misma licencia, y si es, posible comunicando al autor cualquier mejora. No utilizar logotipos ni marcas sin la debida autorización de sus titulares.

Toda información es proporcionada a Titulo Informativo y se entrega como está, sin garantías explícitas ni implicitas de ningún tipo, incluyendo sin limitación, pérdida de ganancias, interrupción de negocios, pérdida de programas u otros datos en sistemas de computación o cualquier otro reclamo. Al usarla acepta hacerlo bajo su propia responsabilidad, conociendo la normativa y reglamentaciones existentes. En caso de controversias respecto del presente, usted acepta presentarlas y resolverlas exclusivamente en la jurisdicción de los Tribunales Ordinarios Civiles y Comerciales del Departamento Judicial de Morón, Provincia de Buenos Aires, Argentina, renunciando expresamente a cualquier otro fuero que pudiere corresponder.