Php-sql, comprobar si una venta tiene o no tiene factura en dos tablas diferente

Llevo 4 días atascado en algo que no consigo resolver,
Tenemos 2 tablas
ventas (id_venta,id_cliente,total,fecha,id_vendedor)
Facturas(id_factura, neto, iva, total, estado, id_venta, fecha)
Hay más tablas, pero esas son las usadas para hacer esto concretamente
La idea es la siguiente primero mostramos todos los campos de la tabla ventas en html (esto no genera problemas)
Posteriormente generamos la venta y posteriormente la factura, al generar la venta la inserción va en la tabla ventas y al generar la factura la inserción va en la tabla facturas
Esto no es secuencial se puede hacer en cualquier momento, pero el problema viene aquí, cuando mostramos al principio todos los campos de la tabla ventas hay uno en el que tiene que poner si hay o no hay factura para esa venta
La idea es que compruebe si el campo id_venta es igual en las dos tablas, si es que existe en la tabla facturas,
el resultado debería ser 0 en caso de que no haya o 1 en caso de que haya factura para la venta.
Esto se esta haciendo con php pdo, yo haciendo lo mismo no consigo que me funcione correctamente.
Estos son mis métodos
Código: [Seleccionar]
public function listaVentas()
    {
        self::setNames();
        $sql="select ventas.id_venta as ventasidventa,
            destinatario_factura.nombre as nombre_destinatario,
            Vendedores.nombre as nombre_vendedor,
            Clientes.nombre as nombre_cliente,
            Total,
            Concat_ws('-', day(ventas. Fecha), month(ventas. Fecha), year(ventas. Fecha)) as fecha,
            Concat_ws(':', hour(ventas. Fecha), minute(ventas. Fecha)) as hora
from
                destinatario_factura,vendedores,ventas,clientes
where
                destinatario_factura.id_destinatario_factura=ventas.id_destinatario and
                clientes.id_cliente=ventas.id_cliente and
                vendedores.id_vendedor=ventas.id_vendedor";
        foreach ($this->conexion->query($sql) as $reg)
      {
           $this->personas[]=$reg;
      }
      return $this->personas;
            $this->conexion=null;
   }   
   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     
    public function compruebaExisteFactura($id)
    {
        self::setNames();
        $sql="select *
        from
        factura
        where
        id_venta=?";
         $stmt=$this->dbh->prepare($sql);
       if($stmt->execute( array($id) ) )
            {
                while($row = $stmt->fetch())
                {
                    $this->factura[]=$row;
                }
                return $this->factura;
                $this->conexion=null;
            }
    }
       }
y asi lo llamo desde otro documento
Código: [Seleccionar]
$trabajoinstan= new Trabajo();
$listandoventas=$trabajoinstan->listaVentas();
     for ($i = 0; $i < count($listandoventas); $i++)
{
$existefactura=$trabajoinstan->compruebaExisteFactura($listandoventas[$i]["ventasidventa"]);
}
Pienso que si es problema de la sentencia sql, serian dos sentencias y el resultado de una, se usaría como argumento de la otra, pienso que es así, no obstante si hay algún modo más sencillo de hacerlo lo agradecería

Respuesta
1

Php-sql, comprobar si una venta tiene o no tiene factura en dos tablas diferente

Hola,
Llevo 4 días atascado en algo que no consigo resolver,
Tenemos 2 tablas

ventas (id_venta,id_cliente,total,fecha,id_vendedor)

Facturas(id_factura, neto, iva, total, estado, id_venta, fecha)

Hay más tablas, pero esas son las usadas para hacer esto concretamente

La idea es la siguiente primero
Mostramos todos los campos de la tabla ventas en html (esto no genera
problemas)
Posteriormente generamos la venta y posteriormente la factura,¿<- Es 1 venta a muchas facturas?
Al generar
La venta la inserción va en la tabla ventas y al generar la factura la inserción va en la tabla facturas

Esto no es secuencial se puede hacer en cualquier momento, pero el problema viene aquí,

Cuando mostramos
Al principio todos los campos de la tabla ventas hay uno en el que tiene que poner <- Manual o despliegie de informacion
Si hay o no hay factura para esa venta

La idea es que compruebe si el campo id_venta es igual en las dos tablas, si es que existe en la
tabla facturas,

El resultado debería ser 0 en caso de que no haya o 1 en caso de que haya factura para la venta.

Esto se esta haciendo con php pdo, yo haciendo lo mismo no consigo que me funcione correctamente.
Estos son mis métodos

Código: [Seleccionar]

public function listaVentas()
    {
        self::setNames();
        $sql="select ventas.id_venta as ventasidventa,
            destinatario_factura.nombre as nombre_destinatario,
            Vendedores.nombre as nombre_vendedor,
            Clientes.nombre as nombre_cliente,
            Total,
            Concat_ws('-', day(ventas. Fecha), month(ventas. Fecha), year(ventas. Fecha)) as fecha,
            Concat_ws(':', hour(ventas. Fecha), minute(ventas. Fecha)) as hora
from
                destinatario_factura,
    vendedores,
    ventas,
    clientes
where
                destinatario_factura.id_destinatario_factura=ventas.id_destinatario and
                clientes.id_cliente=ventas.id_cliente and
                vendedores.id_vendedor=ventas.id_vendedor";
        foreach ($this->conexion->query($sql) as $reg)
      {
           $this->personas[]=$reg;
      }
      return $this->personas;
            $this->conexion=null;
   }  
   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    
    public function compruebaExisteFactura($id)
    {
        self::setNames();
        $sql="select *
        from
        factura
        where
        id_venta=?";
         $stmt=$this->dbh->prepare($sql);
       if($stmt->execute( array($id) ) )
            {
                while($row = $stmt->fetch())
                {
                    $this->factura[]=$row;
                }
                return $this->factura;
                $this->conexion=null;
            }
    }
       }
y asi lo llamo desde otro documento
Código: [Seleccionar]
$trabajoinstan= new Trabajo();
$listandoventas=$trabajoinstan->listaVentas();
     for ($i = 0; $i < count($listandoventas); $i++)
{
 $existefactura=$trabajoinstan->compruebaExisteFactura($listandoventas[$i]["ventasidventa"]);
}

Pienso que si es problema de la sentencia sql, serian dos sentencias y el resultado de una,
se usaría como argumento de la otra, pienso que es así, no obstante si hay algún modo más
sencillo de hacerlo lo agradecería

Adjunto query, y estoy convencido en que lo usuaras de acuerdo a tus necesidades.

select *,
id_venta= case when t1.id_venta  <> '' then 'Con Factura' else 'Sin Factura' end ,
ROW_NUMBER() OVER (ORDER BY  t1.id_factura desc)  as row from ventas t2 
left outer join   Facturas t1
on
t2.id_venta=t1.id_venta
--And t2.id_cliente='333' <- Basicamente obtiene los registros de la tabla facturas <- Con Factura indica que hay facturas,
<- Sin Factura indica que no hay facturas motivo por el cual regresa valores Nulos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas