Ticket regalo

kraneok

Hola gente que tal, hoy vengo con un problema referido a los tickets regalo.

La cuestión es que me han pedido añadir a una aplicación la posibilidad de emitir ticket regalo con las compras, por lo que si al que le hacen el regalo, no le gusta, puede utilizarlo para cambiarlo por otra cosa.

Aunque ya tengo todo hecho y funcionando, realmente no me cuadra mucho como lo estoy haciendo, voy a pasar a explicar un poco por encima como la aplicación trabaja con los ticket regalo.

Suponiendo que tenemos una venta en la base de datos de 10€ y que esta ya está contabilizada.

La persona a la que le hacen el regalo no le gusta mucho y decide utilizar el ticket regalo, y en este primer uso solo utiliza 5€.

En este marco, el primer paso es que la persona que cambia los regalos se los entregue junto al ticket regalo a la persona que le atiende. Esta persona buscará a través de la aplicación la venta que está asociada a este ticket regalo y reintegrará en la base de datos los artículos devueltos, esto solo es motivo de actualizar el stock.Solo los artículos de la venta son eliminados, la venta continúa estando pues el dinero contabilizado nunca ha salido.

En este caso, cuando se realiza la nueva compra utilizando el ticket regalo y el valor de la compra de esta es igual o inferior al valor del ticket regalo, no hay ningún problema, pues en la base de datos yo las marco como que están pagadas íntegramente con un ticket regalo, por lo que esa venta no se vuelve a contabilizar mas.

Sin embargo, en el caso de que el valor de esa venta sea superior al del ticket regalo, se debe de dar parte del importe en metálico, es aquí donde ya no se como tratar a esa venta.

Habiendo utilizado ya 5€ de 10€ del ticket regalo, ahora viene otra vez el regalado y quiere volver a utilizar el ticket regalo (actualizado ya y con solo 5€), pero esta vez elige algo de 10€, por lo que los otros 5€ debe pagarlos en metálico, he aquí el gran problema

¿como podría contabilizar eso?

Espero que puedan echarme una mano y arrojarme algo de luz, gracias.!

Kiroushi

No sé cómo tendrás configurada la aplicación, pero la solución más sencilla es que en los conceptos de venta puedas tener diferentes opciones, una de las cuales sea el ticket regalo que tenga prioridad sobre el metálico a la hora de calcular los importes.

1 respuesta
kraneok

#2 ¿ Puedes detallar un poco mas por favor ? :D

Kiroushi

Puedo desgranarlo un poco más si explicas al menos cómo está construido el sistema de pago de la aplicación.

¿Podrías definir al menos las tablas?

1 respuesta
kraneok

#4 Si claro.

Vamos a ver, tenemos por un lado la tabla ventas

Venta
venta_id (PK)
venta_fecha
venta_total
venta_trabajador
venta_pagado
venta_cerrada
venta_pagada_regalo
venta_devuelta

VentaLineas
venta_linea_id (PK)
venta_linea_venta_id (FK) a Venta(venta_id)
venta_linea_product_id (FK) a Productos(product_id)
venta_linea_cantidad
venta_linea_descuento
venta_linea_reintegrado

TicketRegalo
ticket_regalo_venta_id (PK)(FK) a Venta(venta_id)
ticket_regalo_codigo
ticket_regalo_total
ticket_regalo_activado

A ver, una venta tiene de 1..N lineas (que son en realidad referencias a artículos mas cantidad, descuentos y cositas a almacenar ).
Una venta puede tener un ticket regalo asociado por el cual sabemos el valor del ticket regalo.

Si alguien quiere usar el ticket regalo, lo primero en hacer es las lineas asociadas a la venta se reintegran en el campo venta_linea_reintegrado, que lo que hace es devolver el producto a su stock. Esta venta se queda sin lineas, pero como es un dinero que no se va a devolver la dejo contabilizada y, posteriormente, las siguientes ventas realizadas con el valor del ticket regalo, las marco en el campo venta_pagada_regalo, entonces no contabilizo el valor de esa compra, pues ya lo estaba anteriormente.

Ahora, si es una compra con ticket regalo + metálico, es donde no se que hacer, tengo muchas cosas en mente, pero en realidad ando buscando la mas acertada, aunque no debería pararme mucho a la optimización y ya hacerlo mas tarde.

Kiroushi

Creo que la estructura que estas usando es ilógica y por eso no encuentras solución a tu problema.

¿Por qué la tabla TicketRegalo tiene un campo venta_id?

Según dices, un ticket regalo podría ser usado en varias compras. Esta estructura no permite tal operación.

Un ticket regalo debería tener una relación con las ventas many to many (una venta puede tener varios tickets regalo, y un ticket regalo puede pertenecer a varias ventas). Además, esto te permitiría tener un índice único formado por el venta_id y ticket_id en la tabla intermedia Venta_TicketRegalo.

Además de esto, al TicketRegalo le cambiaría el importe del ticket por dos columnas:

saldo_total
saldo_actual

Empezando por ahí, plantearía seguir reconfigurando el sistema en base a ese cambio que creo que es fundamental.

