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

class Ingreso{


	//implementamos nuestro constructor
public function __construct(){

}


//metodo insertar registro
public function insertar($idproveedor,$idalmacen,$idusuario,$tipo_comprobante,$serie_comprobante,$num_comprobante,$num_suministro,$islr,$idimpuestoslr,
$fecha_hora,$fecha_horar,$impuesto,$total_compra,$total_comprad,$total_comprai,$total_compraid,$observacion,$idordencompraingreso,$modopago,$montoigtf,$montoigtfporcentaje,$idarticulo,$cantidad,$precio_compra,$precio_comprad,$precio_venta,$precio_ventad,$fecha_lote,$nrolote,$tipo)
{
	
	$sql	="INSERT INTO ingreso (idproveedor,idalmacen,idusuario,tipo_comprobante,serie_comprobante,num_comprobante,
	fecha_hora,fecha_horar,impuesto,total_compra,total_comprad,total_comprai,total_compraid,estado,num_suministro,islr,idimpuestoslr,observacion,modopago,montoigtf,montoigtfporcentaje) 
			VALUES ('$idproveedor','$idalmacen','$idusuario','$tipo_comprobante','$serie_comprobante',
			'$num_comprobante','$fecha_hora','$fecha_horar','$impuesto','$total_compra','$total_comprad','$total_comprai','$total_compraid','Aceptado','$num_suministro','$islr','$idimpuestoslr','$observacion','$modopago','$montoigtf','$montoigtfporcentaje')";
	//return ejecutarConsulta($sql);
	//$idingresonew=50;
	echo $sql; 
	$idingresonew		=	ejecutarConsulta_retornarID($sql);
	$num_elementos	=	0;
	$sw							=	true;
	$numerolotep		= 	'0000000000';
	$fecha_lotep		=	$fecha_hora;
	
	// Se procesa cada articulo 
	while ($num_elementos < count($idarticulo)) {
		//Se verifica el tipo si es un servicios o un articulo
		if ($tipo[$num_elementos]=='A') {
			//Se agrega el detalle de la compra
			if ($nrolote[$num_elementos]=='N/A') {
				$nl = $numerolotep;
				$fl = $fecha_lotep;
			}else{
				$nl = $nrolote[$num_elementos];
				$fl = $fecha_lote[$num_elementos];
			}
			$sql_detalle	="INSERT INTO detalle_ingreso (idingreso,idalmacen,idarticulo,cantidad,precio_compra,precio_comprad,precio_venta,precio_ventad,numerolote,fechalote) 
							VALUES('$idingresonew','$idalmacen','$idarticulo[$num_elementos]','$cantidad[$num_elementos]','$precio_compra[$num_elementos]','$precio_comprad[$num_elementos]','$precio_venta[$num_elementos]','$precio_ventad[$num_elementos]','$nl','$fl')";
			echo $sql_detalle;
			ejecutarConsulta($sql_detalle) or $sw=false;
			//Se actualiza costo en producto
			$sql_costo="UPDATE articulo SET costo='$precio_compra[$num_elementos]',costod='$precio_comprad[$num_elementos]',costoa='$precio_venta[$num_elementos]',costoad='$precio_ventad[$num_elementos]' WHERE idarticulo='$idarticulo[$num_elementos]'";
			echo $sql_costo;
			ejecutarConsulta($sql_costo) or $sw=false;
		}else{
			$sql_detalle	="INSERT INTO detalle_ingreso_servicio (idingreso,idservicio,cantidad,precio_compra,precio_comprad) 
							VALUES('$idingresonew','$idarticulo[$num_elementos]','$cantidad[$num_elementos]','$precio_compra[$num_elementos]','$precio_comprad[$num_elementos]')";
			echo $sql_detalle;
			ejecutarConsulta($sql_detalle) or $sw=false;
		}	
			$num_elementos=$num_elementos+1;
	}

	// Se verifica si el ingreso tiene una de orden de compra
	if ($sw){
		$sql_nroorden 	= "SELECT * FROM ordencompraingreso WHERE idordencompraingreso='$idordencompraingreso'";
		echo $sql_nroorden;
		$resultno				=	ejecutarConsulta($sql_nroorden);
		
		if (mysqli_num_rows($resultno) > 0) {
			while($filap = mysqli_fetch_assoc($resultno)){
				$montopendiente 	= $filap["montopendiente"];
				$estado						= $filap["estado"];
				
				//Se actualiza el estado y monto pendiente del ingreso
				$sqli	="UPDATE ingreso SET montopendiente='$montopendiente',estado='$estado' WHERE idingreso='$idingresonew'";
				echo $sqli;
				ejecutarConsulta($sqli) or $sw=false;
				
				// Se actualiza el estado de orden de compra
				$sqloc	="UPDATE ordencompraingreso SET estado='Procesada' WHERE idordencompraingreso='$idordencompraingreso'";
				echo $sqloc;
				ejecutarConsulta($sqloc) or $sw=false;
				
				// se actualiza el detalle de orden de ingreso
				// Se procesa cada articulo 
				if ($sw){
					$num_elementos	=	0;
					while ($num_elementos < count($idarticulo)) {
						if ($tipo[$num_elementos]=='A') {
							$sql_detalleo	="UPDATE detalle_ordencompraingreso SET cantidadp='$cantidad[$num_elementos]',cantidadb=cantidad-'$cantidad[$num_elementos]'
															WHERE idordencompraingreso='$idordencompraingreso' AND idarticulo='$idarticulo[$num_elementos]'";
							echo $sql_detalleo;
							ejecutarConsulta($sql_detalleo) or $sw=false;	
						}
						$num_elementos=$num_elementos+1;	
					}
				}	
			}
		}	
	}

	return $sw;
}

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


//metodo para mostrar registros
public function mostrar($idingreso){
	$sql=	"SELECT i.idingreso,DATE(i.fecha_hora) as fecha,i.idingreso,DATE(i.fecha_horar) as fechar,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.impuesto,i.estado,i.montoigtfporcentaje,i.observacion FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE idingreso='$idingreso'";
	return ejecutarConsultaSimpleFila($sql);
}

//metodo para mostrar registros
public function comprobantedepago($idingreso){
	$sql=	"SELECT i.idingreso,DATE(i.fecha_hora) as fecha,i.idingreso,DATE(i.fecha_horar) as fechar,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.impuesto,i.estado,p.direccion,p.telefono,p.tipo_documento FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE idingreso='$idingreso'";
//	return ejecutarConsultaSimpleFila($sql);
	return ejecutarConsulta($sql);
}

//metodo para mostrar registros
public function buscarnrosuministro(){
	$sql=	"SELECT COUNT(idingreso) as nrosuministro FROM ingreso WHERE tipo_comprobante='Suministro' AND DATE_FORMAT(fecha_hora, '%Y%m%d') = DATE_FORMAT(now(), '%Y%m%d')";
	return ejecutarConsultaSimpleFila($sql);
}

public function buscarnrosuministromixto(){
	$sql=	"SELECT COUNT(idingreso) as nromixto FROM ingreso WHERE tipo_comprobante='NotaEntregam' AND DATE_FORMAT(fecha_hora, '%Y%m%d') = DATE_FORMAT(now(), '%Y%m%d')";
	return ejecutarConsultaSimpleFila($sql);
}

public function buscarnroingreso(){
	$sql=	"SELECT idingreso FROM ingreso ORDER BY idingreso DESC LIMIT 1";
	return ejecutarConsultaSimpleFila($sql);
}

//metodo para buscar un almacen
public function buscarAlmacen($almacen){
	$sql=	"SELECT * FROM almacen WHERE nombre='$almacen'";
	return ejecutarConsultaSimpleFila($sql);
}

public function listarDetalle($idingreso){
	$sql=	"SELECT di.idingreso,di.idarticulo,a.nombre,di.cantidad,di.precio_compra,di.precio_comprad,di.precio_venta FROM detalle_ingreso di INNER JOIN articulo a ON di.idarticulo=a.idarticulo WHERE di.idingreso='$idingreso' UNION ALL SELECT dis.idingreso,dis.idingreso as idarticulo,s.nombre,dis.cantidad,dis.precio_compra,dis.precio_comprad,dis.precio_compra as precio_venta FROM detalle_ingreso_servicio dis INNER JOIN servicio s ON dis.idservicio=s.idservicio WHERE dis.idingreso='$idingreso'";
	return ejecutarConsulta($sql);
}

//Buscamos un producto por el codigo de barra
public function agregarDetalleCodigoDeBarra($codigobarra){
	//$sql= 'SELECT * FROM articulo WHERE stock>0 AND codigo="$codigobarra"';
	//$sql= 'SELECT * FROM articulo WHERE codigo=:codigobarra';
	$sql= 'SELECT * FROM articulo WHERE codigo="$codigobarra"';
	return ejecutarConsultaSimpleFila($sql);
}

//listar registros
public function listar(){
	//$sql=	"SELECT i.idingreso,DATE(i.fecha_hora) as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad,i.impuesto,i.estado FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario ORDER BY i.idingreso DESC";
	$sql=	"SELECT i.idingreso,date_format(DATE(i.fecha_hora), '%d-%m-%Y') as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad, IF(il.idimpuestoslr is null,0,il.porcentaje*100) as porislr, IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje) as retencionislr, p.agenteretencion, i.total_compraid-i.total_comprad as iva, IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*.75,0) AS retencionivad, (i.total_comprad-IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje))+(i.total_compraid-i.total_comprad-(IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*.75,0))) as totald, i.estado FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona LEFT JOIN impuestosrl il ON il.idimpuestoslr=i.idimpuestoslr INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE p.tipo_persona='Proveedor' ORDER BY i.idingreso DESC";
	return ejecutarConsulta($sql);
}

