giansalex / sufel-angular

Sufel UI using Angular v10
https://newagent-35fdd.firebaseapp.com
2 stars 1 forks source link

No busca comprobantes con decimales #130

Closed OD-n closed 5 years ago

OD-n commented 5 years ago

Cuando intento buscar un comprobante individual, y quiero verlo por consulta individual me marca como no encontrado cuando el total del comprobante es con decimales, al parecer en la búsqueda redondea ese monto, como podría hacer para que no lo haga, o donde tengo que modificar? Espero alguna respuesta, gracias

giansalex commented 5 years ago

Hola, no se hace redondeo, podrias revisar que valor se envia, abriendo la consola del navegador > Network

OD-n commented 5 years ago

Tienes razón, no redondea, seguiré buscando, solo me pasa eso al consultar documentos con montos que tengan xx.99, xx.98 o xx.01

1 2

tendría que ver que el xml se genere con mas decimales quiza?, muchas gracias de todos modos, sigo probando subiendo diferentes xml, gracias

giansalex commented 5 years ago

Existía un problema por el tipo de dato del campo total en la BD, podrías cambiarlo de float a double y ver si pasa.

OD-n commented 5 years ago

Al cambiar el tipo de dato como ejemplo me cambió el monto de un comprobante de: "599.99" a "599.989990234375"; cabe mencionar que ingresando ese total me muestra el mismo mensaje de documento no encontrado; podrías darme una breve explicación de como calcula ese monto?,

El xml generado se calcula con 2 decimales, tanto para los totales como para el precio de los items, quisiera saber si el total que llena en la DB lo toma como el total del xml que subimos, o hace un calculo de los items; no sé si me dejo entender, muchas gracias por la información del tipo de dató, por ello mi pregunta del cálculo del total.

giansalex commented 5 years ago

La información obtenida del xml no se altera bajo ninguna circunstancia, se guarda tal cual ha sido registrado en el comprobante.

giansalex commented 5 years ago

No se hace ningún cálculo, se guarda el monto tal cual esta en el XML. Pero puede ser un problema con el tipo de dato que se esta guardando.

OD-n commented 5 years ago

Probé redondear a 2 decimales antes de hacer el INSERT en la DB, asi que cambié la función: public function setTotal($total) { return $this; }

por:

public function setTotal($total) { $this->total = round($total, 2); return $this; }

para que en la DB me guarde el monto en redondeado a 2 decimales, como mi sistema trabaja a 2 decimales no hay problema, no podría ser una solución cuando se entregen comprobantes con 3 decimales o mas. Muchas gracias por la ayuda, no es lo optimo pero por el momento me funcionará, claro que necesitaré buscar la forma de hacer que funcione con otros decimales

giansalex commented 5 years ago

No creo que tengas que hacer eso, en el XML solo se debería enviar el total con un máximo de 2 decimales según la documentación de SUNAT.

OD-n commented 5 years ago

Exacto, el xml que se genera lo hago con LYCET y lo genera con 2 decimales, asi que no podría ser ese el problema, es por ello que no entiendo que guarde en la DB algo por ejemplo: de 4547.03 que aparece en el xml guarde -> 4547.03254867; como dices, el tipo de dato puede que tenga que ver, pero aún no lo veo tan claro; si consigo algo lo estaré publicando por aqui, muchas gracias.

giansalex commented 5 years ago

Hola @OD-n , revise el caso. El problema si era el tipo de dato, y para que no te guarde con decimales extra, debes definirlo con maximo 2 decimales DOUBLE (10,2)

Cambio hecho en https://github.com/giansalex/sufel-rest/commit/f5d7a1f6b9b3be22aca6fafafddec5bfc7d27f79