<?php 
require_once 'db.php';
require_once 'Producto.php';
require_once 'Proveedor.php';
class compras extends conn { 

    public function ultimonfactura(){
    $conn = parent::crearconn();
    $sql = "select max(ID) from compra";
 $resulta = $conn->query($sql);
  $re=mysqli_fetch_row($resulta)[0];
 return $re;
}


//Metodo para mostrar todas las compras
public function getAllCompra()
{
$conn = parent::crearconn();
$sql = " SELECT c.ID, c.Fecha, c.Total_Compra, c.ID_Proveedor,us.Username as User, d.Nombre as Nombre_proveedor, d.Cedula as Cedula_proveedor  from compra c
INNER join proveedores p  on c.ID_Proveedor = p.ID 
INNER join usuario us  on c.ID_Usuario = us.ID 
INNER JOIN datos_personales d on p.CI_Datos = d.Cedula"; 

$result = $conn->query($sql);
$compras = array();
if ($result->num_rows > 0) {
     while ($row = $result->fetch_assoc()) {
         $compras[] = $row;
       }   
    }   
    return $compras;
} 
//Metodo para mostrar los detalles de la compra
public function getAllDetalles($idcompra)
{
$conn = parent::crearconn();
$sql = " SELECT d.Cantidad, d.Precio_Unt, d.subtotal, d.ID_Compra, d.ID_Productos, p.Nombre as Nombre_Producto from detalles_compra d inner join productos p on d.ID_Productos = p.Cod where ID_Compra = '$idcompra' "; 
$result = $conn->query($sql);
$detalles = array();
if ($result->num_rows > 0) {
     while ($row = $result->fetch_assoc()) {
         $detalles[] = $row;
       }   
    }   
    return $detalles;
}

public function getComprasConDetalles($fecha1, $fecha2, $verEliminados)
{
    $conn = parent::crearconn();
    
    $sql = "SELECT c.ID, c.Fecha, c.Total_Compra, c.delet_compra, c.ID_Proveedor, us.Username as User, d.Nombre as Nombre_proveedor, d.Cedula as Cedula_proveedor
            FROM compra c
            INNER JOIN proveedores p ON c.ID_Proveedor = p.ID
            INNER JOIN usuario us ON c.ID_Usuario = us.ID
            INNER JOIN datos_personales d ON p.CI_Datos = d.Cedula
            WHERE c.Fecha BETWEEN '$fecha1 00:00:00' AND '$fecha2 23:59:59'";

    if ($verEliminados) {
        $sql .= " AND c.delet_compra IS NOT NULL";
    } else {
        $sql .= " AND c.delet_compra IS NULL";
    }

    $result = $conn->query($sql);
    $compras = array();

    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $idCompra = $row['ID'];
            $row['detalles'] = $this->getAllDetalles($idCompra);
            $compras[] = $row;
        }
    }
    
    return $compras;
}

//Metodo para crear una compra
public function crearCompra($carrito, $totaldolar, $proveedor,$usuario)
{
$conn = parent::crearconn();
    foreach ($proveedor as $prove) {
  $query = "insert into compra values (null, now(), $totaldolar,'".$prove->id."',$usuario,null)"; //Aqui se inserta en la tabla compra
  $result = $conn->query($query);
  }
 $sql = "select max(ID) from compra";
 $resulta = $conn->query($sql);

$idultimacompra= 0;
if($reg= mysqli_fetch_array($resulta)) {
	$idultimacompra = $reg[0];
}

        foreach ($carrito as $p) {
            //Aqui se inserta la informacion en la tabla detalles compra
            $query2 = "insert into detalles_compra values (null,
             '".$p->cantidad."',
             '".$p->precio."',
            '".$idultimacompra."',
             '".$p->id."',
            '".$p->subTotal."',null)";
$result2 = $conn->query($query2);
$this->actualizarStock($p->id,$p->cantidad); //Usamos el metodo para actualizar el stock una vez generada la compra
        }
      
}   

//Metodo para actualizar el stock de un producto
public function actualizarStock($id, $stockAgregar) 
{
$conn = parent::crearconn();
$query = "select Stock_Actual from productos WHERE Cod = '$id'";
$r = $conn->query($query);
$stockActual= 0; 

  if ($reg=mysqli_fetch_array($r)){
      $stockActual = $reg[0];
      }
$stockActual += $stockAgregar ; 
$query = " UPDATE productos set Stock_Actual = $stockActual where Cod = '$id' "; 
$r = $conn->query($query);
}

//Metodo para eliminar una compra
public function deletecompra($compraId,$producto,$cantidad)
{
$conn = parent::crearconn();
 $query = "UPDATE `detalles_compra` SET `delet_compra` = now() WHERE ID_Compra = '$compraId'";
    $r = $conn->query($query);
$sql = "UPDATE `compra` SET `delet_compra` = now() WHERE ID = '$compraId'";
$resultado = $conn->query($sql);


 foreach ($producto as $key => $value) {
        $this->actualizarStockeliminado($value, $cantidad[$key]);
        }
}

//Metodo para actualizar el stock del producto cuando se elimina una compra
public function actualizarStockeliminado($id, $stockADescontar) 
{
$conn = parent::crearconn();
$query2 = "select Stock_Actual from productos WHERE Cod = '$id'";
$r = $conn->query($query2);
$stockActual= 0; 

 if ($reg=mysqli_fetch_array($r)){
      $stockActual = $reg[0];
       }
$stockActual -=  $stockADescontar ; 
$query3 = " UPDATE productos set Stock_Actual = $stockActual where Cod = '$id' "; 
  $r = $conn->query($query3);
}

//Metodo para consultar compra con los parametros de fecha 
public function consultar_compra($f1,$f2,$vereliminados)
{
$conn = parent::crearconn();    
$sql = "SELECT c.ID, c.Fecha, c.Total_Compra, c.delet_compra, c.ID_Proveedor,us.Username as User, d.Nombre as Nombre_proveedor, d.Cedula as Cedula_proveedor  from compra c
INNER join proveedores p  on c.ID_Proveedor = p.ID 
INNER join usuario us  on c.ID_Usuario = us.ID 
INNER JOIN datos_personales d on p.CI_Datos = d.Cedula
WHERE c.Fecha >= '$f1 00:00:00' and  c.Fecha <= '$f2 23:59:59'";
if ($vereliminados == 'true') {
        $sql .= " AND c.delet_compra IS NOT NULL";
    } else {
        $sql .= " AND c.delet_compra IS NULL";
    }

$result= mysqli_query($conn,$sql);
return $result ;
}


}


?>