<?php 
//incluir la conexion de base de datos
require "../config/Conexion.php";
class Ordenproduccion{


	//implementamos nuestro constructor
public function __construct(){

}

//metodo insertar registro
//insertar($idmaquila,$idusuario,$tipo_comprobante,$num_ordenproduccion,$fecha_hora,$total_unidades,$_POST["idarticulo"],$_POST["cantidad"]);
public function insertar($idmaquila,$idalmacent1,$idusuario,$tipo_comprobante,$num_ordenproduccion,$fecha_hora,$total_unidades,$nroguia,$idarticulo,$cantidad,$idarticulocompuesto,$idalmacen,$idalmacent){
	$sql="INSERT INTO ordenproduccion (idmaquila,idalmacen,idusuario,tipo_comprobante,num_ordenproduccion,fecha_hora,total_ordenproduccion,nroguia,estado) 
	                         VALUES ('$idmaquila','$idalmacent1','$idusuario','$tipo_comprobante','$num_ordenproduccion','$fecha_hora','$total_unidades','$nroguia','Pendiente')";
	echo $sql;
	//return ejecutarConsulta($sql);
	
	$sw						=true;
	$idordenproduccionew	=ejecutarConsulta_retornarID($sql) or $sw=false;
	$num_elementos			=0;
	if ($sw){
		while ($num_elementos < count($idarticulo)) {
			//Se verifica si es un articulo o un servicio
			$sql_detalle="INSERT INTO detalle_ordenproduccion (idordenproduccion,idarticulo,cantidad,nroguia,backorder,idarticulocompuesto,idalmaceni,idalmacent) 
			VALUES('$idordenproduccionew','$idarticulo[$num_elementos]','$cantidad[$num_elementos]','$nroguia','0','$idarticulocompuesto[$num_elementos]','$idalmacen[$num_elementos]','$idalmacent[$num_elementos]')";
			echo $sql_detalle;
			ejecutarConsulta($sql_detalle) or $sw=false;
			$num_elementos=$num_elementos+1;	   
		}
	}
	if ($sw) {
		// Actualizamos los numeros de facturas,control y ordenproduccion
		$idempresa_venta 	= 	$_SESSION['idempresa_venta_empresa'];
		/* $nrofactura			=	$num_comprobante + 1;
		$nrocontrol			=	$serie_comprobante + 1; */
		
		$nroordenproduccion	= $num_ordenproduccion + 1;
		$sql_update		=	"UPDATE empresa_venta SET nroordenproduccion='$nroordenproduccion' WHERE idempresa_venta='$idempresa_venta'";
		//echo $sql_update;
		ejecutarConsulta($sql_update);
	}
 
	return $sw;
}

public function actualizar($idordenproduccion,$idmaquila,$idalmacent1,$idusuario,$tipo_comprobante,$num_ordenproduccion,$fecha_hora,$total_unidades,$nroguia,$idarticulo,$cantidad,$idarticulocompuesto,$idalmacen,$idalmacent){
	$sql = "UPDATE ordenproduccion SET idmaquila='$idmaquila',idusuario='$idusuario',tipo_comprobante='$tipo_comprobante',
	num_ordenproduccion='$num_ordenproduccion',nroguia='$nroguia',fecha_hora='$fecha_hora',total_ordenproduccion='$total_unidades',estado='Pendiente',idalmacen='$idalmacent1' 
	WHERE idordenproduccion='$idordenproduccion'";
	$sw	= true;
	echo $sql;
	ejecutarConsulta($sql) or $sw=false;
	// Si todo va bien actualizamos los productos de la orden de producción


	$num_elementos	=	0;
	$sw				=	true;
	while ($num_elementos < count($idarticulo)) {
		//Se actualiiza o agrega un producto
		$sql 	= "SELECT * FROM detalle_ordenproduccion WHERE idordenproduccion='$idordenproduccion' AND idarticulo='$idarticulo[$num_elementos]'";
		$result	=	ejecutarConsulta($sql);
		if (mysqli_num_rows($result) > 0) {
			$sql_detalle="UPDATE detalle_ordenproduccion SET cantidad='$cantidad[$num_elementos]'
			WHERE idordenproduccion='$idordenproduccion' AND idarticulo='$idarticulo[$num_elementos]'";
			echo $sql_detalle;
			ejecutarConsulta($sql_detalle) or $sw=false;
		}else{
			$sql_detalle="INSERT INTO detalle_ordenproduccion (idordenproduccion,idarticulo,cantidad,nroguia,backorder,idarticulocompuesto,idalmaceni,idalmacent) 
			VALUES('$idordenproduccion','$idarticulo[$num_elementos]','$cantidad[$num_elementos]','$nroguia','0','$idarticulocompuesto[$num_elementos]','$idalmacen[$num_elementos]','$idalmacent[$num_elementos]')";
			echo $sql_detalle;
			ejecutarConsulta($sql_detalle) or $sw=false;
		}
		$num_elementos=$num_elementos+1;
	}

	//Ahora comparamos los articulos compuesto de la BD con el que viene del sistema
	$sqlc		="SELECT * FROM detalle_ordenproduccion WHERE idordenproduccion='$idordenproduccion'";
	$result		=	ejecutarConsulta($sqlc);
	if (mysqli_num_rows($result) > 0) {
		while($fila = mysqli_fetch_assoc($result)){
			$idart =  $fila["idarticulo"];
			if (!in_array($idart, $idarticulo)) {
				//Si no existe el ariculo entonces procedemos borrarlo;
				$sqld = "DELETE FROM detalle_ordenproduccion WHERE idordenproduccion='$idordenproduccion' AND idarticulo='$idart'";
				ejecutarConsulta($sqld) or $sw=false;
			}
		}
	}
	/*
	if ($sw){	
		//borramos todos los productos de la orden de producción
		$sql 	= "DELETE FROM detalle_ordenproduccion WHERE idordenproduccion='$idordenproduccion'";
		$sw		= true;
		echo $sql;
		ejecutarConsulta($sql) or $sw=false;
		// Ahora si todo esta bien agregamos los productos
		$num_elementos	= 0;
		if ($sw){
			while ($num_elementos < count($idarticulo)) {
				//Se verifica si es un articulo o un servicio
				$sql_detalle="INSERT INTO detalle_ordenproduccion (idordenproduccion,idarticulo,cantidad,nroguia,backorder,idarticulocompuesto) 
				VALUES('$idordenproduccion','$idarticulo[$num_elementos]','$cantidad[$num_elementos]','$nroguia','0','$idarticulocompuesto[$num_elementos]','$idalmacen[$num_elementos]','$idalmacent[$num_elementos]')";
				//echo $sql_detalle;
				ejecutarConsulta($sql_detalle) or $sw=false;
				$num_elementos=$num_elementos+1;	   
			}
		}
	}
		*/
	return $sw;
}

public function anular($idordenproduccion){
	$sql="UPDATE ordenproduccion SET estado='Anulado' WHERE idordenproduccion='$idordenproduccion'";
	return ejecutarConsulta($sql);
}

//metodo para buscar un proveedor
public function buscarNroGuia($nroguia){
	$sql="SELECT * FROM ordenproduccion WHERE nroguia='$nroguia'";
	return ejecutarConsultaSimpleFila($sql);
}

/*
public function procesarordenproduccion($idordenproduccion){
	//Buscamos los articulos de la orden de produccion para actualizar los stock de los productos terminados
	$sql	="SELECT * FROM detalle_ordenproduccion WHERE idordenproduccion='$idordenproduccion'";
	$sw		= true;
	echo $sql;
	$result	=ejecutarConsulta($sql) or $sw=false;
	if (mysqli_num_rows($result) > 0) {
		while($fila = mysqli_fetch_assoc($result)){
			$idarticulo = $fila["idarticulo"];
			$idarticulocompuesto = $fila["idarticulocompuesto"];
			$cantidad	= $fila["cantidad"];
			$nl			= $fila["nroguia"];
			if ($nl==''){
				$nl = $idordenproduccion;
			}
			$fl			= date('Y-m-d');
			$idalmacen	= $fila["idalmacent"];
			//Actualizamos las cantidades en la tabla de orden procesada
			$sql_detalle	="INSERT INTO detalle_ordenproduccionprocesada (idordenproduccion,idalmacen,idarticulo,idarticulocompuesto,cantidad,numerolote,fechalote) 
						 VALUES('$idordenproduccion','$idalmacen','$idarticulo','$idarticulocompuesto','$cantidad','$nl','$fl')";
			echo $sql_detalle;
			ejecutarConsulta($sql_detalle) or $sw=false;
			if (!$sw){
				$sw = false;
				break;
			}			 
		}
	} else {
		$sw=false;
		die("Error: No hay datos en la tabla seleccionada");
	}

	//Ahora vamos actualizar los insumos
	if ($sw){
		//Buscamos los productos de la orden de producción
		$sql1	="SELECT * FROM detalle_ordenproduccionprocesada WHERE idordenproduccion='$idordenproduccion'";
		echo $sql1;
		$resultpr	= ejecutarConsulta($sql1) or $sw=false;
		if (mysqli_num_rows($resultpr) > 0) {
			while($fila = mysqli_fetch_assoc($resultpr)){
				//Para cada producto procedemos a buscar los insumos
				$idarticulo 	= $fila["idarticulocompuesto"];
				$cantidadt		= $fila["cantidad"];
				$sqlc 				= "SELECT d.iddetalle_articulocompuesto,d.idarticulocompuesto,d.idarticuloorigen,d.idarticulo,d.idalmacen,d.idunidademedidad,d.cantidad/u.factor as cantidad 
				FROM detalle_articulocompuesto d INNER JOIN unidademedidad u ON u.idunidademedidad=d.idunidademedidad WHERE d.idarticulocompuesto='$idarticulo'";
				echo $sqlc;
				$resultc		= ejecutarConsulta($sqlc) or $sw=false;
				if (mysqli_num_rows($resultc) > 0) {
					while($fila1 = mysqli_fetch_assoc($resultc)){
						//Buscamos de que lote descontar
						$idarticulo1 	= $fila1["idarticulo"];
						$cantidad		= $fila1["cantidad"]*$cantidadt;
						$idalmacen		= $fila1["idalmacen"];
					//	$sql_lote 		= "SELECT idlote, idarticulo, numerolote, fecha, cantidad FROM lote WHERE idarticulo='$idarticulo1' AND cantidad>0";
						$sql_lote 		= "SELECT l.idlote, l.idarticulo, l.numerolote, l.fecha, l.cantidad/u.factor as cantidad,u.nombre FROM lote l INNER JOIN articulo a ON a.idarticulo=l.idarticulo INNER JOIN unidademedidad u ON u.idunidademedidad=a.idunidademedidad WHERE l.idarticulo='$idarticulo1' AND l.cantidad>0";
						echo $sql_lote;
						$resultl		=	ejecutarConsulta($sql_lote);

						if (mysqli_num_rows($resultl) > 0) {
							$cantidad1=$cantidad;
							while($fila2 = mysqli_fetch_assoc($resultl)){
								$cantidadi 	= $cantidad1;
								$nl 				= $fila2["numerolote"];
								$fl					= $fila2["fecha"];
								$cantidadl	= $fila2["cantidad"];
								$cantidad1 	= $cantidad1 - $cantidadl;
								//Ahora vamos actualizar la tabla de productosprocesadoinsumo
								if ($cantidad1>0){
									//$sql_detalle="INSERT INTO detalle_venta (idventa,idarticulo,cantidad,precio_venta,descuento,numerolote,idalmacen,impuestoart18,preciopvp) VALUES('$idventanew','$idarticulo[$num_elementos]','$cantidadl','$precio_venta[$num_elementos]','$descuento[$num_elementos]','$numerolote','$idalmacen[$num_elementos]','$impoart18[$num_elementos]','$precio_ventapvp[$num_elementos]')";
									$sql_detalle	="INSERT INTO detalle_ordenproduccionprocesadainsumo (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
						 							  VALUES('$idordenproduccion','$idalmacen','$idarticulo1','$cantidadl','$nl','$fl')";
									echo $sql_detalle;
									ejecutarConsulta($sql_detalle) or $sw=false;
								}else{
									//$sql_detalle="INSERT INTO detalle_venta (idventa,idarticulo,cantidad,precio_venta,descuento,numerolote,idalmacen,impuestoart18,preciopvp) VALUES('$idventanew','$idarticulo[$num_elementos]','$cantidadi','$precio_venta[$num_elementos]','$descuento[$num_elementos]','$numerolote','$idalmacen[$num_elementos]','$impoart18[$num_elementos]','$precio_ventapvp[$num_elementos]')";
									$sql_detalle	="INSERT INTO detalle_ordenproduccionprocesadainsumo (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
						 							  VALUES('$idordenproduccion','$idalmacen','$idarticulo1','$cantidadi','$nl','$fl')";
									echo $sql_detalle;
									ejecutarConsulta($sql_detalle) or $sw=false;
									break;
								}
							}
							//Se verifica si el articulo se quedo sin stock
							if ($cantidad1>0){
								$sql_detalle	="INSERT INTO detalle_articulosinstock (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
						 						VALUES('$idordenproduccion','$idalmacen','$idarticulo1','$cantidad1','$nl','$fl')";
								echo $sql_detalle;
								ejecutarConsulta($sql_detalle) or $sw=false;
							}
							
						} else {
							//die("Error: No hay datos en la tabla seleccionada");
							
							$sqlc 			= "SELECT l.idlote, l.idarticulo, l.numerolote, l.fecha, l.cantidad/u.factor as cantidad,u.nombre FROM lote l INNER JOIN articulo a ON a.idarticulo=l.idarticulo 
												INNER JOIN unidademedidad u ON u.idunidademedidad=a.idunidademedidad 
												WHERE l.idarticulo='$idarticulo' 
												LIMIT 1";
							echo $sqlc;
							$resultc	= ejecutarConsulta($sqlc) or $sw=false;
							$fila2 		= mysqli_fetch_assoc($resultc);
							$idarticulo1 	= $fila2["idarticulo"];
							$idalmacen		= $fila2["idalmacen"];
							$nl 			= $fila2["numerolote"];
							$fl				= $fila2["fecha"];
							$cantidad1=$cantidad;
							$sql_detalle	="INSERT INTO detalle_articulosinstock (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
											VALUES('$idordenproduccion','$idalmacen','$idarticulo1','$cantidad1','$nl','$fl')";
							echo $sql_detalle;
							ejecutarConsulta($sql_detalle) or $sw=false;
							
						}	
					}	
				}else{
					
					$sw=false;
					die("Error: No hay datos en la tabla seleccionada");
				}
			}
		}else{
			$sw=false;
			die("Error: No hay datos en la tabla seleccionada");
		}	
	}


	//Si sé proceso bien cambiamos el estado de la orden de Producción
	if ($sw){
		$sql="UPDATE ordenproduccion SET estado='Procesada' WHERE idordenproduccion='$idordenproduccion'";
		$result	=ejecutarConsulta($sql) or $sw=false;
	}
	
	return ($sw);
}
*/

public function procesarordenproduccion($idordenproduccion){
	//Buscamos los articulos de la orden de produccion para actualizar los stock de los productos terminados
	$sql	="SELECT * FROM detalle_ordenproduccion WHERE idordenproduccion='$idordenproduccion'";
	$sw		= true;
	echo $sql;
	$result	=ejecutarConsulta($sql) or $sw=false;
	if (mysqli_num_rows($result) > 0) {
		while($fila = mysqli_fetch_assoc($result)){
			$idarticulo = $fila["idarticulo"];
			$idarticulocompuesto = $fila["idarticulocompuesto"];
			$cantidad	= $fila["cantidad"];
			$nl			= $fila["nroguia"];
			if ($nl==''){
				$nl = $idordenproduccion;
			}
			$fl			= date('Y-m-d');
			$idalmacen	= $fila["idalmacent"];
			//Actualizamos las cantidades en la tabla de orden procesada
			$sql_detalle	="INSERT INTO detalle_ordenproduccionprocesada (idordenproduccion,idalmacen,idarticulo,idarticulocompuesto,cantidad,numerolote,fechalote) 
						 VALUES('$idordenproduccion','$idalmacen','$idarticulo','$idarticulocompuesto','$cantidad','$nl','$fl')";
			echo $sql_detalle;
			ejecutarConsulta($sql_detalle) or $sw=false;
			if (!$sw){
				$sw = false;
				break;
			}			 
		}
	} else {
		$sw=false;
		die("Error: No hay datos en la tabla seleccionada");
	}

	//Ahora vamos actualizar los insumos
	if ($sw){
		//Buscamos los productos de la orden de producción
		$sql1	="SELECT * FROM detalle_ordenproduccionprocesada WHERE idordenproduccion='$idordenproduccion'";
		echo $sql1;
		$resultpr	= ejecutarConsulta($sql1) or $sw=false;
		if (mysqli_num_rows($resultpr) > 0) {
			while($fila = mysqli_fetch_assoc($resultpr)){
				//Para cada producto procedemos a buscar los insumos
				$idarticulo 	= $fila["idarticulocompuesto"];
				$cantidadt		= $fila["cantidad"];
				$sqlc 				= "SELECT d.iddetalle_articulocompuesto,d.idarticulocompuesto,d.idarticuloorigen,d.idarticulo,d.idalmacen,d.idunidademedidad,d.cantidad/u.factor as cantidad 
				FROM detalle_articulocompuesto d INNER JOIN unidademedidad u ON u.idunidademedidad=d.idunidademedidad WHERE d.idarticulocompuesto='$idarticulo'";
				echo $sqlc;
				$resultc		= ejecutarConsulta($sqlc) or $sw=false;
				if (mysqli_num_rows($resultc) > 0) {
					while($fila1 = mysqli_fetch_assoc($resultc)){
						//Buscamos de que lote descontar
						$idarticulo1 	= $fila1["idarticulo"];
						$cantidad		= $fila1["cantidad"]*$cantidadt;
						$idalmacen		= $fila1["idalmacen"];
					//	$sql_lote 		= "SELECT idlote, idarticulo, numerolote, fecha, cantidad FROM lote WHERE idarticulo='$idarticulo1' AND cantidad>0";
					//	$sql_lote 		= "SELECT l.idlote, l.idarticulo, l.numerolote, l.fecha, l.cantidad/u.factor as cantidad,u.nombre FROM lote l INNER JOIN articulo a ON a.idarticulo=l.idarticulo INNER JOIN unidademedidad u ON u.idunidademedidad=a.idunidademedidad WHERE l.idarticulo='$idarticulo1' AND l.cantidad>0";
						$sql_lote		= "SELECT l.idlote, l.idarticulo, l.numerolote, l.fecha, 
											l.cantidad/(IFNULL(u.factor,1)) as cantidad,u.nombre,u.nombre,u.factor ,u.idunidademedidad,a.idunidademedidad,a.nombre as articulo
											FROM lote l 
											INNER JOIN articulo a ON a.idarticulo=l.idarticulo 
											LEFT JOIN unidademedidad u ON u.idunidademedidad=a.idunidademedidad 
											WHERE l.idarticulo='$idarticulo1' 
											AND l.cantidad>0";
						echo $sql_lote;
						$resultl		=	ejecutarConsulta($sql_lote);

						if (mysqli_num_rows($resultl) > 0) {
							$cantidad1=$cantidad;
							while($fila2 = mysqli_fetch_assoc($resultl)){
								$cantidadi 	= $cantidad1;
								$nl 				= $fila2["numerolote"];
								$fl					= $fila2["fecha"];
								$cantidadl	= $fila2["cantidad"];
								$cantidad1 	= $cantidad1 - $cantidadl;
								//Ahora vamos actualizar la tabla de productosprocesadoinsumo
								if ($cantidad1>0){
									//$sql_detalle="INSERT INTO detalle_venta (idventa,idarticulo,cantidad,precio_venta,descuento,numerolote,idalmacen,impuestoart18,preciopvp) VALUES('$idventanew','$idarticulo[$num_elementos]','$cantidadl','$precio_venta[$num_elementos]','$descuento[$num_elementos]','$numerolote','$idalmacen[$num_elementos]','$impoart18[$num_elementos]','$precio_ventapvp[$num_elementos]')";
									$sql_detalle	="INSERT INTO detalle_ordenproduccionprocesadainsumo (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
						 							  VALUES('$idordenproduccion','$idalmacen','$idarticulo1','$cantidadl','$nl','$fl')";
									echo $sql_detalle;
									ejecutarConsulta($sql_detalle) or $sw=false;
								}else{
									//$sql_detalle="INSERT INTO detalle_venta (idventa,idarticulo,cantidad,precio_venta,descuento,numerolote,idalmacen,impuestoart18,preciopvp) VALUES('$idventanew','$idarticulo[$num_elementos]','$cantidadi','$precio_venta[$num_elementos]','$descuento[$num_elementos]','$numerolote','$idalmacen[$num_elementos]','$impoart18[$num_elementos]','$precio_ventapvp[$num_elementos]')";
									$sql_detalle	="INSERT INTO detalle_ordenproduccionprocesadainsumo (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
						 							  VALUES('$idordenproduccion','$idalmacen','$idarticulo1','$cantidadi','$nl','$fl')";
									echo $sql_detalle;
									ejecutarConsulta($sql_detalle) or $sw=false;
									break;
								}
							}
							//Se verifica si el articulo se quedo sin stock
							if ($cantidad1>0){
								$sql_detalle	="INSERT INTO detalle_articulosinstock (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
						 						VALUES('$idordenproduccion','$idalmacen','$idarticulo1','$cantidad1','$nl','$fl')";
								echo $sql_detalle;
								ejecutarConsulta($sql_detalle) or $sw=false;
							}
							
						} else {
							//die("Error: No hay datos en la tabla seleccionada");
							
							$sqlc 			= "SELECT l.idlote, l.idarticulo, l.numerolote, l.fecha, l.cantidad/u.factor as cantidad,u.nombre FROM lote l INNER JOIN articulo a ON a.idarticulo=l.idarticulo 
												INNER JOIN unidademedidad u ON u.idunidademedidad=a.idunidademedidad 
												WHERE l.idarticulo='$idarticulo1' 
												LIMIT 1";
							echo $sqlc;
							$resultc	= ejecutarConsulta($sqlc) or $sw=false;
							$fila2 		= mysqli_fetch_assoc($resultc);
							$idarticulo2 	= $fila2["idarticulo"];
							//$idalmacen		= $fila2["idalmacen"];
							$nl 			= $fila2["numerolote"];
							$fl				= $fila2["fecha"];
							$cantidad1=$cantidad;
							$sql_detalle	="INSERT INTO detalle_articulosinstock (idordenproduccionprocesada,idalmacen,idarticulo,cantidad,numerolote,fechalote) 
											VALUES('$idordenproduccion','$idalmacen','$idarticulo2','$cantidad1','$nl','$fl')";
							echo $sql_detalle;
							ejecutarConsulta($sql_detalle) or $sw=false;
							
						}	
					}	
				}else{
					
					$sw=false;
					die("Error: No hay datos en la tabla seleccionada");
				}
			}
		}else{
			$sw=false;
			die("Error: No hay datos en la tabla seleccionada");
		}	
	}


	//Si sé proceso bien cambiamos el estado de la orden de Producción
	if ($sw){
		$sql="UPDATE ordenproduccion SET estado='Procesada' WHERE idordenproduccion='$idordenproduccion'";
		$result	=ejecutarConsulta($sql) or $sw=false;
	}
	
	return ($sw);
}



public function eliminararticulodecafeteriabd($iddetallec,$idordenproduccionc,$idarticuloc){
	$sql="DELETE FROM detalle_barra WHERE iddetalle_ordenproduccion='$iddetallec' AND idordenproduccion='$idordenproduccionc' AND idarticulo='$idarticuloc'";
	return ejecutarConsulta($sql);
}


//implementar un metodopara mostrar los datos de unregistro a modificar
public function mostrar($idordenproduccion){
	$sql="SELECT v.idordenproduccion,DATE(v.fecha_hora) as fecha,v.idmaquila,p.nombre as maquila,p.num_documento, p.tipo_documento,u.idusuario,u.nombre as usuario, v.tipo_comprobante,v.total_ordenproduccion,v.estado,v.num_ordenproduccion,v.nroguia FROM ordenproduccion v INNER JOIN persona p ON v.idmaquila=p.idpersona INNER JOIN usuario u ON v.idusuario=u.idusuario LEFT join vendedor ve ON p.idzona=ve.idzona WHERE idordenproduccion='$idordenproduccion'";
	return ejecutarConsultaSimpleFila($sql);
}

public function listarDetalle($idordenproduccion){
	$sql="SELECT 
	dv.idordenproduccion,
	dv.idarticulo,
	a.nombre,
	dv.cantidad as total,
	dv.idalmaceni,
	ai.nombre as almaceni,
	dv.idalmacent,
	at1.nombre as almacent,
	dv.idarticulocompuesto,
	dv.numerolote,
	dv.fechalote,
	dv.nroguia FROM detalle_ordenproduccion dv INNER JOIN articulo a ON dv.idarticulo=a.idarticulo INNER JOIN ordenproduccion p ON dv.idordenproduccion=p.idordenproduccion LEFT JOIN almacen ai ON ai.idalmacen=dv.idalmaceni LEFT JOIN almacen at1 ON at1.idalmacen=dv.idalmacent
	WHERE dv.idordenproduccion='$idordenproduccion'";
	return ejecutarConsulta($sql);
}

//listar registros
public function listar(){
	//$sql="SELECT v.idordenproduccion,DATE(v.fecha_hora) as fecha,v.idmaquila,p.nombre as maquila,u.idusuario,u.nombre as usuario, v.tipo_comprobante,v.total_ordenproduccion,v.estado,v.num_ordenproduccion,v.nroguia FROM ordenproduccion v INNER JOIN persona p ON v.idmaquila=p.idpersona INNER JOIN usuario u ON v.idusuario=u.idusuario ORDER BY v.idordenproduccion DESC";
	$sql="SELECT v.idordenproduccion,DATE(v.fecha_hora) as fecha,v.idmaquila,p.nombre as maquila,u.idusuario,u.nombre as usuario, v.tipo_comprobante,v.total_ordenproduccion,v.estado,v.num_ordenproduccion,v.nroguia,dp.articulo
		FROM ordenproduccion v 
		INNER JOIN persona p ON v.idmaquila=p.idpersona 
		INNER JOIN usuario u ON v.idusuario=u.idusuario 
		LEFT JOIN (SELECT 
			d.idordenproduccion,
			GROUP_CONCAT(d.idalmaceni) AS almaceni,
			GROUP_CONCAT(d.idalmacent) AS almacent,
			GROUP_CONCAT(d.idarticulo) AS idarticulo,
			GROUP_CONCAT(a.nombre) AS articulo
		FROM 
			detalle_ordenproduccion d 
		LEFT JOIN 
			articulo a ON a.idarticulo = d.idarticulo
		GROUP BY 
			d.idordenproduccion) dp ON dp.idordenproduccion=v.idordenproduccion
		ORDER BY v.idordenproduccion DESC";
	return ejecutarConsulta($sql);
}

//listar registros
public function listarArticulossinstock($idordenproduccion){
	//$sql="SELECT d.idordenproduccion,d.idarticulo,art.nombre as articulocompuesto,d.cantidad,ac.idarticulo as idcompuesto,dc.idarticuloorigen,dc.idarticulo as iddetalle, ar.idarticulo as idarticuloinventario,ar.nombre,dc.cantidad as cantidadpreparacion, ((dc.cantidad/u1.factor)*d.cantidad) as cantidadpedida, ar.stock/u2.factor as stock,ar.idunidademedidad,u1.idunidademedidad,u1.factor,((ar.stock/u2.factor)-((dc.cantidad/u1.factor)*d.cantidad)) as stockfinal FROM detalle_ordenproduccion d INNER JOIN articulocompuesto ac ON ac.idarticulocompuesto=d.idarticulocompuesto INNER JOIN articulo art ON art.idarticulo=ac.idarticulo INNER JOIN detalle_articulocompuesto dc ON dc.idarticulocompuesto=ac.idarticulocompuesto INNER JOIN articulo ar ON ar.idarticulo=dc.idarticulo INNER JOIN unidademedidad u2 ON u2.idunidademedidad=ar.unidademedidad INNER JOIN unidademedidad u1 ON u1.idunidademedidad=dc.idunidademedidad WHERE d.idordenproduccion='$idordenproduccion'";
	$sql="SELECT 
		o.idordenproduccion,
		d.idarticulo,
        ar1.nombre as articulocompuesto,
		d.cantidad,
		d.idarticulocompuesto AS idcompuesto,
        af.idarticuloorigen AS idarticuloorigen,
		af.idarticuloi AS iddetalle,
        af.idarticuloi AS idarticuloinventario,
		af.articulo as nombre,
		
		af.cantidadporunidad as cantidadpreparacion,
		af.cantidadporunidad*d.cantidad as cantidadpedida,
        af.stockporunidadmedida AS stock,
        af.stockporunidadmedida-(af.cantidadporunidad*d.cantidad) AS stockfinal,
        af.unidademedidadi,
        af.factori,
        af.unidademedidadif,
        af.factorif
		-- COUNT(af.stockporunidadmedida-(af.cantidadporunidad*d.cantidad)) AS stockconproduccion,
		-- COUNT(af.stockporunidadmedida-(af.cantidadporunidad*d.cantidad)) AS nroprductosinstock
		FROM ordenproduccion o
		INNER JOIN detalle_ordenproduccion d ON d.idordenproduccion=o.idordenproduccion
		LEFT JOIN 
		(SELECT dc.idarticulocompuesto,dc.idarticuloorigen,dc.idarticulo as idarticuloi,ar.nombre as articulo,
		u1.nombre as unidademedidadi,u1.factor as factori,
		dc.idalmacen,
		u2.nombre as unidademedidadif,u2.factor as factorif,
		dc.cantidad,
		dc.cantidad/u2.factor AS cantidadporunidad,
		CASE dc.idalmacen
				WHEN 1 THEN almacen1.stock
				WHEN 2 THEN almacen2.stock
				WHEN 3 THEN almacen3.stock
				WHEN 4 THEN almacen4.stock
				WHEN 5 THEN almacen5.stock
				WHEN 6 THEN almacen6.stock
				WHEN 7 THEN almacen7.stock
				WHEN 8 THEN almacen8.stock
				ELSE almacen9.stock
			END AS stocki,
		(CASE dc.idalmacen
				WHEN 1 THEN almacen1.stock
				WHEN 2 THEN almacen2.stock
				WHEN 3 THEN almacen3.stock
				WHEN 4 THEN almacen4.stock
				WHEN 5 THEN almacen5.stock
				WHEN 6 THEN almacen6.stock
				WHEN 7 THEN almacen7.stock
				WHEN 8 THEN almacen8.stock
				ELSE almacen9.stock
			END)/u2.factor AS stockporunidadmedida
		FROM detalle_articulocompuesto dc
		LEFT JOIN articulo ar ON ar.idarticulo=dc.idarticulo
		LEFT JOIN unidademedidad u1 ON u1.idunidademedidad=ar.idunidademedidad
		LEFT JOIN unidademedidad u2 ON u2.idunidademedidad=dc.idunidademedidad
		-- Unimos las tablas de almacenes individualmente según el `idalmacen`
		LEFT JOIN almacen1 ON dc.idalmacen = 1 AND almacen1.idarticulo = dc.idarticulo
		LEFT JOIN almacen2 ON dc.idalmacen = 2 AND almacen2.idarticulo = dc.idarticulo
		LEFT JOIN almacen3 ON dc.idalmacen = 3 AND almacen3.idarticulo = dc.idarticulo
		LEFT JOIN almacen4 ON dc.idalmacen = 4 AND almacen4.idarticulo = dc.idarticulo
		LEFT JOIN almacen5 ON dc.idalmacen = 5 AND almacen5.idarticulo = dc.idarticulo
		LEFT JOIN almacen6 ON dc.idalmacen = 6 AND almacen6.idarticulo = dc.idarticulo
		LEFT JOIN almacen7 ON dc.idalmacen = 7 AND almacen7.idarticulo = dc.idarticulo
		LEFT JOIN almacen8 ON dc.idalmacen = 8 AND almacen8.idarticulo = dc.idarticulo
		LEFT JOIN almacen9 ON dc.idalmacen = 9 AND almacen9.idarticulo = dc.idarticulo) af ON af.idarticulocompuesto=d.idarticulocompuesto
        -- Articulo de Factory
        LEFT JOIN articulo ar1 ON ar1.idarticulo=d.idarticulo
		WHERE af.stockporunidadmedida-(af.cantidadporunidad*d.cantidad) <0
		AND o.idordenproduccion='1'";
	return ejecutarConsulta($sql);
}

//listar registros
public function listarporordent($idordenproduccion){
	//$sql="SELECT SUM(IF(((ar.stock/u1.factor)-((dc.cantidad/u2.factor)*d.cantidad))>0,0,1)) as nroprductosinstock FROM detalle_ordenproduccion d INNER JOIN articulocompuesto ac ON ac.idarticulocompuesto=d.idarticulocompuesto INNER JOIN detalle_articulocompuesto dc ON dc.idarticulocompuesto=ac.idarticulocompuesto INNER JOIN unidademedidad u2 ON u2.idunidademedidad=dc.idunidademedidad INNER JOIN articulo ar ON ar.idarticulo=dc.idarticulo INNER JOIN unidademedidad u1 ON u1.idunidademedidad=ar.idunidademedidad WHERE d.idordenproduccion='$idordenproduccion'";
	$sql="SELECT 
		o.idordenproduccion,
		d.idarticulo,
		d.cantidad,
		d.idarticulocompuesto,
		af.idarticuloi,
		af.articulo,
		af.stockporunidadmedida,
		af.cantidadporunidad,
		af.cantidadporunidad*d.cantidad as cantidadp,
		-- COUNT(af.stockporunidadmedida-(af.cantidadporunidad*d.cantidad)) AS stockconproduccion,
		COUNT(af.stockporunidadmedida-(af.cantidadporunidad*d.cantidad)) AS nroprductosinstock
		FROM ordenproduccion o
		INNER JOIN detalle_ordenproduccion d ON d.idordenproduccion=o.idordenproduccion
		LEFT JOIN 
		(SELECT dc.idarticulocompuesto,dc.idarticuloorigen,dc.idarticulo as idarticuloi,ar.nombre as articulo,
		u1.nombre as unidademedidadi,u1.factor as factori,
		dc.idalmacen,
		u2.nombre as unidademedidadif,u2.factor as factorif,
		dc.cantidad,
		dc.cantidad/u2.factor AS cantidadporunidad,
		CASE dc.idalmacen
				WHEN 1 THEN almacen1.stock
				WHEN 2 THEN almacen2.stock
				WHEN 3 THEN almacen3.stock
				WHEN 4 THEN almacen4.stock
				WHEN 5 THEN almacen5.stock
				WHEN 6 THEN almacen6.stock
				WHEN 7 THEN almacen7.stock
				WHEN 8 THEN almacen8.stock
				ELSE almacen9.stock
			END AS stocki,
		(CASE dc.idalmacen
				WHEN 1 THEN almacen1.stock
				WHEN 2 THEN almacen2.stock
				WHEN 3 THEN almacen3.stock
				WHEN 4 THEN almacen4.stock
				WHEN 5 THEN almacen5.stock
				WHEN 6 THEN almacen6.stock
				WHEN 7 THEN almacen7.stock
				WHEN 8 THEN almacen8.stock
				ELSE almacen9.stock
			END)/u2.factor AS stockporunidadmedida
		FROM detalle_articulocompuesto dc
		LEFT JOIN articulo ar ON ar.idarticulo=dc.idarticulo
		LEFT JOIN unidademedidad u1 ON u1.idunidademedidad=ar.idunidademedidad
		LEFT JOIN unidademedidad u2 ON u2.idunidademedidad=dc.idunidademedidad
		-- Unimos las tablas de almacenes individualmente según el `idalmacen`
		LEFT JOIN almacen1 ON dc.idalmacen = 1 AND almacen1.idarticulo = dc.idarticulo
		LEFT JOIN almacen2 ON dc.idalmacen = 2 AND almacen2.idarticulo = dc.idarticulo
		LEFT JOIN almacen3 ON dc.idalmacen = 3 AND almacen3.idarticulo = dc.idarticulo
		LEFT JOIN almacen4 ON dc.idalmacen = 4 AND almacen4.idarticulo = dc.idarticulo
		LEFT JOIN almacen5 ON dc.idalmacen = 5 AND almacen5.idarticulo = dc.idarticulo
		LEFT JOIN almacen6 ON dc.idalmacen = 6 AND almacen6.idarticulo = dc.idarticulo
		LEFT JOIN almacen7 ON dc.idalmacen = 7 AND almacen7.idarticulo = dc.idarticulo
		LEFT JOIN almacen8 ON dc.idalmacen = 8 AND almacen8.idarticulo = dc.idarticulo
		LEFT JOIN almacen9 ON dc.idalmacen = 9 AND almacen9.idarticulo = dc.idarticulo) af ON af.idarticulocompuesto=d.idarticulocompuesto
		WHERE af.stockporunidadmedida-(af.cantidadporunidad*d.cantidad) <0
		AND o.idordenproduccion='$idordenproduccion'";
	return ejecutarConsulta($sql);
}

public function listarordenproduccion(){
	$sql="SELECT v.idordenproduccion,DATE(v.fecha_hora) as fecha,v.idcliente,p.nombre as cliente,u.idusuario,u.nombre as usuario, v.tipo_comprobante,v.total_ordenproduccion,v.total_ordenproducciond,v.estado,v.tasa_dollar,v.num_ordenproduccion,v.idvendedor,ve.nombre as vendedor,p.idzona, z.nombre as zona FROM ordenproduccion v INNER JOIN persona p ON v.idcliente=p.idpersona LEFT JOIN vendedor ve ON v.idvendedor=ve.idvendedor INNER JOIN usuario u ON v.idusuario=u.idusuario LEFT JOIN zona z ON p.idzona=z.idzona ORDER BY v.idordenproduccion DESC";
	return ejecutarConsulta($sql);
}

public function desactivar($idordenproduccion){
	$sql="UPDATE ordenproduccion SET estado='Anulado' WHERE idordenproduccion='$idordenproduccion' AND estado='Pendiente'";
	return ejecutarConsulta($sql);
}
public function activar($idordenproduccion){
	$sql="UPDATE ordenproduccion SET estado='Pendiente' WHERE idordenproduccion='$idordenproduccion' AND estado='Anulado'";
	//echo $sql;
	return ejecutarConsulta($sql);
}

public function agregarDetalleordenproduccion($idordenproduccion){
	$sql="SELECT dv.idarticulo,a.nombre as articulo,l.numerolote,dv.cantidad,
	(CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END)*(SELECT tasa_dollar FROM empresa_tasacambio ORDER by tasa_dollar DESC LIMIT 1) as precio,
	a.preciod,0 as porcentaje,0 as descuento,
	dv.cantidad*(CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END)*(SELECT tasa_dollar FROM empresa_tasacambio ORDER by tasa_dollar DESC LIMIT 1) as subtotal,
	dv.cantidad*(CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END) as subtotald,
	dv.idordenproduccion,dv.idalmacen,
	IF (a.exento='no',((CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END)*(SELECT tasa_dollar FROM empresa_tasacambio ORDER by tasa_dollar DESC LIMIT 1)*(1+((SELECT iva FROM empresa_impuestos)/100)))-((CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END)*(SELECT tasa_dollar FROM empresa_tasacambio ORDER by tasa_dollar DESC LIMIT 1)),0) as iva,
	IF (a.exento='no',((CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END)*(1+((SELECT iva FROM empresa_impuestos)/100)))-((CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END)),0) as ivad,
	IF (a.exento='si',(CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END)*(SELECT tasa_dollar FROM empresa_tasacambio ORDER by tasa_dollar DESC LIMIT 1),0) as exentot,
	IF (a.exento='si',(CASE WHEN pr.idlistaprecio =1 THEN a.preciod WHEN pr.idlistaprecio =2 THEN a.preciobd ELSE a.preciocd END),0) as exentotd,
	a.impuestoart18d*(SELECT tasa_dollar FROM empresa_tasacambio ORDER by tasa_dollar DESC LIMIT 1) as impoart18,
	a.impuestoart18d as impoart18d,
	(CASE WHEN pr.idlistaprecio =1 THEN a.preciopvpd WHEN pr.idlistaprecio =2 THEN a.pvpdb ELSE a.pvpdc END)*(SELECT tasa_dollar FROM empresa_tasacambio ORDER by tasa_dollar DESC LIMIT 1) as preciopvp,
	(CASE WHEN pr.idlistaprecio =1 THEN a.preciopvpd WHEN pr.idlistaprecio =2 THEN a.pvpdb ELSE a.pvpdc END) as preciopvpd 
	FROM detalle_ordenproduccion dv 
	INNER JOIN ordenproduccion pe ON pe.idordenproduccion=dv.idordenproduccion
	INNER JOIN persona pr ON pr.idpersona=pe.idcliente
	INNER JOIN articulo a ON a.idarticulo=dv.idarticulo 
	INNER JOIN ordenproduccion p ON p.idordenproduccion=dv.idordenproduccion 
	LEFT JOIN lote l ON l.idarticulo=dv.idarticulo 
	WHERE dv.idordenproduccion='$idordenproduccion'";
	return ejecutarConsulta($sql);
}


public function ordenproduccioncabecera($idordenproduccion){
	$sql= "SELECT v.idordenproduccion, v.num_ordenproduccion,v.idcliente, p.nombre AS cliente,d.nombred as cliented, p.direccion,d.direcciond,p.licencia_licor,d.licencia_licord, p.tipo_documento,d.tipo_documentod, p.num_documento, d.num_documentod, p.email, d.emaild, p.telefono,d.telefonod, p.resenaendollar, v.idusuario, u.nombre AS vendedor, DATE(v.fecha_hora) AS fecha, v.total_ordenproduccion, v.total_ordenproducciond, v.tasa_dollar, t.nombre as nombrevendedor FROM ordenproduccion v INNER JOIN persona p ON v.idcliente=p.idpersona LEFT JOIN despacho d ON v.idclientedespacho=d.idclientedespacho LEFT JOIN usuario u ON v.idusuario=u.idusuario LEFT JOIN vendedor t ON v.idvendedor=t.idvendedor WHERE v.idordenproduccion='$idordenproduccion'";
	return ejecutarConsulta($sql);
}

public function ordenproduccioncabecera1($idordenproduccion){
	$sql= "SELECT o.idordenproduccion,o.num_ordenproduccion,o.fecha_hora,o.total_ordenproduccion,o.idmaquila,o.idalmacen, p.nombre AS maquila,al.idalmacen AS almacen 
	FROM ordenproduccion o LEFT JOIN persona p ON p.idpersona=o.idmaquila LEFT JOIN almacen al ON al.idalmacen=o.idalmacen WHERE o.idordenproduccion='$idordenproduccion'";
	return ejecutarConsulta($sql);
}






public function ordenproducciondetalles($idordenproduccion){
	$sql="SELECT a.nombre AS articulo, a.codigo, d.cantidad as cajas, f.factorconversion as unidadesxcaja, (f.factorconversion*d.cantidad) as unidades, a.unidademedidad as capacidad, (f.factorconversion*d.cantidad*a.unidademedidad) as litro, a.gradoalcohol, d.precio_venta,d.precio_ventad,(d.cantidad*d.precio_ventad) AS subtotal, c.idcategoriadeunidades, c.nombre, u.idunidademedidad, u.nombre, a.exento, t.codigotipoarticulo,al.porcentaje as alicuota FROM detalle_ordenproduccion d INNER JOIN articulo a ON d.idarticulo=a.idarticulo INNER JOIN categoriadeunidades c ON c.idcategoriadeunidades=a.idcategoriadeunidades INNER JOIN unidademedidad u ON u.idunidademedidad=a.idunidademedidad INNER JOIN factorunidademedidad f ON f.idfactorunidademedidad=a.idfactorunidademedidad INNER JOIN tipoarticulo t ON t.idtipoarticulo=a.idtipoarticulo INNER JOIN alicuota al ON al.idalicuota=a.idalicuota WHERE d.idordenproduccion='$idordenproduccion'";
    return ejecutarConsulta($sql);
}

public function ordenproducciondetalles1($idordenproduccion){
	$sql="SELECT dopi.idordenproduccionprocesada,dopi.idarticulo,dopi.idalmacen,ar.nombre as articulo,al.nombre AS almacen,ud.nombre as unidadmedidad,sum(dopi.cantidad) as cantidad 
	FROM detalle_ordenproduccionprocesadainsumo dopi 
	LEFT JOIN almacen al ON al.idalmacen=dopi.idalmacen 
	LEFT JOIN articulo ar ON ar.idarticulo=dopi.idarticulo 
	LEFT JOIN unidademedidad ud ON ud.idunidademedidad=ar.idunidademedidad
	WHERE dopi.idordenproduccionprocesada='$idordenproduccion' GROUP BY dopi.idarticulo";
    return ejecutarConsulta($sql);
}



public function ordenproducciondetalles2($idordenproduccion){
	$sql="SELECT dop.idordenproduccion,dop.idarticulo,dop.idalmacen,ar.nombre as articulo,al.nombre AS almacen,ud.nombre as unidadmedidad,dop.cantidad FROM detalle_ordenproduccionprocesada dop 
	LEFT JOIN almacen al ON al.idalmacen=dop.idalmacen 
	LEFT JOIN articulo ar ON ar.idarticulo=dop.idarticulo 
	LEFT JOIN unidademedidad ud ON ud.idunidademedidad=ar.idunidademedidad 
	WHERE dop.idordenproduccion='$idordenproduccion'";
	return ejecutarConsulta($sql);
}

public function ventatasacambio(){
	$sql="SELECT tasa_dollar,tasa_euro FROM empresa_tasacambio WHERE idempresa='1'";
    return ejecutarConsulta($sql);
}

}

 ?>