//listar registros
public function listarsastreria(){
	//$sql=	"SELECT i.idingreso,DATE(i.fecha_hora) as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad,i.impuesto,i.estado FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario ORDER BY i.idingreso DESC";
	$sql=	"SELECT i.idingreso,date_format(DATE(i.fecha_hora), '%d-%m-%Y') as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad, IF(il.idimpuestoslr is null,0,il.porcentaje*100) as porislr, IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje) as retencionislr, p.agenteretencion, i.total_compraid-i.total_comprad as iva,IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*(p.agenteretencionp/100),0) AS retencionivad, (i.total_comprad-IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje))+(i.total_compraid-i.total_comprad-(IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*(p.agenteretencionp/100),0)))+i.montoigtfporcentaje as totald, i.estado,p.islr,p.agenteretencionp as porcentajeretencion,i.montoigtfporcentaje FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN (SELECT d.idingreso FROM detalle_ingreso d INNER JOIN articulo a ON a.idarticulo=d.idarticulo WHERE a.tipoproducto='Insumosastreria' GROUP BY d.idingreso) d ON d.idingreso=i.idingreso LEFT JOIN impuestosrl il ON il.idimpuestoslr=i.idimpuestoslr INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE i.serie_comprobante<>'N/A' AND (p.tipo_persona='Proveedorinsumos' OR p.tipo_persona='Proveedorfabricante') ORDER BY i.idingreso DESC";
	return ejecutarConsulta($sql);
}


//listarmixto registros
public function listarmixto(){
	$sql=	"SELECT i.idingreso,date_format(DATE(i.fecha_hora), '%d-%m-%Y') as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.num_suministro,i.total_compra,i.total_comprad,i.impuesto,i.estado,sum(d.cantidad) as totalingresounidades FROM ingreso i INNER JOIN detalle_ingreso d ON d.idingreso=i.idingreso INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE num_suministro<>'' GROUP BY i.idingreso ORDER BY i.idingreso DESC";
	return ejecutarConsulta($sql);
}
//SELECT i.idingreso,DATE(i.fecha_hora) as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad,i.impuesto,i.estado FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE num_suministro<>'' ORDER BY i.idingreso DESC

//listar registros
public function listara(){
	//$sql=	"SELECT i.idingreso,DATE(i.fecha_hora) as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad,i.impuesto,i.estado,i.num_suministro FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE i.serie_comprobante<>'N/A' ORDER BY i.idingreso DESC";
	$sql=	"SELECT i.idingreso,date_format(DATE(i.fecha_hora), '%d-%m-%Y') as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad, IF(il.idimpuestoslr is null,0,il.porcentaje*100) as porislr, IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje) as retencionislr, p.agenteretencion, i.total_compraid-i.total_comprad as iva,IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*(p.agenteretencionp/100),0) AS retencionivad, (i.total_comprad-IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje))+(i.total_compraid-i.total_comprad-(IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*(p.agenteretencionp/100),0)))+i.montoigtfporcentaje as totald, i.estado,p.islr,p.agenteretencionp as porcentajeretencion,i.montoigtfporcentaje FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN (SELECT idingreso FROM detalle_ingreso GROUP BY idingreso) d ON d.idingreso=i.idingreso LEFT JOIN impuestosrl il ON il.idimpuestoslr=i.idimpuestoslr INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE p.tipo_persona='Proveedor' ORDER BY i.idingreso DESC";
	
	return ejecutarConsulta($sql);
}

//listar registros
public function listarinsumo(){
	$sql=	"SELECT i.idingreso,date_format(DATE(i.fecha_hora), '%d-%m-%Y') as fecha,i.idproveedor,p.nombre as proveedor,p.tipo_persona,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad,i.impuesto,i.estado,i.num_suministro FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN usuario u ON i.idusuario=u.idusuario WHERE i.serie_comprobante<>'N/A' AND (p.tipo_persona='Proveedorinsumos' OR p.tipo_persona='Proveedorfabricante')  ORDER BY i.idingreso DESC";
	return ejecutarConsulta($sql);
}

