Skip to content
This repository has been archived by the owner on May 3, 2023. It is now read-only.

Algoritmo para cálculo dimensiones de paquetes #44

Closed
PatrickCaneloDigital opened this issue Oct 18, 2017 · 7 comments
Closed

Algoritmo para cálculo dimensiones de paquetes #44

PatrickCaneloDigital opened this issue Oct 18, 2017 · 7 comments

Comments

@PatrickCaneloDigital
Copy link
Contributor

PatrickCaneloDigital commented Oct 18, 2017

Estimados,
Junto con agradecerles el trabajo:
Para un cliente tengo que integrar la generacion de etiquetas. Ya que eso va mano en mano con el costo de envio estaba analizando el algoritmo para el calculo de costo de envio de este plugin.
y me parece que hay incongruencias.

En un pedido grande recibo el siguiente debug, que a primera vista me parece que tiene un error, ya que el volumen final es casi el triple de la suma de las cajas individuales:

volumen total (3 paquetes):
1'776'000
al ser 5 paquetes tenemos volumenes: 350400 + 187500 + 78660 + 35040 + 24000 = 675'600
que se reducen a 3 paquetes: 934400 + 127604 + 24000 = 1'086'103

[18-Oct-2017 20:55:11 UTC] [WCCHP]Cantidad: 10 SingleProduct: Vl=35040 Al=73 An=16 La=30
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgInit(1): Vl=350400 Al=30 An=73 La=160
[18-Oct-2017 20:55:11 UTC] [WCCHP]Cantidad: 1 SingleProduct: Vl=78660 Al=69 An=30 La=38
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgInit(2): Vl=78660 Al=30 An=38 La=69
[18-Oct-2017 20:55:11 UTC] [WCCHP]Cantidad: 1 SingleProduct: Vl=187500 Al=75 An=50 La=50
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgInit(3): Vl=187500 Al=50 An=50 La=75
[18-Oct-2017 20:55:11 UTC] [WCCHP]Cantidad: 1 SingleProduct: Vl=24000 Al=60 An=20 La=20
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgInit(4): Vl=24000 Al=20 An=20 La=60
[18-Oct-2017 20:55:11 UTC] [WCCHP]Cantidad: 1 SingleProduct: Vl=35040 Al=73 An=16 La=30
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgInit(5): Vl=35040 Al=16 An=30 La=73