Dime si lo ves lógico y seguimos indagando.

1 respuesta
kraneok

#6 Creo que te confundes, una venta solo genera UN ÚNICO ticket regalo, xD.

1 respuesta
Kiroushi

#7 Creo que entonces estoy hablando de otra cosa diferente.

Pensaba que te referías a poder comprar un ticket regalo por importe de X que lo usas en las compras que tú quieras.

Veo que no es el caso.

Aún así, pienso que si el ticket regalo sirve para hacer varias compras de otros importes, debería tener un campo saldo actual, ¿cierto?

1 respuesta
kraneok

#8 Si, es el campo ticket_regalo_total, que se va actualizando según se compra con el. Y una compra ÍNTEGRA hecha con el ticket regalo, marca la linea de compra en este campo venta_pagada_regalo que se pondría a 1 para no contabilizarla.

El caso es, como contabilizo una compra hecha con ticket regalo + metálico, cual sería la mejor forma.

1 respuesta
Soltrac

Aunque eres mi competencia, te explico como se hace :)

La idea es usar el concepto de forma de pago. El total de un ticket puede ser 50 € pero las formas de pago que lo componen pueden ser las siguientes:

EFECTIVO: 70 €
EFECTIVO (Cambio): -20 €

Si pagas con tarjeta

MASTERCARD: 50 €

De esta forma tenemos cuadrada la caja en la Z.

Ahora tenemos el ticket regalo. Simplemente tienes que usar la forma de pago TICKETREGALO para cuadrar tus tickets:

Por ejemplo, una devolución de un artículo

-1 Camiseta 5 €

Forma de pago:

TICKETREGALO -5 € . Al ser la forma de pago TICKETREGALO negativa generamos un ticket regalo.

Ahora supongamos que pagamos con el ticket regalo de 5 € una compra de 3 euros y queremos que se nos mantengan los 2 €

TICKETREGALO 5 € (Usamos el ticket regalo)
Cambio
TICKETREGALO -2 € (Generamos un nuevo ticket regalo).

Ahora como nos quedan 3 € en el ticket regalo vamos a comprar 10 €

TICKETREGALO 3 € (Usamos el ticket regalo)
EFECTIVO 10 € (Pagamos con un billete de 10 €)
Cambio: EFECTIVO -3 €

Como ves, la caja te va a cuadrar siempre. La opción de generar un ticket regalo nuevo ya es opcional, si quieres usar un concepto de saldo en el ticket regalo, ya depende de ti.

2 respuestas
Kiroushi

#9 De acuerdo, entonces creo que el "problema" lo tienes en eso de venta_pagada_regalo.

Lo que tienes que hacer es buscar una forma de contabilizar los pagos de las compras (que además para un futuro te puede servir si por algún casual quieres desglosar métodos de pago).

La cosa es que crearas conceptos de pago: metálico, tarjeta, ticket regalo, etc.

Cuando fueras a hacer una venta y el cliente use un ticket regalo, se añade una línea de concepto de pago con el importe restante del ticket regalo.

1) Si el importe de la venta es inferior al valor del ticket regalo, cuando se cierre la venta se le descuenta al ticket (por esto te dije que sería bueno que mantuvieses el campo de saldo total y saldo actual).

2) Si el importe de la venta es superior al valor, quedaría un importe pendiente por pagar que sería la diferencia entre el ticket y la venta, y que podría completar con metálico, tarjeta, o cualquier otra opción de pago que se permitiese.

Edit: Vale, lo que acaba de decir #10 es precisamente lo que te he descrito xDD

3 respuestas
Soltrac

#11 XDDD, son conceptos básicos en softwares POS.

PD: Cada vez que programais en español, dios mata un gatito.

kraneok

#11 Uhmm, no es mala idea eso de hacer del ticket regalo un método de pago xd.
El resto lo haces como yo lo hago en mi aplicación xd

kraneok

#11 Para que te hagas una idea, ahí está la selección de métodos de pago, ahora añadiré ticket regalo. De todos modos, si te fijas, hay un textfield donde pone Ticket regalo, ahí introduces el código generado y te devuelve el valor de la venta a la que está asociada.

A la derecha tienes otro campo llamado Aplicando ticket regalo, que lo que te calcula es el precio en metálico a pagar utilizando también el ticket regalo, ya lo aplicas o no, en el botón Aplicar.

1 respuesta
Kiroushi

#14 La cosa es que una venta pueda tener asociados múltiples modos de pago, siendo la suma de todos ellos siempre igual al importe de la venta.

Si una persona tuviese dos tickets regalos a medio usar, ¿podría aplicar ambos a una misma compra? Si la respuesta es sí, ya sabes por dónde enfocar el tema.

1 respuesta
kraneok

#15 La verdad que hay que tener tantas cosas en cuenta...lo mismo te dice el cliente que quiere tal o cual... xD

eXtreM3

#10 Aunque eres mi competencia...

1 respuesta
kraneok

#17 De ese video he ido a https://www.youtube.com/watch?v=Z5d46d3uY9c xDDDD

Usuarios habituales

  • kraneok
  • eXtreM3
  • Kiroushi
  • Soltrac