Openbravo Issue Tracking System - Openbravo Localizations
View Issue Details
0029632Openbravo LocalizationsLocalization Mexicopublic2015-04-20 09:362015-07-21 10:45
psanjuan 
tegik_forge 
immediatecriticalalways
closedfixed 
20Ubuntu 8.04.1
 
 
No
0029632: Error found in "Adaptación WebPOS para factura electrónica" module
Error found in "Adaptación WebPOS para factura electrónica" module.

In Spanish:

El error está en la llamada a la clase
com.tegik.facelectr.ad_actionButton.facturaElectronica
desde la clase HookTimbradoCashUp.

El problema es debido a que en la clase facturaElectronica, se realiza la orden
OBDal.getInstance().commitAndClose();

Esto puede ser correcto en un proceso independiente pero no es correcto que en un hook se realice esta acción ya además de poder crear problemas de session de DAL, esta llamada rompe la transaccionalidad.

Puede ocurrir que se de un error una vez realizado el commitandclose y que el proceso cashup no termine pero las accciones realizadas en base de datos antes del commit se persisitiran. En el caso de que se produzca un error todas las acciones deberían de deshacerse y esto se podria hacer si no se hiciese el commit.
n/a
In Spanish:

Solicitamos revisen el desarrollo para evitar utilizar dicho metodo.

Una opción sería que el servlet facturaElectronica no realizase todas las acciones en la propia clase, sino que llamase a otra clase en la que propiamente se hiciese la facturación electronica.

Esta otra clase no realizaria el close y commit y se podria llamar desde el hook, y el servlet sería el que tras usar la nueva clase de facturación hiciese el commit.

El servlet no sería invocado desde el hook sino unicamente la nueva clase.
No tags attached.
related to design defect 0029611 acknowledged Triage Platform Base Openbravo ERP The way we disable triggers with TriggerHandler may lead to leaving the triggers disabled indefinitly 
Issue History
2015-04-20 09:36psanjuanNew Issue
2015-04-20 09:36psanjuanAssigned To => tegik_forge
2015-04-20 09:36psanjuanOBNetwork customer => No
2015-04-20 21:03tegik_forgeNote Added: 0076639
2015-04-22 09:32psanjuanNote Added: 0076672
2015-04-22 09:34psanjuanStatusnew => scheduled
2015-04-22 09:34psanjuanResolutionopen => fixed
2015-04-22 09:34psanjuanFixed in SCM revision => see note
2015-04-22 09:34psanjuanStatusscheduled => resolved
2015-04-22 09:35psanjuanStatusresolved => closed
2015-05-15 13:50egoitzNote Added: 0077492
2015-05-15 13:50egoitzStatusclosed => new
2015-05-15 13:50egoitzResolutionfixed => open
2015-05-15 14:05ngarciaIssue Monitored: ngarcia
2015-05-15 14:17ngarciaRelationship addedrelated to 0029611
2015-05-15 15:10tegik_forgeNote Added: 0077496
2015-05-18 09:09psanjuanNote Edited: 0077496bug_revision_view_page.php?bugnote_id=0077496#r8560
2015-06-02 16:46egoitzNote Added: 0077992
2015-06-02 19:23ngarciaPriorityurgent => immediate
2015-06-02 19:23ngarciaSeveritymajor => critical
2015-07-21 10:45egoitzNote Added: 0078989
2015-07-21 10:45egoitzStatusnew => closed
2015-07-21 10:45egoitzResolutionopen => fixed

Notes
(0076639)
tegik_forge   
2015-04-20 21:03   
Hola

En la versión 2.6.3 ya ha sido removida esa instrucción.

Saludos
(0076672)
psanjuan   
2015-04-22 09:32   
Feedback de Tegik sobre la resolución de este issue:

La clase HookTimbradoCashUp pertenece a Adaptación WebPOS Factura Electrónica, esta clase esta timbrado la factura llamando la clase com.tegik.facelectr.ad_actionButton.facturaElectronica que pertenece a Electronic Invoice Mexico.

El error está en la llamada de la clase java com.tegik.facelectr.ad_actionButton.facturaElectronica.

Esta clase pertenece a la factura electrónica y lo que se nos está indicando en el ticket es que el bug se encuentra en la instrucción OBDal.getInstance().commitAndClose();

Lo que se ha hecho fue remover esa instrucción de factura electrónica para que HookTimbradoCashUp no tenga el mismo bug.
(0077492)
egoitz   
2015-05-15 13:50   
reopened becuase the bug still exists
(0077496)
tegik_forge   
2015-05-15 15:10   
(edited on: 2015-05-18 09:09)
Hola

removí muchas instrucciones commitAndClose(), pero hubo en especial una linea donde se la movia, dejaba de funcionar correctamente la factura electrónica.

Te explico:

Una vez cuando se llama el servicio web del proveedor de sellado de factura, se llenan varios campos la tabla de factura. Las instrucciones son las siguientes:
factura.setFetSellosat(getValuefromXML(archivoTimbradoNuevo, "selloSAT"));
factura.setFetCertificadoSat(getValuefromXML(archivoTimbradoNuevo,"noCertificadoSAT"));
factura.setFetFoliofiscal(getValuefromXML(archivoTimbradoNuevo, "UUID"));

Despues de llenar estas instrucciones, se hace un save, flush y el commitAndClose.

Después generamos el PDF y tomamos los campos FoliosFiscal, CertificadoSat y Sellosat ya que es información que necesita el cliente en el PDF. Cuando se genera el PDF, nos encargamos de enviar el PDF creado a un correo electrónico.


Hace poco quite todas las instrucciones de commitAndClose como se me indico en este ticket, pero recibí dos llamadas de clientes que estaban recibiendo sus PDF en blanco en los campos FoliosFiscal, CertificadoSat y Sellosat. Estuve debugeando y colocando las instrucciones save, flush y refresh y ninguna de estas instrucciones solucionaba el error que me había reportado los dos clientes. Volví a colocar las instrucciones de commitAndClose y me permitió enviar correctamente el PDF.

Actualmente solamente hay una instruccion de commitAndClose en la clase facturaElectronica.java, pero esta instrucciones es la solución para crear y enviar correctamente el PDF.


¿Cual soluciones nos pueden proponer para quitar esta instrucción de la clase?

(0077992)
egoitz   
2015-06-02 16:46   
Buenas,

Un flush debería de bastar para evitar hacer el commit ya que al usar la misma conexion cualquier cambios ya estaría disponible dentro de esa conexion.

si es necesario un commit es posible que en las siguientes acciones tras el commit se esté usando una conexion distinta a la de DAL.

Debugee todo el proceso y compruebe si más adelante se abre alguna nueva conexion de base de datos.

En caso contrario debería de ser suficiente el flush.
(0078989)
egoitz   
2015-07-21 10:45   
Solved in last release