<?php
function actualizarCostos($conexion){    
    $sqlCompras = "SELECT * FROM tbl_compra WHERE actualizar_costos='1'";                                        
    $conexion->prepare($sqlCompras);      

    $conexion->execute(); 
    $resCompras = $conexion->fetch();

    if(sizeof($resCompras) > 0)
    {
	    //detalles
	    $idsCompras = array();

	    foreach ($resCompras as $key => $compra) {
			$idsCompras[$compra['id']] = $compra['id'];
	    }

	    $sqlDetalle = "SELECT * FROM (SELECT * FROM `tbl_compra_detalle` ORDER BY `id_compra` DESC) AS tmp_table WHERE id_compra in (" . implode(',', $idsCompras) . ") GROUP BY LOWER(`id_producto`)";
		$conexion->prepare($sqlDetalle);

		$conexion->execute(); 
    	$resDetalles = $conexion->fetch();

    	//obtener recetas
    	$idsInsumos = array();

	    foreach ($resDetalles as $key => $detalle) {
			$idsInsumos[$detalle['id_producto']] = $detalle['id_producto'];
	    }

	    $sqlReceta = "SELECT * FROM cat_receta WHERE id_insumo in (" . implode(',', $idsInsumos) . ")";     
	    $conexion->prepare($sqlReceta);      

	    $conexion->execute(); 
	    $resReceta = $conexion->fetch();

	    //
	    foreach($resDetalles as $key => $ultimoCosto){
	    	$idProducto = $ultimoCosto['id_producto'];
	    	$costo = $ultimoCosto['precio_unitario'];

	    	//actualizo su receta
	    	foreach ($resReceta as $keyR => $receta) {
	    		if($receta['id_insumo'] == $idProducto)
	    		{    				
    				$merma = $receta['merma'];
    				$cosotOld = $receta['costo'];
    				$costoNew = $costo * $merma;

    				$sqlActualizarReceta = "UPDATE cat_receta SET costo=? WHERE id_receta=?";
    				$conexion->prepare($sqlActualizarReceta);                                                                                                                        
        			$conexion->bind("s", $costoNew); 
        			$conexion->bind("s", $receta['id_receta']);

        			$resultadoActualizarReceta = $conexion->execute();

        			if($resultadoActualizarReceta > 0)
        			{
        				//actualizar el precio
		                $sqlCosto = "UPDATE cat_producto SET precio=precio+?-? WHERE id_producto=?"; 
		                $conexion->prepare($sqlCosto);                                                                                        
		                $conexion->bind("s", $costoNew);
		                $conexion->bind("s", $cosotOld); 
		                $conexion->bind("s", $receta['id_producto']); 

		                $resultadoCosto = $conexion->execute();		  
        			}
	    		}
	    	}	    	
	    }

	    //actualizar las compras
    	$sqlActualizar = "UPDATE tbl_compra SET actualizar_costos='0' WHERE id in (" . implode(',', $idsCompras) . ")";
        $conexion->prepare($sqlActualizar);                                                                                                                                

        $resultadoActualizar = $conexion->execute();        
    }
    
    return true;
}