//listar registros
public function listars(){
	$sql=	"SELECT i.idingreso,date_format(DATE(i.fecha_hora), '%d-%m-%Y') as fecha,i.idproveedor,p.nombre as proveedor,u.idusuario,u.nombre as usuario, i.tipo_comprobante,i.serie_comprobante,i.num_comprobante,i.total_compra,i.total_comprad, IF(il.idimpuestoslr is null,0,il.porcentaje*100) as porislr, IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje) as retencionislr, p.agenteretencion, i.total_compraid-i.total_comprad as iva, IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*(p.agenteretencionp/100),0) AS retencionivad, (i.total_comprad-IF(il.idimpuestoslr IS null,0,i.total_comprad*il.porcentaje))+(i.total_compraid-i.total_comprad-(IF(p.agenteretencion='si',(i.total_compraid-i.total_comprad)*(p.agenteretencionp/100),0)))+i.montoigtfporcentaje as totald, i.estado,p.islr,p.agenteretencionp as porcentajeretencion,i.montoigtfporcentaje FROM ingreso i INNER JOIN persona p ON i.idproveedor=p.idpersona INNER JOIN (SELECT idingreso FROM detalle_ingreso_servicio GROUP BY idingreso) d ON d.idingreso=i.idingreso LEFT JOIN impuestosrl il ON il.idimpuestoslr=i.idimpuestoslr INNER JOIN usuario u ON i.idusuario=u.idusuario ORDER BY i.idingreso DESC";
	return ejecutarConsulta($sql);
}

//listar registros
public function impuestoslrtodo($idingreso){
	$sql=	"SELECT i.*,ds.idservicio,se.nombre as servicio,p.*,im.porcentaje*100 as porcentajeimpuesto, round(im.porcentaje*i.total_compra,2) as retencion FROM ingreso i INNER JOIN (SELECT ds.idingreso,ds.idservicio FROM detalle_ingreso_servicio ds GROUP BY ds.idingreso) AS ds ON ds.idingreso=i.idingreso INNER JOIN servicio se ON se.idservicio=ds.idservicio INNER JOIN persona p ON p.idpersona=i.idproveedor LEFT JOIN impuestosrl im ON im.idimpuestoslr=i.idimpuestoslr WHERE i.islr='si' AND i.idingreso='$idingreso'";
	return ejecutarConsulta($sql);
}

//listar registros
public function impuestoretenciontodo($idingreso){
	$sql=	"SELECT i.*,p.*,p.agenteretencionp as porcentajeimpuesto, r.totalnoexentob, r.totalnoexentod,r.totalretenciob AS retencion,r.totalretenciod AS retenciond, r.ivab,r.ivad	FROM ingreso i 	INNER JOIN persona p ON p.idpersona=i.idproveedor LEFT JOIN (SELECT d.idingreso,(p.agenteretencionp/100) AS porcentajeretencion, SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_compra,0)*d.cantidad)*0.16,0))) as ivab,	SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_compra,0)*d.cantidad)*0.16,0)))*(p.agenteretencionp/100) as totalretenciob,	SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_comprad,0)*d.cantidad)*0.16,0))) as ivad,	(SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_comprad,0)*d.cantidad)*0.16,0))))*(p.agenteretencionp/100) AS totalretenciod, SUM(IF(a.exento='no',d.precio_compra,0)*d.cantidad) as totalnoexentob,	SUM(IF(a.exento='no',d.precio_comprad,0)*d.cantidad) as totalnoexentod FROM detalle_ingreso d 	INNER JOIN ingreso i ON i.idingreso=d.idingreso 	INNER JOIN articulo a ON a.idarticulo=d.idarticulo 	INNER JOIN persona p ON p.idpersona=i.idproveedor 	GROUP BY d.idingreso	 UNION ALL 	SELECT d.idingreso,(p.agenteretencionp/100) AS porcentajeretencion, SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_compra,0)*d.cantidad)*0.16,0))) as ivab,	SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_compra,0)*d.cantidad)*0.16,0)))*(p.agenteretencionp/100) as totalretenciob,	SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_comprad,0)*d.cantidad)*0.16,0)))as ivad, SUM((IF(p.agenteretencion='si',(IF(a.exento='no',d.precio_comprad,0)*d.cantidad)*0.16,0)))*(p.agenteretencionp/100) AS totalretenciod,	SUM(IF(a.exento='no',d.precio_compra,0)*d.cantidad) as totalnoexentob, SUM(IF(a.exento='no',d.precio_comprad,0)*d.cantidad) as totalnoexentod	FROM detalle_ingreso_servicio d INNER JOIN ingreso i ON i.idingreso=d.idingreso INNER JOIN servicio a ON a.idservicio=d.idservicio INNER JOIN persona p ON p.idpersona=i.idproveedor GROUP BY d.idingreso) r ON r.idingreso=i.idingreso  WHERE p.agenteretencion='si' AND i.idingreso='$idingreso'";
	return ejecutarConsulta($sql);
}



}

 ?>
