Foros del Web » Programando para Internet » PHP »

extraer montos de DB por tipo de pagos

Estas en el tema de extraer montos de DB por tipo de pagos en el foro de PHP en Foros del Web. hola tengo un lijero problema de logica con una tabla. Tengo un punto de venta y ahora estoy programando un sistema de reportes de transaccione ...
  #1 (permalink)  
Antiguo 18/03/2013, 15:29
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 11 años, 8 meses
Puntos: 1
extraer montos de DB por tipo de pagos

hola tengo un lijero problema de logica con una tabla. Tengo un punto de venta y ahora estoy programando un sistema de reportes de transaccione que obtiene los datos de la base de datos del punto de venta. El sistema acepta dobles pagos, es decir si una persona quere pagar una cantidad X con efectivo y la otra con tarjeta. La estructura con la que se estan guardando las transacciones en la base de datos me es dificil poder obtener cuantos fueron con tarjetas y cuando con efectivo. voy a poner un ejemplo de como se guardan en la DB de una transaccion con dos pagos y dos productos comprados.

tabla sales

fecha id_venta id_empleado id_cliente
2013-03-18 1 2 3

tabla sales_item

id_venta id_producto precio cantidad
1 5 60 1
1 6 30 1

tabla sales_pagos

id_venta tipo_pago monto_recibido
1 efectivo 50
1 tarjeta 50

Con esta estructura tengo problemas al tratar de obtener cuantos fueron con efectivo y tarjeta. Este es el query que utilizo

SELECT SUM( si.precio * si.cantidad) AS totalEfectivo
FROM sales_item si
JOIN sales_pagos sp ON sp.id_venta = si.id_venta
JOIN sales s on s.id_venta=sp.id_venta
JOIN employees oe ON s.employee_id = oe.person_id
WHERE oe.username = 'caja1'
AND sp.tipo_pago = 'Efectivo'
AND s.fecha between timestamp('2013-03-18') and timestamp('2013-03-18')


el objetivo de esto es que un cajero pueda cuadrar su caja, pero cuando existen dobles pagos el query me suma los que son de efectivo y los que son de tarjeta al mismo tiempo.Este query me devuelve

totalEfectivo
90


y este query que es el mismo pero ahora cambiandole el filtro a tipo de pa;go por tarjeta

SELECT SUM( si.precio * si.cantidad) AS totaltarjeta
FROM sales_item si
JOIN sales_pagos sp ON sp.id_venta = si.id_venta
JOIN sales s on s.id_venta=sp.id_venta
JOIN employees oe ON s.employee_id = oe.person_id
WHERE oe.username = 'caja1'
AND sp.tipo_pago = 'Tarjeta'
AND s.fecha between timestamp('2013-03-18') and timestamp('2013-03-18')

me devuelve

totaltarjeta
90


y entiendo porque. Es porque tienen el mismo id_venta en la tabla de item como en la de pagos entonces los pagos de efectivos se ven como tarjetas tambien y viceversa. Es decir el query esta haciendo lo correcto pero no es eso lo que quiero. Lo que quiero es que me lo muestro asi.

totalEfectivo
  #2 (permalink)  
Antiguo 18/03/2013, 15:37
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: extraer montos de DB por tipo de pagos

no termine de decir que lo que quiero es que con el query de efectivo me muestre 60 y con el de tarjeta me muestre 30
  #3 (permalink)  
Antiguo 18/03/2013, 15:49
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Respuesta: extraer montos de DB por tipo de pagos

Lo que te retorna la consulta es justamente lo que le estás pidiendo, la suma de las mutiplicaciones entre cantidad y precio. Si lo que quieres es que al cajero le salga cuanto le pagaron en efectivo y cuanto con tarjeta en un periodo de tiempo (lo que entiendo que buscas) la consulta sería diferente.

SELECT SUM(sp.monto_recibido) AS totalTarjeta FROM sales_pago sp
JOIN sales s ON s.id_venta=sp.id_venta
WHERE s.id_empleado=1 AND sp.tipo_pago='Tarjeta'

De la misma forma para hacerlo con Efectivo.

Me comentas si te funciona.

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #4 (permalink)  
Antiguo 18/03/2013, 16:01
 
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: extraer montos de DB por tipo de pagos

lo que pasa es que el campo monto_recibido contiene el monto que el socio entrego que mayormente en efectivo es mas. Es decir si vas a pagar 400 por lo general pasas 500. entonces el campo monto_recibido contendra 500 y si sumo esa cantidad lo mas probable es que la caja no cuadre porque se devolvieron 100. por eso es que utilizo el campo de precio para saber exactamente que fue lo que el cliente consumio no con cuanto pago. por eso es que tengo que utilizar la tabla de item
  #5 (permalink)  
Antiguo 18/03/2013, 16:10
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Respuesta: extraer montos de DB por tipo de pagos

en ese caso veo más conveniente agregar un campo monto_entregado o algo por el estilo, porque si lo haces como dices, complicarías innecesariamente (a mi modo de ver) las consultas. Ponte en el siguiente ejemplo

1.- un cliente compra 700 en productos, quiere pagar 400 en efectivo y 300 con tarjeta, pero cuando te paga el efectivo te pasa 500
2.- en la tabla de pagos tendrás efectivo 500 y tarjeta 300 verdad
3.- tendrás como única forma de saber de cuanto fue realmente la venta es sumando las multiplicaciones precio/cantidad como lo haces
4.- obtendrías que la venta fue de 700 lo cual te llevaría a concluir finalmente que se dió un vuelto (o cambio no se como se dirá en tu país) de 100

no te suena muy engorroso e innecesario? yo veo dos cosas, si realmente intereza cuadrar las cuentas, creo que no es necesario registrar las salidas de dinero, por lo cual la idea inicial que te dí si bien te funcionaría no creo que sea la mejor opción.

La otra opción, es en monto_recibido, es ingresar sólo el dinero que te quedará en caja (los 400 para el caso del ejemplo) y no el monto con el que se pagó (500 para el ejemplo).

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #6 (permalink)  
Antiguo 18/03/2013, 20:07
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: extraer montos de DB por tipo de pagos

Esto no es PHP.. cambia de foro.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:41.