[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgVol(1): Vl=350400 Al=30 An=73 La=160
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgVol(2): Vl=187500 Al=50 An=50 La=75
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgVol(3): Vl=78660 Al=30 An=38 La=69
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgVol(4): Vl=35040 Al=16 An=30 La=73
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgVol(5): Vl=24000 Al=20 An=20 La=60

[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgRed(1): Vl=934400 Al=73 An=80 La=160
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgRed(2): Vl=127604 Al=38 An=46 La=73
[18-Oct-2017 20:55:11 UTC] [WCCHP]PrdPkgRed(3): Vl=24000 Al=20 An=20 La=60

[18-Oct-2017 20:55:11 UTC] [WCCHP]FinPkgPrdPkg(1): Al=73 An=80 La=160
[18-Oct-2017 20:55:11 UTC] [WCCHP]FinPkgPrdPkg(2): Al=80 An=111 La=160
[18-Oct-2017 20:55:11 UTC] [WCCHP]FinPkgPrdPkg(3): Al=100 An=111 La=160

[18-Oct-2017 20:55:11 UTC] [WCCHP]FinalPackage: Kg=50.5 Vl=1776000 La=160 An=111 Al=100

Bueno, independiente de eso, tendré que cambiar la logica, ya que no corresponde con la forma como mi cliente enviará sus envios.
Les queria informar que a mi parecer esta algo raro, aunque el codigo mismo parece logico y coherente, incluyendo un caso de uso (un poco extremo) parece que algo esta mal...

EDIT: La causa de ese aumento en volumen viene del ejercicio de unir primero los 5 paquetes de a dos, y esos en uno grande... En ese proceso se genera mucho espacio vacio que tiene directa implicancia en el volumen final... se puede questionar si esa suma realmente es practica ya que depende tambien del volumen individual (es poco probable que se envien 5 lavadoras en conjunto). Aunque entiendo que hay que partir con una asunción.

Independiente de eso, un realista promedio podria ser trabajar mas sumando volumenes. Asumiendo que se optimiza el espacio en los paquetes sumados y añadirle un margen (por ejemplo porcentual) extra.
O (puede ser con un ajuste separado) contemplar diferentes algoritmos: un paquete por producto, sumar volumenes, sumar lado mas corto, etc.
capaz que les colabore con eso...

Saludos

@TCattd TCattd changed the title algoritmo para calculo envio Algoritmo para cálculo dimensiones de paquetes Oct 19, 2017
@TCattd
Copy link
Collaborator

TCattd commented Oct 19, 2017

@PatrickCaneloDigital ¿vas a compartir de vuelta la generación de etiquetas con este plugin? (solo pregunto). Sería muy util, de verdad.

Sobre el cálculo de dimensiones, se hicieron varias mejoras acá:
#15
...gracias a @albetix y @llermaly.

Pero la verdad, sabemos que eventualmente esos cambios podrían no ser la mejor solución definitiva. Como comentaron ahí dentro, el "problema" de empaquetar productos para envío da para harto, y hay librerías especializadas que tratan de resolver aquello.

Eventualmente creo que lo mejor sería buscar una librería buena, probada, que nos permita delegar la tarea del empaquetado a ella, para no tener que estar parchando soluciones nosotros, para un problema que es complejo de resolver.

Eres bienvenido, estimado, si quieres explorar otras ideas, como las expuestas en el issue #15, aplicar alguna librería estándar de empaquetado, y enviar un pull request (ojo con la guía de contribución) para que unamos esos cambios al plugin principal.

Bienvenido sea, de verdad.

@PatrickCaneloDigital
Copy link
Contributor Author

voy a ver como aportar en mejorar la heuristica en respecto al cálculo de envío.

Estoy pensando en una opcion para elegir 2, 3 o 4 diferentes heuristicas en los ajustes... y que allí cada usuario pueda elegir lo que mas se acerca a su realidad.

Por el tema de la generacion de etiquetas, tengo que ver todavia. el codigo en si no es tanto, lo complicado es que la implementacion esta ligada directamente al costo de envio y a la forma como los clientes manejan el tema. alli lo veo muy dificil encontrar una solucion generica que aplique a todos los clientes y por ende no se si es de mucho uso, teniendo en cuenta que muchos desarrolladores al encontrar un plugin, justamente no se hacen estas preguntas hasta que se topan con el hecho que al cliente no le funciona la idea y se arrojan errores y problemas.
Es un poco o que me paso con este plugin: al ver como calculaba me dije: asi no me sirve (y de hecho es asi, mi cliente quiere enviar paquetes (30x30x80) de a uno por chilexpress. Que igual despues en la practica puede cambiar eso si eso eleva mucho el costo de envio)...

Estoy viendo que es dificil de abarcar esta tematica de forma generica...

@PatrickCaneloDigital
Copy link
Contributor Author

PatrickCaneloDigital commented Oct 22, 2017

@TCattd
Estimado(s) estoy intentando de publicar los cambios, pero recibo un error en github desktop al hacer el pull request, que no tengo permisos para publicar...
Es mi primera publicacion en github asi que no se si soy yo el problema, o es github ;-)

Los cambios consisten en un switch adicional en la mascara de administracion para elegir entre la heuristica existente y una que seria: un paquete por item.
Eso da pie para implementar mas heuristicas en el futuro

Ademas tengo una sugerencia para el algoritmo existente que no he podido implementar aun:
Al juntar dos paquetes por el lado mas corto se genera un espacio vacio entre el mas grande y menos grande. Ese espacio vacio puede ser aprovechado eventualmente al ver, cual es el paquete mas grande que se podria meter alli, sin que genere un volumen mas grande (solo sumaria el peso). Eso seria una mejora sustancial sobre todo cuando el envio consiste de varios items de diferentes tamaños... En cuando tenga algo de tiempo lo implementaría...
A: 30x30x160
B: 20x20x20
C: 10x20x20
Item C cabe perfectamente en el espacio que queda al juntar item A+B y por ende no habria que añadirlo al lado mas corto, sino solo sumarle el peso, sin aumentar volumen.

Edit consulta: No se si me pueden ayudar con esto, pero el parametro nuevo: packaging_heuristic: como se podria acceder a el desde otro plugin?

@TCattd
Copy link
Collaborator

TCattd commented Oct 23, 2017

@PatrickCaneloDigital #15 (comment)

Ojo con lo que se pide para aceptar un PR, por favor: https://github.com/whooohq/whq-woocommerce-chilexpress-shipping/blob/master/CONTRIBUTING.md
Es por el bien de todos los que aportaremos aquí algún día.


Sobre acceder al valor de una opción de config del plugin desde otro plugin, puedes inicializar la clase principal del plugin y luego llamar:

$chilexpress_packaging_heuristic = WC_WHQ_Chilexpress_Shipping::get_chilexpress_option( 'packaging_heuristic' );

El método get_chilexpress_option es público, precisamente para aquello ;)

@PatrickCaneloDigital
Copy link
Contributor Author

@TCattd
si, lo habia leido... gracias por recordar...
El Pull Request esta listo...


en cuando tenga algo de tiempo libre quiero aportar a mejorar la heuristica existente "suma lado mas corto"

@TCattd
Copy link
Collaborator

TCattd commented Oct 23, 2017

Excelente @PatrickCaneloDigital . De verdad, agradecido.

Aceptado el PR ahora si.
Va la actualización del repo en wp.org en unos minutos.

@TCattd
Copy link
Collaborator

TCattd commented Oct 23, 2017

1.3.3 disponible en wp.org

Ojo con los otros cambios, para que sincronices tu repositorio si vas a seguir trabajando en este item (ver ac2bbed ).

De nuevo, muchas gracias estimado :)

¡Buen día!

@TCattd TCattd closed this as completed Oct 23, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants