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


class Escritorio{


	//implementamos nuestro constructor
public function __construct(){

}

//listar registros
public function comprasfecha($fecha_inicio,$fecha_fin){
	$sql="SELECT DATE(i.fecha_hora) as fecha, u.nombre as usuario, p.nombre as proveedor, i.tipo_comprobante, i.serie_comprobante, i.num_comprobante, i.total_compra,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 DATE(i.fecha_hora)>='$fecha_inicio' AND DATE(i.fecha_hora)<='$fecha_fin'";
	return ejecutarConsulta($sql);
}


public function ventasfechacliente($fecha_inicio,$fecha_fin,$idcliente){
	$sql="SELECT DATE(v.fecha_hora) as fecha, u.nombre as usuario, p.nombre as cliente, v.tipo_comprobante,v.serie_comprobante, v.num_comprobante , v.total_venta, v.impuesto, v.estado FROM venta v INNER JOIN persona p ON v.idcliente=p.idpersona INNER JOIN usuario u ON v.idusuario=u.idusuario WHERE DATE(v.fecha_hora)>='$fecha_inicio' AND DATE(v.fecha_hora)<='$fecha_fin' AND v.idcliente='$idcliente'";
	return ejecutarConsulta($sql);
}

public function totalcomprahoy(){
	$sql="SELECT IFNULL(SUM(total_compra),0) as total_compra FROM ingreso WHERE DATE(fecha_hora)=curdate()";
	return ejecutarConsulta($sql);
}

public function totalventahoy(){
	$sql="SELECT IFNULL(SUM(total_venta),0) as total_venta FROM venta WHERE DATE(fecha_hora)=curdate()";
	return ejecutarConsulta($sql);
}

public function totalcomprayear(){
	$sql="SELECT IFNULL(SUM(total_compraid),0) as total_compra,YEAR(fecha_hora) AS ano FROM ingreso WHERE YEAR(fecha_hora)=YEAR(curdate()) AND estado<>'Anulado'";
	return ejecutarConsulta($sql);
}

public function totalventayear(){
	$sql="SELECT IFNULL(SUM(total_ventaimpuestod),0) as total_venta,YEAR(fecha_hora) AS ano FROM venta WHERE YEAR(fecha_hora)=YEAR(curdate()) AND estado<>'Anulado'";
	return ejecutarConsulta($sql);
}

public function totalcuentasporpagar(){
	$sql="SELECT (SELECT IFNULL(SUM(total_compraid),0) as total_compra FROM ingreso WHERE estado<>'Anulado' AND estado<>'Pagada')-(SELECT IFNULL(SUM(total_pago),0) as total_pagos FROM pagos p INNER JOIN detalle_pagos d ON d.idpagocliente=p.idpagoproveedor INNER JOIN ingreso i ON i.idingreso=d.iddocumento WHERE i.estado<>'Anulado' AND i.estado<>'Pagada') as cuentasporpagar";
	return ejecutarConsulta($sql);
}

public function totalcuentasporcobrar(){
	$sql="SELECT @cuentasporcobrar := (SELECT SUM(vt.saldod) as saldod FROM persona p 	INNER JOIN (SELECT v.idcliente, SUM( IF (v.montopendiente>0,v.montopendiente,v.total_ventaimpuesto+v.montoigtfporcentaje/v.tasa_dollar-(v.montocxc*v.tasa_dollar)-(v.montodev*v.tasa_dollar)) ) as saldo, SUM( IF (v.montopendiente>0,v.montopendiente/v.tasa_dollar,IF(v.total_ventaimpuesto=0,0,(v.total_ventaimpuesto/v.tasa_dollar+v.montoigtfporcentaje))-v.montocxc-v.montodev) ) as saldod, SUM(IF((v.estado='Pendiente' OR v.estado='Parcial'),1,0)) as nrodocumento, v.fecha_hora,MIN(IF(v.estado='Pendiente' OR v.estado='Parcial',v.num_comprobante1,999999999)) as num_comprobante1,v.montocxc,v.montodev,IF(v.montocxc+v.montodev>0,'si','no') as notacredito1, DATE_FORMAT(MIN(v.fecha_hora),'%d-%m-%Y') as fecha,@curRank := @curRank + 1 AS rank11 	FROM venta v,	(SELECT @curRank := 0) q 	WHERE (v.estado='Parcial' OR v.estado='Pendiente')	GROUP BY v.idcliente	UNION ALL	SELECT v.idcliente, SUM(IF(v.montopendiente>0,v.montopendiente,v.total_credito)) as saldo, 	SUM(IF(v.montopendiente>0,v.montopendiente/v.tasa_dollar,IF(v.total_creditod=0,0,v.total_creditod))) as saldod, v.num_notadebito as nrodocumento, 	v.fecha_hora,	v.num_notadebito as num_comprobante1,	0 as montocxc, 	0 as montodev,	'no' as notacredito1, DATE_FORMAT(MIN(v.fecha_hora),'%d-%m-%Y') as fecha,@curRank := @curRank + 1 AS rank11 	FROM notadebito v, 	(SELECT @curRank := 0) q 	WHERE (v.estado='Parcial' OR v.estado='Pendiente')	GROUP BY v.idcliente) vt ON vt.idcliente=p.idpersona	WHERE p.tipo_persona='Cliente') as cuentasporcobrar";
	return ejecutarConsulta($sql);
}

public function totalinventariounidades(){
	//$sql="SELECT IFNULL(SUM(stock),0) as total_cajas FROM articulo WHERE condicion='1'";
	$sql="SELECT SUM(i.stock) AS total_cajas FROM articulosporalmacen i INNER JOIN articulo a ON a.idarticulo=i.idarticulo	WHERE a.tipoproducto='Negocio' AND i.stock>0;";
	return ejecutarConsulta($sql);
}

public function totalinventariounidadespendiente(){
	//$sql="SELECT IFNULL(SUM(stock),0) as total_cajas FROM articulo WHERE condicion='1'";
	$sql="SELECT v.idventa, v.estado, IF(l.estado IS null,IF(v.estado='Parcial','Pendiente',v.estado),l.estado) as estadol,SUM(d.cantidad-d.cantidadev) as total_cajaspendiente	FROM venta v INNER JOIN detalle_venta d ON d.idventa=v.idventa	LEFT JOIN logisticadespacho l ON l.idventa=v.idventa WHERE v.estado<>'Anulado' AND v.estado<>'Pagada' AND v.tipo_comprobante<>'Regalo' AND v.fecha_hora>='2023-01-01' AND (((IF(l.estado IS null,IF(v.estado='Parcial','Pendiente',v.estado),l.estado))='EnTransito') OR ((IF(l.estado IS null,IF(v.estado='Parcial','Pendiente',v.estado),l.estado))='Pendiente')) ORDER BY v.idventa DESC";
	return ejecutarConsulta($sql);
}


public function totalinventariomonto(){
	$sql="SELECT IFNULL(SUM(stock*preciod),0) as total_inventario FROM articulo WHERE condicion='1'";
	return ejecutarConsulta($sql);
}

public function comprasultimos_10dias(){
	$sql="SELECT CONCAT(DAY(fecha_hora),'-',MONTH(fecha_hora),'-',YEAR(fecha_hora)) AS fecha, SUM(total_compraid) AS total FROM ingreso GROUP BY fecha_hora ORDER BY fecha_hora DESC LIMIT 0,10";
	return ejecutarConsulta($sql);
}

public function ventasultimos_12meses(){
	$sql="SELECT CONCAT(mes(fecha_hora,'es_ES'),'-',YEAR(fecha_hora)) AS fecha, SUM(total_ventaimpuestod) AS total, MONTH(fecha_hora) as mes, YEAR(fecha_hora) as ano FROM venta WHERE YEAR(fecha_hora)>2020 GROUP BY MONTH(fecha_hora) ORDER BY YEAR(fecha_hora),MONTH(fecha_hora) ASC";
	return ejecutarConsulta($sql);
}

public function saldocajachica(){
	//$sql="SELECT SUM(montob) as saldob, SUM(montod) as saldod FROM saldocajachica";
	$sql="SELECT SUM(montob) as saldob, SUM(montod) as saldod FROM saldodecuentas WHERE idbancocuenta='3'";
//	return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function saldofacebank(){
	$sql="SELECT SUM(montob) as saldob, SUM(montod) as saldod FROM saldofacebank";
//	return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function movimientosdeldia($idbancocuenta){
	$sql="SELECT SUM(IF(tiporegistro='CARGO' OR tiporegistro='PAGO',montod*-1,montod)) AS movimientosdeldia FROM detallederegistrodecuentas WHERE fecha=CURDATE() AND idbancocuenta='$idbancocuenta'";
	return ejecutarConsulta($sql);

}

public function movimientosdelmes($idbancocuenta){
	$sql="SELECT SUM(IF(tiporegistro='CARGO' OR tiporegistro='PAGO',montod*-1,montod)) AS movimientosdelmes FROM detallederegistrodecuentas WHERE MONTH(fecha) = MONTH(CURRENT_DATE()) AND idbancocuenta='$idbancocuenta'";
	return ejecutarConsulta($sql);
}

public function cargosdelmes($idbancocuenta){
	$sql="SELECT SUM(IF(montod is null,0,montod)) AS cargosdelmes FROM detallederegistrodecuentas WHERE MONTH(fecha) = MONTH(CURRENT_DATE()) AND tiporegistro='CARGO' AND idbancocuenta='$idbancocuenta'";
	return ejecutarConsulta($sql);
}



public function ultimos10movimiento($idbancocuenta){
	$sql="SELECT idregistrodecuentas,fecha,detalle,IF(tiporegistro='CARGO' OR tiporegistro='PAGO',montod*-1,montod) AS monto,tiporegistro,estado FROM detallederegistrodecuentas WHERE idbancocuenta='$idbancocuenta' ORDER BY fecha DESC, idregistrodecuentas DESC LIMIT 10";
	return ejecutarConsulta($sql);
}

public function cuentasporpagarmasvieja(){
	$sql="SELECT p.idpersona as idproveedor, p.nombre, p.num_documento as rif_ci,	SUM(v.total_compraid) as deudasinretenciones,	SUM(IF(v.estado<>'Aceptado',IF(v.estado<>'Parcial',0,(v.total_comprad+(v.total_compraid-v.total_comprad-(IF(p.agenteretencion='si',(v.total_compraid-v.total_comprad)*(p.agenteretencionp/100),0)))-(IF(v.islr='si',v.total_comprad*i.porcentaje,0)))),v.total_comprad+(v.total_compraid-v.total_comprad-(IF(p.agenteretencion='si',(v.total_compraid-v.total_comprad)*(p.agenteretencionp/100),0)))-(IF(v.islr='si',v.total_comprad*i.porcentaje,0))))+v.montoigtfporcentaje AS deuda, SUM(IF (v.estado='Aceptado', 0, IF(v.estado='Anulado',0,IF(v.montopendiente>0,(v.total_comprad+(v.total_compraid-v.total_comprad-(IF(p.agenteretencion='si',(v.total_compraid-v.total_comprad)*(p.agenteretencionp/100),0)))-(IF(v.islr='si',v.total_comprad*i.porcentaje,0)))-v.montopendiente,(v.total_comprad+(v.total_compraid-v.total_comprad-(IF(p.agenteretencion='si',(v.total_compraid-v.total_comprad)*(p.agenteretencionp/100),0)))-(IF(v.islr='si',v.total_comprad*i.porcentaje,0))))))) as pagado, SUM(IF (v.estado<>'Pagada',IF(v.estado='Anulado',0,IF (v.montopendiente>0,v.montopendiente,(v.total_comprad+(v.total_compraid-v.total_comprad-(IF(p.agenteretencion='si',(v.total_compraid-v.total_comprad)*(p.agenteretencionp/100),0)))-(IF(v.islr='si',v.total_comprad*i.porcentaje,0))))),0))+v.montoigtfporcentaje as saldo,v.num_suministro,DATE_FORMAT(MIN(v.fecha_hora),'%d-%m-%Y') as  fechamasantigua,DATEDIFF(MIN(IF(v.estado='Aceptado',v.fecha_hora,IF(v.estado='Parcial',v.fecha_hora,'2121-01-01'))),'1899-12-30') as fechanumero,MIN(IF(v.estado='Aceptado',v.fecha_hora,IF(v.estado='Parcial',v.fecha_hora,'2121-01-01'))) AS fechaminima	FROM persona p INNER JOIN ingreso v ON p.idpersona=v.idproveedor	LEFT JOIN impuestosrl i ON i.idimpuestoslr=v.idimpuestoslr	WHERE (p.tipo_persona='Proveedor' OR p.tipo_persona='Proveedorinsumos' OR p.tipo_persona='Proveedorfabricante') AND v.num_suministro=''  AND v.estado<>'Pagada'	GROUP BY p.idpersona	ORDER by (SUM(IF (v.estado<>'Pagada',IF(v.estado='Anulado',0,IF (v.montopendiente>0,v.montopendiente,(v.total_comprad+(v.total_compraid-v.total_comprad-(IF(p.agenteretencion='si',(v.total_compraid-v.total_comprad)*(p.agenteretencionp/100),0)))-(IF(v.islr='si',v.total_comprad*i.porcentaje,0))))),0))+v.montoigtfporcentaje) DESC, (DATEDIFF(MIN(IF(v.estado='Aceptado',v.fecha_hora,IF(v.estado='Parcial',v.fecha_hora,'2121-01-01'))),'1899-12-30')) ASC LIMIT 10";
	return ejecutarConsulta($sql);
}

public function cuentasporcobrarmasvieja(){
	$sql="SELECT p.idpersona as idcliente,p.nombre, p.num_documento as rif_ci, SUM(vt.saldo) as saldo, SUM(vt.saldod) as saldod, vt.nrodocumento, DATE_FORMAT(MIN(vt.fecha_hora),'%d-%m-%Y') as fecha,vt.num_comprobante1,SUM(vt.montocxc) as montocxc,SUM(vt.montodev) as montodev, IF(vt.notacredito1='si','si','no') as notacredito, DATEDIFF(vt.fecha_hora,'1899-12-30') as fechanumero	FROM persona p 	INNER JOIN (SELECT v.idcliente, SUM( IF (v.montopendiente>0,v.montopendiente,v.total_ventaimpuesto+v.montoigtfporcentaje/v.tasa_dollar-(v.montocxc*v.tasa_dollar)-(v.montodev*v.tasa_dollar)) ) as saldo, SUM( IF (v.montopendiente>0,v.montopendiente/v.tasa_dollar,IF(v.total_ventaimpuesto=0,0,(v.total_ventaimpuesto/v.tasa_dollar+v.montoigtfporcentaje))-v.montocxc-v.montodev) ) as saldod, SUM(IF((v.estado='Pendiente' OR v.estado='Parcial'),1,0)) as nrodocumento, v.fecha_hora,MIN(IF(v.estado='Pendiente' OR v.estado='Parcial',v.num_comprobante1,999999999)) as num_comprobante1,v.montocxc,v.montodev,IF(v.montocxc+v.montodev>0,'si','no') as notacredito1, DATE_FORMAT(MIN(v.fecha_hora),'%d-%m-%Y') as fecha,@curRank := @curRank + 1 AS rank11 	FROM venta v,	(SELECT @curRank := 0) q 	WHERE (v.estado='Parcial' OR v.estado='Pendiente')	GROUP BY v.idcliente	UNION ALL	SELECT v.idcliente, SUM(IF(v.montopendiente>0,v.montopendiente,v.total_credito)) as saldo, 	SUM(IF(v.montopendiente>0,v.montopendiente/v.tasa_dollar,IF(v.total_creditod=0,0,v.total_creditod))) as saldod, v.num_notadebito as nrodocumento, 	v.fecha_hora,	v.num_notadebito as num_comprobante1,	0 as montocxc, 	0 as montodev,	'no' as notacredito1, DATE_FORMAT(MIN(v.fecha_hora),'%d-%m-%Y') as fecha,@curRank := @curRank + 1 AS rank11 	FROM notadebito v, 	(SELECT @curRank := 0) q 	WHERE (v.estado='Parcial' OR v.estado='Pendiente')	GROUP BY v.idcliente) vt ON vt.idcliente=p.idpersona	WHERE p.tipo_persona='Cliente'	GROUP BY p.idpersona	ORDER BY  DATEDIFF(vt.fecha_hora,'1899-12-30'),SUM(vt.saldod) ASC LIMIT 10";
	return ejecutarConsulta($sql);
}


public function cajasultimos_12meses(){
	$sql="SELECT DATE_FORMAT(fecha,'%M') AS fecha, SUM(IF(tiporegistro='CARGO',montod*-1,montod)) AS total FROM registrocajachica WHERE YEAR(fecha)>2020 GROUP BY MONTH(fecha) ORDER BY MONTH(fecha) ASC LIMIT 0,12";
	return ejecutarConsulta($sql);
}

public function stockporalmacen(){
	$sql="SELECT a.idarticulo,a.nombre,a.preciod,al1.nombre as na1,a1.stock almacen1,a1.stock*a.preciod almacen1p,al2.nombre as na2 ,a2.stock almacen2,a2.stock*a.preciod almacen2c,al3.nombre as na3 ,a3.stock almacen3,a3.stock*a.preciod almacen3c,al4.nombre as na4 ,a4.stock almacen4,a4.stock*a.preciod almacen4c,al5.nombre as na5 ,a5.stock almacen5,a5.stock*a.preciod almacen5c,a.condicion FROM articulo a LEFT JOIN almacen1 a1 ON a.idarticulo=a1.idarticulo LEFT JOIN almacen al1 ON a1.idalmacen=al1.idalmacen LEFT JOIN almacen2 a2 ON a.idarticulo=a2.idarticulo LEFT JOIN almacen al2 ON a2.idalmacen=al2.idalmacen LEFT JOIN almacen3 a3 ON a.idarticulo=a3.idarticulo LEFT JOIN almacen al3 ON a3.idalmacen=al3.idalmacen LEFT JOIN almacen4 a4 ON a.idarticulo=a4.idarticulo LEFT JOIN almacen al4 ON a4.idalmacen=al4.idalmacen LEFT JOIN almacen5 a5 ON a.idarticulo=a5.idarticulo LEFT JOIN almacen al5 ON a5.idalmacen=al5.idalmacen WHERE a.condicion=1 AND (a.tipoproducto='Negocio' OR a.tipoproducto='Combo')";
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function ventasproductovendedor()
{
	//$sql="SELECT a.idarticulo,a.nombre as articulo, IF(SUM(d.cantidad-d.cantidadev) IS null,0,SUM(d.cantidad-d.cantidadev)) AS cajas, IF(p.idvendedor IS null,'N/A',p.idvendedor) as idvendedor FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa INNER JOIN persona p ON p.idpersona=v.idcliente RIGHT JOIN articulo a ON a.idarticulo=d.idarticulo WHERE YEAR(v.fecha_hora)=YEAR(NOW()) AND MONTH(v.fecha_hora)=MONTH(NOW()) AND v.estado<>'Anulado' AND (a.tipoproducto='Compuesto' OR a.tipoproducto='Negocio') GROUP BY p.idvendedor,a.idarticulo ORDER BY a.idarticulo,p.idvendedor";
	
	//Actual
	//$sql="SELECT a.idarticulo,a.nombre as articulo, IF(SUM(d.cantidad-d.cantidadev) IS null,0,SUM(d.cantidad-d.cantidadev)) AS cajas, IF(p.idvendedor IS null,'N/A',p.idvendedor) as idvendedor FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa INNER JOIN persona p ON p.idpersona=v.idcliente RIGHT JOIN articulo a ON a.idarticulo=d.idarticulo WHERE YEAR(v.fecha_hora)=YEAR(NOW()) AND MONTH(v.fecha_hora)=MONTH(NOW()) AND v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' AND (a.tipoproducto='Compuesto' OR a.tipoproducto='Negocio') GROUP BY p.idvendedor,a.idarticulo ORDER BY a.idarticulo,p.idvendedor";
	
	//Nuevo
	/**/
	$sql="SELECT 
			a.idarticulo,
			a.nombre AS articulo, 
			IFNULL(SUM(d.cantidad - d.cantidadev), 0) AS cajas,  
			IFNULL(ve.idvendedor, 4000) AS idvendedor
		FROM 
			detalle_venta d 
		INNER JOIN 
			venta v ON v.idventa = d.idventa 
		-- Subconsulta para determinar el idvendedor con la condici«Ńn adecuada
		LEFT JOIN (
			SELECT 
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN 4000 
					ELSE ve.idvendedor 
				END, 4000
			) AS idvendedor,
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN 'DESHABILITADO' 
					ELSE ve.nombre 
				END, 'DESHABILITADO'
			) AS nombre,
			ve.orden,
			ve.color,
			ve.idgerente,
			ve.condicion
		FROM 
			vendedor ve
		LEFT JOIN 
			relacionvendedorusuario re ON re.idvendedor = ve.idvendedor
		LEFT JOIN 
			usuario u ON u.idusuario = re.idusuario
		WHERE 
			ve.tipo_persona='Vendedor'
		GROUP BY 
			idvendedor  
		ORDER BY 
			idvendedor ASC  
		) ve ON ve.idvendedor = v.idvendedor
		-- RIGHT JOIN para obtener todos los art«æculos y que los resultados se combinen adecuadamente
		RIGHT JOIN 
			articulo a ON a.idarticulo = d.idarticulo 
		WHERE 
			YEAR(v.fecha_hora) = YEAR(CURDATE()) 
			AND MONTH(v.fecha_hora) = MONTH(CURDATE()) 
			AND v.estado <> 'Anulado' 
            AND v.tipo_comprobante<>'Regalo' 
			AND (a.tipoproducto = 'Compuesto' OR a.tipoproducto = 'Negocio') 
		 GROUP BY 
			v.idvendedor, a.idarticulo 
		ORDER BY 
			a.idarticulo, idvendedor";
	
	return ejecutarConsulta($sql);
}

public function articulos(){
	$sql="SELECT * FROM articulo WHERE (tipoproducto='Negocio' OR tipoproducto='Combo') AND condicion='1' ORDER BY orden";
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function vendedores(){
	//$sql="SELECT * FROM vendedor WHERE tipo_persona='vendedor' AND condicion='1' ORDER BY orden";
	
	//Nuevo
	/**/
	$sql="SELECT 
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN 4000 
					ELSE ve.idvendedor 
				END, 4000
			) AS idvendedor,
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN 'DESHABILITADO' 
					ELSE ve.nombre 
				END, 'DESHABILITADO'
			) AS nombre,
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN 4000 
					ELSE ve.orden 
				END, 4000
			) AS orden,
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN '#f47f53' 
					ELSE ve.color 
				END, '#f47f53'
			) AS color,
			
			ve.idgerente,
			ve.condicion
		FROM 
			vendedor ve
		LEFT JOIN 
			relacionvendedorusuario re ON re.idvendedor = ve.idvendedor
		LEFT JOIN 
			usuario u ON u.idusuario = re.idusuario
		WHERE 
			ve.tipo_persona='Vendedor'
		GROUP BY 
			idvendedor  
		ORDER BY 
			orden ASC";
	
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function almacenes(){
	$sql="SELECT idalmacen,nombre,descripcion,condicion FROM almacen";
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function almacenesf($clase){
	$sql="SELECT *  FROM almacen WHERE factory = 1 AND clase LIKE '$clase'";
	return ejecutarConsulta($sql);
}

public function ventasarticulos30diasmesaencurso(){
	$sql="SELECT a.idarticulo,a.nombre,IF(sum(d.cantidad) is null,0,sum(d.cantidad)) as unidades,MONTH(v.fecha_hora) as mes,v.estado,DATE(fecha_hora) as fecha FROM articulo a LEFT JOIN detalle_venta d ON a.idarticulo=d.idarticulo LEFT JOIN venta v ON v.idventa=d.idventa WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND DATE(fecha_hora)>=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 30 DAY) and DATE(fecha_hora)<=DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP BY a.idarticulo ORDER BY a.idarticulo";
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function ventasarticulos60diasmesanteriorencurso(){
	$sql="SELECT a.idarticulo,a.nombre,IF(sum(d.cantidad) is null,0,sum(d.cantidad)) as unidades,MONTH(v.fecha_hora) as mes,v.estado,DATE(fecha_hora) as fecha FROM articulo a LEFT JOIN detalle_venta d ON a.idarticulo=d.idarticulo LEFT JOIN venta v ON v.idventa=d.idventa WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND DATE(fecha_hora)>=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 60 DAY) and DATE(fecha_hora)<=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 30 DAY) GROUP BY a.idarticulo ORDER BY a.idarticulo";
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function vendedormesanterior(){
	$sql="SELECT v.idvendedor,ve.nombre, SUM(v.total_ventaimpuestod) as venta,YEAR(v.fecha_hora) AS ANO,MONTH(v.fecha_hora) as mes,SUM(d.cajas) as cajas	FROM venta v 	INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa	INNER JOIN vendedor ve ON ve.idvendedor=v.idvendedor	WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND DATE(fecha_hora)>=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 60 DAY) and DATE(fecha_hora)<=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 30 DAY) GROUP BY v.idvendedor ORDER BY v.idvendedor";
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

public function vendedormesencurso(){
	$sql="SELECT v.idvendedor,ve.nombre, SUM(v.total_ventaimpuestod) as venta,YEAR(v.fecha_hora) AS ANO,MONTH(v.fecha_hora) as mes,SUM(d.cajas) as cajas	FROM venta v 	INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa	INNER JOIN vendedor ve ON ve.idvendedor=v.idvendedor WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND DATE(fecha_hora)>=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 30 DAY) and DATE(fecha_hora)<=DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP BY v.idvendedor ORDER BY v.idvendedor";
	//return ejecutarConsulta($sql);
	return ejecutarConsulta($sql);
}

//Ultimos 3 meses
public function ventasproductovendedorpromedio()
{
	//$sql="SELECT a.idarticulo,a.nombre as articulo, IF(AVG(d.cantidad-d.cantidadev) IS null,0,AVG(d.cantidad-d.cantidadev)) AS cajas, IF(p.idvendedor IS null,'N/A',p.idvendedor) as idvendedor FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa INNER JOIN persona p ON p.idpersona=v.idcliente RIGHT JOIN articulo a ON a.idarticulo=d.idarticulo WHERE YEAR(v.fecha_hora)=YEAR(NOW()) AND MONTH(v.fecha_hora)>=MONTH(DATE_SUB(NOW(), INTERVAL 3 MONTH)) AND MONTH(v.fecha_hora)<>MONTH(NOW()) AND v.estado<>'Anulado' AND (a.tipoproducto='Compuesto' OR a.tipoproducto='Negocio') GROUP BY p.idvendedor,a.idarticulo ORDER BY a.idarticulo,p.idvendedor";
	//Funciona para el aĆ±o en curso
	//$sql="SELECT a.idarticulo,a.nombre as articulo, (IF(sum(d.cantidad-d.cantidadev) IS null,0,sum(d.cantidad-d.cantidadev)))/3 AS cajas, IF(p.idvendedor IS null,'N/A',p.idvendedor) as idvendedor FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa INNER JOIN persona p ON p.idpersona=v.idcliente RIGHT JOIN articulo a ON a.idarticulo=d.idarticulo WHERE YEAR(v.fecha_hora)=YEAR(NOW()) AND MONTH(v.fecha_hora)>=MONTH(DATE_SUB(NOW(), INTERVAL 3 MONTH)) AND MONTH(v.fecha_hora)<>MONTH(NOW()) AND v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' AND (a.tipoproducto='Negocio') GROUP BY p.idvendedor,a.idarticulo ORDER BY a.idarticulo,p.idvendedor";
	
	//Toma los tres ultimo tres meses sin importar el aĆ±o
	//$sql="SELECT a.idarticulo,a.nombre as articulo, (IF(sum(d.cantidad-d.cantidadev) IS null,0,sum(d.cantidad-d.cantidadev)))/3 AS cajas, IF(p.idvendedor IS null,'N/A',p.idvendedor) as idvendedor FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa INNER JOIN persona p ON p.idpersona=v.idcliente RIGHT JOIN articulo a ON a.idarticulo=d.idarticulo WHERE v.fecha_hora >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND v.fecha_hora < (CURDATE() - INTERVAL 1 MONTH) AND v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' AND (a.tipoproducto='Negocio') GROUP BY p.idvendedor,a.idarticulo ORDER BY a.idarticulo,p.idvendedor";
	
	//En Uso
	//$sql="SELECT a.idarticulo,a.nombre as articulo, (IF(sum(d.cantidad-d.cantidadev) IS null,0,sum(d.cantidad-d.cantidadev)))/3 AS cajas, IF(p.idvendedor IS null,'N/A',p.idvendedor) as idvendedor FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa INNER JOIN persona p ON p.idpersona=v.idcliente RIGHT JOIN articulo a ON a.idarticulo=d.idarticulo WHERE v.fecha_hora >= (DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 3 MONTH) AND v.fecha_hora < (DATE_FORMAT(CURDATE(), '%Y-%m-01')) AND v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' AND (a.tipoproducto='Negocio') GROUP BY p.idvendedor,a.idarticulo ORDER BY a.idarticulo,p.idvendedor";
	
	//Nuevo
	/**/
	$sql="SELECT 
			a.idarticulo,
			a.nombre AS articulo, 
			-- IFNULL(SUM(d.cantidad - d.cantidadev), 0) AS cajas,  
            (IF(sum(d.cantidad-d.cantidadev) IS null,0,sum(d.cantidad-d.cantidadev)))/3 AS cajas,
			IFNULL(ve.idvendedor, 4000) AS idvendedor
		FROM 
			detalle_venta d 
		INNER JOIN 
			venta v ON v.idventa = d.idventa 
		-- Subconsulta para determinar el idvendedor con la condici«Ńn adecuada
		LEFT JOIN (
			SELECT 
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN 4000 
					ELSE ve.idvendedor 
				END, 4000
			) AS idvendedor,
			IFNULL(
				CASE 
					WHEN ve.condicion = 0 OR u.condicion = 0 THEN 'DESHABILITADO' 
					ELSE ve.nombre 
				END, 'DESHABILITADO'
			) AS nombre,
			ve.orden,
			ve.color,
			ve.idgerente,
			ve.condicion
		FROM 
			vendedor ve
		LEFT JOIN 
			relacionvendedorusuario re ON re.idvendedor = ve.idvendedor
		LEFT JOIN 
			usuario u ON u.idusuario = re.idusuario
		WHERE 
			ve.tipo_persona='Vendedor'
		GROUP BY 
			idvendedor  
		ORDER BY 
			idvendedor ASC  
		) ve ON ve.idvendedor = v.idvendedor
		-- RIGHT JOIN para obtener todos los art«æculos y que los resultados se combinen adecuadamente
		RIGHT JOIN 
			articulo a ON a.idarticulo = d.idarticulo 
		WHERE 
			v.fecha_hora >= (DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 3 MONTH) 
			AND v.fecha_hora < (DATE_FORMAT(CURDATE(), '%Y-%m-01'))  
			AND v.estado <> 'Anulado' 
            AND v.tipo_comprobante<>'Regalo' 
			AND (a.tipoproducto = 'Compuesto' OR a.tipoproducto = 'Negocio') 
		GROUP BY 
			v.idvendedor, a.idarticulo 
		ORDER BY 
			a.idarticulo, idvendedor";
		
	return ejecutarConsulta($sql);
}

public function ventasyearendollaryunidades(){
	//$sql="SELECT SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) GROUP BY YEAR(v.fecha_hora) ORDER BY v.idvendedor";
    $sql="SELECT SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO,COUNT(v.idventa) as numerocxc FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND v.tipo_comprobante<>'Regalo' GROUP BY YEAR(v.fecha_hora) ORDER BY v.idvendedor";
	return ejecutarConsulta($sql);
}

public function ventasmesendollaryunidades(){
	//$sql="SELECT SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO,MONTH(v.fecha_hora) as mes FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND DATE(fecha_hora)>=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 30 DAY) and DATE(fecha_hora)<=DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP BY MONTH(v.fecha_hora)";
	$sql="SELECT SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO,MONTH(v.fecha_hora) as mes, COUNT(v.idventa) as numerocxc  FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa	WHERE v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' AND YEAR(NOW())=YEAR(v.fecha_hora) AND MONTH(v.fecha_hora)= MONTH(NOW()) GROUP BY MONTH(v.fecha_hora)";
	return ejecutarConsulta($sql);
}

public function pedidosv(){
	$sql="SELECT COUNT(idpedido) as numeropedidov FROM pedido WHERE estado='Verificado'";
	return ejecutarConsulta($sql);
}

public function pedidosp(){
	$sql="SELECT COUNT(idpedido) as numeropedidop FROM pedido WHERE estado='Pendiente' AND idcliente<>0 AND idusuario<>0 AND idvendedor<>0";
	return ejecutarConsulta($sql);
}

/*
public function vendedoraperturacliente(){
	$sql="SELECT ve.idvendedor,ve.nombre,IF(c1.nropersona IS null,0,c1.nropersona) AS clientes,
	IF(c4.nroclientenuevo IS null,0,c4.nroclientenuevo) AS nroclientenuevo,
	IF(c2.nroclientemas90 IS null,0,c2.nroclientemas90) AS nroclientemas90,
	IF(c3.nroclientemes IS null,0,c3.nroclientemes) AS nroclientemes,
	round(((IF(c3.nroclientemes IS null,0,c3.nroclientemes))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemes,
	IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses) AS nroclientemesatentido3meses,
	round(((IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemesatentido3meses,
	IF(c5.nrocxcmes IS null,0,c5.nrocxcmes) AS nrocxcmes,
	round((IF(c6.nrocxctremes is null,0,c6.nrocxctremes))/3,0) AS promedionrocxctremes,
	IF(c7.nrocxcpendiente is null,0,c7.nrocxcpendiente) AS nrocxcpendiente,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.nrocxcpendientemas90) AS nrocxcpendientemas90
	FROM vendedor ve 
	LEFT JOIN (SELECT idvendedor,COUNT(idpersona) as nropersona FROM persona WHERE condicion=1 GROUP BY idvendedor) c1 ON c1.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,DATE_SUB(CURDATE(), INTERVAL 90 DAY) FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.ultima_fecha_venta <= DATE_SUB(CURDATE(), INTERVAL 90 DAY)) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemes FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.mes = MONTH(CURDATE())) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c3 ON c3.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT c.idvendedor,COUNT(c.idpersona) as nroclientenuevo FROM persona c INNER JOIN (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente) v ON v.idcliente = c.idpersona WHERE MONTH(c.fechacreacion) = MONTH(CURDATE()) AND YEAR(c.fechacreacion) = YEAR(CURDATE()) GROUP BY c.idvendedor) c4 ON c4.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcmes FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE YEAR(v.fecha_hora) = YEAR(CURDATE()) AND MONTH(v.fecha_hora) = MONTH(CURDATE()) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c5 ON c5.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxctremes FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c6 ON c6.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendiente FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.estado='Pendiente' OR v.estado='Parcial' GROUP BY p.idvendedor) c7 ON c7.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendientemas90 FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND (v.estado='Pendiente' OR v.estado='Parcial') GROUP BY p.idvendedor) c8 ON c8.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemesatentido3meses FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta FROM (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante<> 'Regalo' GROUP BY v.idcliente) sub WHERE sub.ultima_fecha_venta >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c9 ON c9.idvendedor=ve.idvendedor
	WHERE ve.condicion=1";
	return ejecutarConsulta($sql);
}

public function vendedoraperturacliente(){
	$sql="SELECT ve.idvendedor,ve.nombre,IF(c1.nropersona IS null,0,c1.nropersona) AS clientes,
	IF(c4.nroclientenuevo IS null,0,c4.nroclientenuevo) AS nroclientenuevo,
	IF(c2.nroclientemas90 IS null,0,c2.nroclientemas90) AS nroclientemas90,
	IF(c3.nroclientemes IS null,0,c3.nroclientemes) AS nroclientemes,
	round(((IF(c3.nroclientemes IS null,0,c3.nroclientemes))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemes,
	IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses) AS nroclientemesatentido3meses,
	round(((IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemesatentido3meses,
	IF(c5.nrocxcmes IS null,0,c5.nrocxcmes) AS nrocxcmes,
	round((IF(c6.nrocxctremes is null,0,c6.nrocxctremes))/3,0) AS promedionrocxctremes,
	IF(c7.nrocxcpendiente is null,0,c7.nrocxcpendiente) AS nrocxcpendiente,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.nrocxcpendientemas90) AS nrocxcpendientemas90
	FROM vendedor ve 
    LEFT JOIN (SELECT idvendedor,COUNT(idpersona) as nropersona FROM persona WHERE condicion=1 GROUP BY idvendedor) c1 ON c1.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,DATE_SUB(CURDATE(), INTERVAL 90 DAY) FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.ultima_fecha_venta <= DATE_SUB(CURDATE(), INTERVAL 90 DAY)) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	LEFT JOIN ((SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemes FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,sub.ano FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes,YEAR(MAX(v.fecha_hora)) AS ano FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.mes = MONTH(CURDATE()) AND sub.ano= YEAR(CURDATE())) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor)) c3 ON c3.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT c.idvendedor,COUNT(c.idpersona) as nroclientenuevo FROM persona c INNER JOIN (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente) v ON v.idcliente = c.idpersona WHERE MONTH(c.fechacreacion) = MONTH(CURDATE()) AND YEAR(c.fechacreacion) = YEAR(CURDATE()) GROUP BY c.idvendedor) c4 ON c4.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcmes FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE YEAR(v.fecha_hora) = YEAR(CURDATE()) AND MONTH(v.fecha_hora) = MONTH(CURDATE()) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c5 ON c5.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxctremes FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c6 ON c6.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendiente FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.estado='Pendiente' OR v.estado='Parcial' GROUP BY p.idvendedor) c7 ON c7.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendientemas90 FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND (v.estado='Pendiente' OR v.estado='Parcial') GROUP BY p.idvendedor) c8 ON c8.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemesatentido3meses FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta FROM (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante<> 'Regalo' GROUP BY v.idcliente) sub WHERE sub.ultima_fecha_venta >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c9 ON c9.idvendedor=ve.idvendedor
	WHERE ve.condicion=1";
	return ejecutarConsulta($sql);
}

public function vendedoraperturacliente(){
	$sql="SELECT ve.idvendedor,ve.nombre,IF(c1.nropersona IS null,0,c1.nropersona) AS clientes,
	IF(c4.nroclientenuevo IS null,0,c4.nroclientenuevo) AS nroclientenuevo,
	IF(c2.nroclientemas90 IS null,0,c2.nroclientemas90) AS nroclientemas90,
    IF(c10.clientesnoantendidonunca IS null,0,c10.clientesnoantendidonunca) AS clientesnoantendidonunca,
	IF(c3.nroclientemes IS null,0,c3.nroclientemes) AS nroclientemes,
	round(((IF(c3.nroclientemes IS null,0,c3.nroclientemes))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemes,
	IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses) AS nroclientemesatentido3meses,
	round(((IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemesatentido3meses,
	IF(c5.nrocxcmes IS null,0,c5.nrocxcmes) AS nrocxcmes,
	round((IF(c6.nrocxctremes is null,0,c6.nrocxctremes))/3,0) AS promedionrocxctremes,
	IF(c7.nrocxcpendiente is null,0,c7.nrocxcpendiente) AS nrocxcpendiente,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.nrocxcpendientemas90) AS nrocxcpendientemas90
	FROM vendedor ve 
    LEFT JOIN (SELECT idvendedor,COUNT(idpersona) as nropersona FROM persona WHERE condicion=1 AND tipo_persona='Cliente' GROUP BY idvendedor) c1 ON c1.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,DATE_SUB(CURDATE(), INTERVAL 90 DAY) FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.ultima_fecha_venta < DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <=LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	LEFT JOIN ((SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemes FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,sub.ano FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes,YEAR(MAX(v.fecha_hora)) AS ano FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.mes = MONTH(CURDATE()) AND sub.ano= YEAR(CURDATE())) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor)) c3 ON c3.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT c.idvendedor,COUNT(c.idpersona) as nroclientenuevo FROM persona c INNER JOIN (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente) v ON v.idcliente = c.idpersona WHERE MONTH(c.fechacreacion) = MONTH(CURDATE()) AND YEAR(c.fechacreacion) = YEAR(CURDATE()) GROUP BY c.idvendedor) c4 ON c4.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcmes FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE YEAR(v.fecha_hora) = YEAR(CURDATE()) AND MONTH(v.fecha_hora) = MONTH(CURDATE()) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c5 ON c5.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxctremes FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c6 ON c6.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendiente FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.estado='Pendiente' OR v.estado='Parcial' GROUP BY p.idvendedor) c7 ON c7.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendientemas90 FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND (v.estado='Pendiente' OR v.estado='Parcial') GROUP BY p.idvendedor) c8 ON c8.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemesatentido3meses FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta FROM (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante<> 'Regalo' GROUP BY v.idcliente) sub WHERE sub.ultima_fecha_venta >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <= LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c9 ON c9.idvendedor=ve.idvendedor
    LEFT JOIN (SELECT p.idvendedor,COUNT(p.idpersona) AS clientesnoantendidonunca FROM persona p LEFT JOIN (SELECT v.idcliente,MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' GROUP BY idcliente) vc ON vc.idcliente=p.idpersona WHERE vc.ultima_fecha_venta IS null AND p.tipo_persona='Cliente' AND p.condicion=1 GROUP BY p.idvendedor) c10 ON c10.idvendedor=ve.idvendedor
	WHERE ve.condicion=1";
	return ejecutarConsulta($sql);
}



public function vendedoraperturacliente(){
	$sql="SELECT ve.idvendedor,ve.nombre,IF(c1.nropersona IS null,0,c1.nropersona) AS clientes,
	IF(c4.nroclientenuevo IS null,0,c4.nroclientenuevo) AS nroclientenuevo,
	IF(c2.nroclientemas90 IS null,0,c2.nroclientemas90) AS nroclientemas90,
    IF(c10.clientesnoantendidonunca IS null,0,c10.clientesnoantendidonunca) AS clientesnoantendidonunca,
	IF(c3.nroclientemes IS null,0,c3.nroclientemes) AS nroclientemes,
	round(((IF(c3.nroclientemes IS null,0,c3.nroclientemes))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemes,
	IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses) AS nroclientemesatentido3meses,
	round(((IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemesatentido3meses,
	IF(c5.nrocxcmes IS null,0,c5.nrocxcmes) AS nrocxcmes,
	IF(c5.nrocxcmes IS null,0,c5.saldo) AS saldocxcmes,
	round((IF(c6.nrocxctremes is null,0,c6.nrocxctremes))/3,0) AS promedionrocxctremes,
	round((IF(c6.nrocxctremes is null,0,c6.saldo))/3,2) AS saldopromedionrocxctremes,
	IF(c7.nrocxcpendiente is null,0,c7.nrocxcpendiente) AS nrocxcpendiente,
	IF(c7.nrocxcpendiente is null,0,c7.saldo) AS saldocxcpendiente,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.nrocxcpendientemas90) AS nrocxcpendientemas90,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.saldo) AS saldocxcpendientemas90
	FROM vendedor ve 
    LEFT JOIN (SELECT idvendedor,COUNT(idpersona) as nropersona FROM persona WHERE condicion=1 AND tipo_persona='Cliente' GROUP BY idvendedor) c1 ON c1.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,DATE_SUB(CURDATE(), INTERVAL 90 DAY) FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.ultima_fecha_venta < DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <=LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	LEFT JOIN ((SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemes FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,sub.ano FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes,YEAR(MAX(v.fecha_hora)) AS ano FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.mes = MONTH(CURDATE()) AND sub.ano= YEAR(CURDATE())) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor)) c3 ON c3.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT c.idvendedor,COUNT(c.idpersona) as nroclientenuevo FROM persona c INNER JOIN (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente) v ON v.idcliente = c.idpersona WHERE MONTH(c.fechacreacion) = MONTH(CURDATE()) AND YEAR(c.fechacreacion) = YEAR(CURDATE()) GROUP BY c.idvendedor) c4 ON c4.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcmes,SUM((v.total_ventaimpuestod-v.montocxc-v.montodev)) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE YEAR(v.fecha_hora) = YEAR(CURDATE()) AND MONTH(v.fecha_hora) = MONTH(CURDATE()) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c5 ON c5.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxctremes,SUM((v.total_ventaimpuestod-v.montocxc-v.montodev)) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c6 ON c6.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendiente, SUM(IF(v.estado='Pendiente',(v.total_ventaimpuestod-v.montocxc-v.montodev),(v.montopendiente/v.tasa_dollar))) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.estado='Pendiente' OR v.estado='Parcial' GROUP BY p.idvendedor) c7 ON c7.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendientemas90, SUM(IF(v.estado='Pendiente',(v.total_ventaimpuestod-v.montocxc-v.montodev),(v.montopendiente/v.tasa_dollar))) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND (v.estado='Pendiente' OR v.estado='Parcial') GROUP BY p.idvendedor) c8 ON c8.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemesatentido3meses FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta FROM (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante<> 'Regalo' GROUP BY v.idcliente) sub WHERE sub.ultima_fecha_venta >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <= LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c9 ON c9.idvendedor=ve.idvendedor
    LEFT JOIN (SELECT p.idvendedor,COUNT(p.idpersona) AS clientesnoantendidonunca FROM persona p LEFT JOIN (SELECT v.idcliente,MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' GROUP BY idcliente) vc ON vc.idcliente=p.idpersona WHERE vc.ultima_fecha_venta IS null AND p.tipo_persona='Cliente' AND p.condicion=1 GROUP BY p.idvendedor) c10 ON c10.idvendedor=ve.idvendedor
	WHERE ve.condicion=1";
	return ejecutarConsulta($sql);
}


public function vendedoraperturacliente(){
	$sql="SELECT ve.idvendedor,ve.nombre,IF(c1.nropersona IS null,0,c1.nropersona) AS clientes,
	IF(c4.nroclientenuevo IS null,0,c4.nroclientenuevo) AS nroclientenuevo,
	IF(c2.nroclientemas90 IS null,0,c2.nroclientemas90) AS nroclientemas90,
    IF(c10.clientesnoantendidonunca IS null,0,c10.clientesnoantendidonunca) AS clientesnoantendidonunca,
	IF(c3.nroclientemes IS null,0,c3.nroclientemes) AS nroclientemes,
	round(((IF(c3.nroclientemes IS null,0,c3.nroclientemes))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemes,
	IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses) AS nroclientemesatentido3meses,
	round(((IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemesatentido3meses,
	IF(c5.nrocxcmes IS null,0,c5.nrocxcmes) AS nrocxcmes,
	IF(c5.nrocxcmes IS null,0,c5.saldo) AS saldocxcmes,
	round((IF(c6.nrocxctremes is null,0,c6.nrocxctremes))/3,0) AS promedionrocxctremes,
	round((IF(c6.nrocxctremes is null,0,c6.saldo))/3,2) AS saldopromedionrocxctremes,
	IF(c7.nrocxcpendiente is null,0,c7.nrocxcpendiente) AS nrocxcpendiente,
	IF(c7.nrocxcpendiente is null,0,c7.saldo) AS saldocxcpendiente,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.nrocxcpendientemas90) AS nrocxcpendientemas90,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.saldo) AS saldocxcpendientemas90
	FROM vendedor ve 
  LEFT JOIN (SELECT idvendedor,COUNT(idpersona) as nropersona FROM persona WHERE condicion=1 AND tipo_persona='Cliente' GROUP BY idvendedor) c1 ON c1.idvendedor=ve.idvendedor
	LEFT JOIN ((SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemes FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,sub.ano FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes,YEAR(MAX(v.fecha_hora)) AS ano FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.mes = MONTH(CURDATE()) AND sub.ano= YEAR(CURDATE())) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor)) c3 ON c3.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,DATE_SUB(CURDATE(), INTERVAL 90 DAY) FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.ultima_fecha_venta < DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <=LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemesatentido3meses FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta FROM (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante<> 'Regalo' GROUP BY v.idcliente) sub WHERE sub.ultima_fecha_venta >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <= LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c9 ON c9.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(p.idpersona) AS clientesnoantendidonunca FROM persona p LEFT JOIN (SELECT v.idcliente,MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY idcliente) vc ON vc.idcliente=p.idpersona WHERE vc.ultima_fecha_venta IS null AND p.tipo_persona='Cliente' AND p.condicion=1 GROUP BY p.idvendedor) c10 ON c10.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT c.idvendedor,COUNT(c.idpersona) as nroclientenuevo FROM persona c INNER JOIN (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente) v ON v.idcliente = c.idpersona WHERE MONTH(c.fechacreacion) = MONTH(CURDATE()) AND YEAR(c.fechacreacion) = YEAR(CURDATE()) GROUP BY c.idvendedor) c4 ON c4.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcmes,SUM((v.total_ventaimpuestod-v.montocxc-v.montodev)) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE YEAR(v.fecha_hora) = YEAR(CURDATE()) AND MONTH(v.fecha_hora) = MONTH(CURDATE()) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c5 ON c5.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxctremes,SUM((v.total_ventaimpuestod-v.montocxc-v.montodev)) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c6 ON c6.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendiente, SUM(IF(v.estado='Pendiente',(v.total_ventaimpuestod-v.montocxc-v.montodev),(v.montopendiente/v.tasa_dollar))) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.estado='Pendiente' OR v.estado='Parcial' GROUP BY p.idvendedor) c7 ON c7.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendientemas90, SUM(IF(v.estado='Pendiente',(v.total_ventaimpuestod-v.montocxc-v.montodev),(v.montopendiente/v.tasa_dollar))) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND (v.estado='Pendiente' OR v.estado='Parcial') GROUP BY p.idvendedor) c8 ON c8.idvendedor=ve.idvendedor
	
  
	WHERE ve.condicion=1";
	return ejecutarConsulta($sql);
}
*/


public function vendedoraperturacliente(){
	$sql="SELECT ve.idvendedor,ve.nombre,IF(c1.nropersona IS null,0,c1.nropersona) AS clientes,
	IF(c4.nroclientenuevo IS null,0,c4.nroclientenuevo) AS nroclientenuevo,
	IF(c2.nroclientemas90 IS null,0,c2.nroclientemas90) AS nroclientemas90,
    IF(c10.clientesnoantendidonunca IS null,0,c10.clientesnoantendidonunca) AS clientesnoantendidonunca,
	IF(c3.nroclientemes IS null,0,c3.nroclientemes) AS nroclientemes,
	round(((IF(c3.nroclientemes IS null,0,c3.nroclientemes))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemes,
	IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses) AS nroclientemesatentido3meses,
	round(((IF(c9.nroclientemesatentido3meses IS null,0,c9.nroclientemesatentido3meses))/(IF(c1.nropersona IS null,0,c1.nropersona)))*100,2) AS pornroclientemesatentido3meses,
	IF(c5.nrocxcmes IS null,0,c5.nrocxcmes) AS nrocxcmes,
	IF(c5.nrocxcmes IS null,0,c5.saldo) AS saldocxcmes,
	round((IF(c6.nrocxctremes is null,0,c6.nrocxctremes))/3,0) AS promedionrocxctremes,
	round((IF(c6.nrocxctremes is null,0,c6.saldo))/3,2) AS saldopromedionrocxctremes,
	IF(c7.nrocxcpendiente is null,0,c7.nrocxcpendiente) AS nrocxcpendiente,
	IF(c7.nrocxcpendiente is null,0,c7.saldo) AS saldocxcpendiente,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.nrocxcpendientemas90) AS nrocxcpendientemas90,
	IF(c8.nrocxcpendientemas90 IS null,0,c8.saldo) AS saldocxcpendientemas90
	FROM vendedor ve 
  LEFT JOIN (SELECT idvendedor,COUNT(idpersona) as nropersona FROM persona WHERE condicion=1 AND tipo_persona='Cliente' GROUP BY idvendedor) c1 ON c1.idvendedor=ve.idvendedor
	LEFT JOIN ((SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemes FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,sub.ano FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes,YEAR(MAX(v.fecha_hora)) AS ano FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.mes = MONTH(CURDATE()) AND sub.ano= YEAR(CURDATE())) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor)) c3 ON c3.idvendedor=ve.idvendedor
	/* No Incluye los clientes del mes en curso
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemesatentido3meses FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta FROM (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante<> 'Regalo' GROUP BY v.idcliente) sub WHERE sub.ultima_fecha_venta >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <= LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c9 ON c9.idvendedor=ve.idvendedor
	*/
	/* Incluye los clientes del mes en curso */
	
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemesatentido3meses FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta FROM (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante<> 'Regalo' GROUP BY v.idcliente) sub WHERE sub.ultima_fecha_venta >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH)) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c9 ON c9.idvendedor=ve.idvendedor
	/*
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,DATE_SUB(CURDATE(), INTERVAL 90 DAY) FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.ultima_fecha_venta < DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <=LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT sub.idcliente, sub.idventa, sub.ultima_fecha_venta, sub.mes, MONTH(CURDATE()) AS mescurso,DATE_SUB(CURDATE(), INTERVAL 90 DAY) FROM ( SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente ) sub WHERE sub.ultima_fecha_venta < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND sub.ultima_fecha_venta <=LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	*/
	LEFT JOIN (SELECT per.idvendedor,COUNT(per.idpersona) AS nroclientemas90 FROM persona per RIGHT JOIN (SELECT idcliente, MAX(fecha_hora) AS ultima_fecha_venta FROM venta WHERE estado <> 'Anulado' AND tipo_comprobante <> 'Regalo' GROUP BY idcliente HAVING MAX(fecha_hora) <= DATE_SUB(CURDATE(), INTERVAL 90 DAY)) v1 ON v1.idcliente=per.idpersona WHERE per.condicion=1 GROUP BY per.idvendedor) c2 ON c2.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(p.idpersona) AS clientesnoantendidonunca FROM persona p LEFT JOIN (SELECT v.idcliente,MAX(v.fecha_hora) AS ultima_fecha_venta FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY idcliente) vc ON vc.idcliente=p.idpersona WHERE vc.ultima_fecha_venta IS null AND p.tipo_persona='Cliente' AND p.condicion=1 GROUP BY p.idvendedor) c10 ON c10.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT c.idvendedor,COUNT(c.idpersona) as nroclientenuevo FROM persona c INNER JOIN (SELECT v.idcliente, v.idventa, MAX(v.fecha_hora) AS ultima_fecha_venta, MONTH(MAX(v.fecha_hora)) AS mes FROM venta v WHERE v.estado <> 'Anulado' AND v.tipo_comprobante <> 'Regalo' GROUP BY v.idcliente) v ON v.idcliente = c.idpersona WHERE MONTH(c.fechacreacion) = MONTH(CURDATE()) AND YEAR(c.fechacreacion) = YEAR(CURDATE()) GROUP BY c.idvendedor) c4 ON c4.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcmes,SUM((v.total_ventaimpuestod-v.montocxc-v.montodev)) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE YEAR(v.fecha_hora) = YEAR(CURDATE()) AND MONTH(v.fecha_hora) = MONTH(CURDATE()) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c5 ON c5.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxctremes,SUM((v.total_ventaimpuestod-v.montocxc-v.montodev)) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND v.tipo_comprobante<>'Regalo' AND v.estado<>'Anulado' GROUP BY p.idvendedor) c6 ON c6.idvendedor=ve.idvendedor
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendiente, SUM(IF(v.estado='Pendiente',(v.total_ventaimpuestod-v.montocxc-v.montodev),(v.montopendiente/v.tasa_dollar))) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.estado='Pendiente' OR v.estado='Parcial' GROUP BY p.idvendedor) c7 ON c7.idvendedor=ve.idvendedor
	/*
	LEFT JOIN (SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendientemas90, SUM(IF(v.estado='Pendiente',(v.total_ventaimpuestod-v.montocxc-v.montodev),(v.montopendiente/v.tasa_dollar))) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND (v.estado='Pendiente' OR v.estado='Parcial') GROUP BY p.idvendedor) c8 ON c8.idvendedor=ve.idvendedor
	*/
	LEFT JOIN (WITH venta_calculada AS (
            SELECT 
                v.idventa,
                v.idcliente,
                v.idvendedor,
                v.estado,
                v.num_comprobante1,
                v.fecha_hora,
                v.fechadespacho,
                v.nrodias,
                v.total_ventaimpuestod,
                v.montocxc,
                v.montodev,
                v.montopendiente,
                v.tasa_dollar,
                -- C«”lculo de fechainicio
                CASE 
                    WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                        THEN v.fecha_hora 
                    ELSE v.fechadespacho 
                END AS fechainicio,
                -- C«”lculo de fecha_vencimiento
                DATE_ADD(
                    CASE 
                        WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                            THEN v.fecha_hora 
                        ELSE v.fechadespacho 
                    END, 
                    INTERVAL v.nrodias DAY
                ) AS fecha_vencimiento,
                -- C«”lculo de diasparaelcredito
                DATEDIFF(
                    DATE_ADD(
                        CASE 
                            WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                                THEN v.fecha_hora 
                            ELSE v.fechadespacho 
                        END, 
                        INTERVAL v.nrodias DAY
                    ),
                    CURDATE()
                ) AS diasparaelcredito,
                -- C«”lculo de diastranscurridos
                DATEDIFF(
                    CURDATE(),
                    CASE 
                        WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                            THEN v.fecha_hora 
                        ELSE v.fechadespacho 
                    END
                ) AS diastranscurridos
            FROM 
                venta v
            WHERE 
                v.estado IN ('Pendiente', 'Parcial')
                AND v.nrodias > 0
                AND DATE_ADD(
                        CASE 
                            WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                                THEN v.fecha_hora 
                            ELSE v.fechadespacho 
                        END, 
                        INTERVAL v.nrodias DAY
                    ) <= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
        )
        
        SELECT 
            p.idvendedor,
            COUNT(vc.idventa) AS nrocxcpendientemas90, 
            ROUND(
                SUM(
                    CASE 
                        WHEN vc.estado = 'Pendiente' THEN (vc.total_ventaimpuestod - vc.montocxc - vc.montodev)
                        ELSE (vc.montopendiente / vc.tasa_dollar)
                    END
                ), 
                2
            ) AS saldo
        FROM 
            venta_calculada vc
        INNER JOIN 
            persona p ON p.idpersona = vc.idcliente
        LEFT JOIN 
            vendedor ve ON ve.idvendedor = p.idvendedor
        LEFT JOIN (
            SELECT 
                dc.iddocumento, 
                MAX(c.fecha_hora) AS fechacobro 
            FROM 
                detalle_cobros dc 
            INNER JOIN 
                cobros c ON c.idcobrocliente = dc.idcobrocliente 
            WHERE 
                c.estado <> 'Anulado' 
            GROUP BY 
                dc.iddocumento
        ) c ON c.iddocumento = vc.idventa
GROUP BY p.idvendedor) c8 ON c8.idvendedor=ve.idvendedor
  
	WHERE ve.condicion=1";
	return ejecutarConsulta($sql);
}


public function numeroarticulominimo(){
	$sql="SELECT COUNT(a.idarticulo) as nroarticulominimo FROM articulo a INNER JOIN (SELECT idarticulo,SUM(cantidad) AS cantidad FROM lote GROUP BY idarticulo) l ON l.idarticulo=a.idarticulo WHERE l.cantidad<=a.stockminimo AND l.cantidad>=0 AND a.stockminimo>0";
	return ejecutarConsulta($sql);
}

public function cxcmas90dias(){
	//$sql="SELECT p.idvendedor,COUNT(v.idventa) as nrocxcpendientemas90, SUM(IF(v.estado='Pendiente',(v.total_ventaimpuestod-v.montocxc-v.montodev),(v.montopendiente/v.tasa_dollar))) AS saldo FROM venta v INNER JOIN persona p ON p.idpersona=v.idcliente WHERE v.fecha_hora < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND (v.estado='Pendiente' OR v.estado='Parcial')";
	
	$sql="WITH venta_calculada AS (
            SELECT 
                v.idventa,
                v.idcliente,
                v.idvendedor,
                v.estado,
                v.num_comprobante1,
                v.fecha_hora,
                v.fechadespacho,
                v.nrodias,
                v.total_ventaimpuestod,
                v.montocxc,
                v.montodev,
                v.montopendiente,
                v.tasa_dollar,
                -- C«”lculo de fechainicio
                CASE 
                    WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                        THEN v.fecha_hora 
                    ELSE v.fechadespacho 
                END AS fechainicio,
                -- C«”lculo de fecha_vencimiento
                DATE_ADD(
                    CASE 
                        WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                            THEN v.fecha_hora 
                        ELSE v.fechadespacho 
                    END, 
                    INTERVAL v.nrodias DAY
                ) AS fecha_vencimiento,
                -- C«”lculo de diasparaelcredito
                DATEDIFF(
                    DATE_ADD(
                        CASE 
                            WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                                THEN v.fecha_hora 
                            ELSE v.fechadespacho 
                        END, 
                        INTERVAL v.nrodias DAY
                    ),
                    CURDATE()
                ) AS diasparaelcredito,
                -- C«”lculo de diastranscurridos
                DATEDIFF(
                    CURDATE(),
                    CASE 
                        WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                            THEN v.fecha_hora 
                        ELSE v.fechadespacho 
                    END
                ) AS diastranscurridos
            FROM 
                venta v
            WHERE 
                v.estado IN ('Pendiente', 'Parcial')
                AND v.nrodias > 0
                AND DATE_ADD(
                        CASE 
                            WHEN v.fechadespacho = '0000-00-00' OR v.fechadespacho IS NULL 
                                THEN v.fecha_hora 
                            ELSE v.fechadespacho 
                        END, 
                        INTERVAL v.nrodias DAY
                    ) <= DATE_SUB(CURDATE(), INTERVAL 90 DAY)
        )
        
        SELECT 
            p.idpersona,
            p.nombre AS cliente,
            p.idvendedor,
            ve.nombre AS vendedor, 
            COUNT(vc.idventa) AS nrocxcpendientemas90, 
            vc.num_comprobante1 AS nrocxc, 
            DATE_FORMAT(vc.fecha_hora, '%d-%m-%Y') AS fechafaturacion, 
            DATE_FORMAT(vc.fechadespacho, '%d-%m-%Y') AS fechadespacho, 
            DATE_FORMAT(vc.fechainicio, '%d-%m-%Y') AS fechainicio,
            DATE_FORMAT(vc.fecha_vencimiento, '%d-%m-%Y') AS fecha_vencimiento,
            vc.nrodias AS diasdecredito,
            vc.diasparaelcredito,
            vc.diastranscurridos AS diascalle,
            ROUND(
                SUM(
                    CASE 
                        WHEN vc.estado = 'Pendiente' THEN (vc.total_ventaimpuestod - vc.montocxc - vc.montodev)
                        ELSE (vc.montopendiente / vc.tasa_dollar)
                    END
                ), 
                2
            ) AS saldo,
            ROUND((vc.total_ventaimpuestod - vc.montocxc - vc.montodev), 2) AS monto,
            ROUND(
                SUM(
                    CASE 
                        WHEN vc.estado = 'Pagada' THEN (vc.total_ventaimpuestod - vc.montocxc - vc.montodev)
                        ELSE (vc.total_ventaimpuestod - vc.montocxc - vc.montodev) - (vc.montopendiente / vc.tasa_dollar)
                    END
                ), 
                2
            ) AS cobrado,
            CASE 
                WHEN c.fechacobro IS NULL AND vc.estado = 'Pagada' THEN 
                    CASE 
                        WHEN vc.fechadespacho = '0000-00-00' OR vc.fechadespacho IS NULL THEN vc.fecha_hora
                        ELSE vc.fechadespacho
                    END
                ELSE c.fechacobro
            END AS fechac,
            vc.estado
        FROM 
            venta_calculada vc
        INNER JOIN 
            persona p ON p.idpersona = vc.idcliente
        LEFT JOIN 
            vendedor ve ON ve.idvendedor = p.idvendedor
        LEFT JOIN (
            SELECT 
                dc.iddocumento, 
                MAX(c.fecha_hora) AS fechacobro 
            FROM 
                detalle_cobros dc 
            INNER JOIN 
                cobros c ON c.idcobrocliente = dc.idcobrocliente 
            WHERE 
                c.estado <> 'Anulado' 
            GROUP BY 
                dc.iddocumento
        ) c ON c.iddocumento = vc.idventa";
    /**/
	return ejecutarConsulta($sql);
}


public function cobranzayear(){
	$sql="SELECT SUM(c.total_pago) as cobrosdelyear	FROM cobros c 
	LEFT JOIN usuario u ON u.idusuario=c.idusuario 
	LEFT JOIN persona p ON p.idpersona=c.idcliente 
	LEFT JOIN bancocuenta b ON b.idbancocuenta=c.idbancocuenta 
	LEFT JOIN formapago f ON f.idformapago=c.idformapago 
	LEFT JOIN (SELECT d.idcobrocliente,GROUP_CONCAT(v.num_comprobante1 SEPARATOR ' - ') AS nroscxc,IF(v.num_comprobante=0,'',GROUP_CONCAT(v.num_comprobante SEPARATOR ' - ')) AS nrosfacturas FROM detalle_cobros d LEFT JOIN venta v ON v.idventa=d.iddocumento GROUP BY d.idcobrocliente) de ON de.idcobrocliente=c.idcobrocliente	
	WHERE YEAR(c.fecha_hora) = YEAR(CURDATE()) AND c.estado<>'Anulado' AND c.total_pago>0";
	return ejecutarConsulta($sql);
}

public function cobranzames(){
	$sql="SELECT SUM(c.total_pago) as cobrosdelmes FROM cobros c LEFT JOIN usuario u ON u.idusuario=c.idusuario LEFT JOIN persona p ON p.idpersona=c.idcliente LEFT JOIN bancocuenta b ON b.idbancocuenta=c.idbancocuenta LEFT JOIN formapago f ON f.idformapago=c.idformapago LEFT JOIN (SELECT d.idcobrocliente,GROUP_CONCAT(v.num_comprobante1 SEPARATOR ' - ') AS nroscxc,IF(v.num_comprobante=0,'',GROUP_CONCAT(v.num_comprobante SEPARATOR ' - ')) AS nrosfacturas FROM detalle_cobros d LEFT JOIN venta v ON v.idventa=d.iddocumento GROUP BY d.idcobrocliente) de ON de.idcobrocliente=c.idcobrocliente	WHERE MONTH(c.fecha_hora) = MONTH(CURDATE()) AND YEAR(c.fecha_hora) = YEAR(CURDATE()) AND c.estado<>'Anulado' AND c.total_pago>0";
	return ejecutarConsulta($sql);
}

public function cobranzamesa(){
	$sql="SELECT SUM(c.total_pago) as cobrosdelmes 
FROM cobros c 
LEFT JOIN usuario u ON u.idusuario=c.idusuario 
LEFT JOIN persona p ON p.idpersona=c.idcliente 
LEFT JOIN bancocuenta b ON b.idbancocuenta=c.idbancocuenta 
LEFT JOIN formapago f ON f.idformapago=c.idformapago 
LEFT JOIN (
    SELECT d.idcobrocliente,
           GROUP_CONCAT(v.num_comprobante1 SEPARATOR ' - ') AS nroscxc,
           IF(v.num_comprobante=0, '', GROUP_CONCAT(v.num_comprobante SEPARATOR ' - ')) AS nrosfacturas 
    FROM detalle_cobros d 
    LEFT JOIN venta v ON v.idventa=d.iddocumento 
    GROUP BY d.idcobrocliente
) de ON de.idcobrocliente=c.idcobrocliente 
WHERE MONTH(c.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH) 
  AND YEAR(c.fecha_hora) = YEAR(CURDATE() - INTERVAL 1 MONTH) 
  AND c.estado<>'Anulado' 
  AND c.total_pago>0;";
	return ejecutarConsulta($sql);
}

public function cajasdeschadasmes(){
	$sql="SELECT 
                v.idventa, 
                IF(v.fechadespacho='0000-00-00', 'sin fecha', date_format(v.fechadespacho, '%d-%m-%Y')) AS fechadespacho,
                IF(v.fechadespacho='0000-00-00', DATEDIFF(NOW(), DATE(v.fecha_hora)), DATEDIFF(NOW(), DATE(v.fechadespacho))) AS diasdecobranza,
                date_format(DATE(v.fecha_hora), '%d-%m-%Y') AS fecha,
                u.nombre AS usuario,
                p.nombre AS cliente,
                IF(l.estado IS NULL, IF(v.estado='Parcial', 'Pendiente', v.estado), l.estado) AS estadol,
                p.idvendedor,
                ve.nombre AS vendedor,
                SUM(de.cajas) AS total_cajas
            FROM 
                venta v 
            LEFT JOIN 
                logisticadespacho l ON l.idventa=v.idventa
            INNER JOIN 
                (SELECT idventa, SUM(cantidad - cantidadev) AS cajas FROM detalle_venta GROUP BY idventa) de ON de.idventa=v.idventa
            INNER JOIN 
                persona p ON p.idpersona=v.idcliente 
            LEFT JOIN 
                vendedor ve ON ve.idvendedor=p.idvendedor  
            INNER JOIN 
                usuario u ON v.idusuario=u.idusuario 
            WHERE 
                l.estado='Despachada' 
                AND v.tipo_comprobante <> 'Regalo' 
                AND v.fechadespacho >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
                AND v.fechadespacho < DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')
            ORDER BY 
                v.idventa DESC;";
        
	return ejecutarConsulta($sql);
}

//Ultimos Indicadores Mes Anterior
public function cajasdeschadasmesanterior(){
	//Por Fecha de factura
	/*
	$sql="SELECT v.idventa, 
       IF(v.fechadespacho='0000-00-00', 'sin fecha', date_format(v.fechadespacho, '%d-%m-%Y')) AS fechadespacho,
       IF(v.fechadespacho='0000-00-00', DATEDIFF(NOW(), DATE(v.fecha_hora)), DATEDIFF(NOW(), DATE(v.fechadespacho))) AS diasdecobranza,
       date_format(DATE(v.fecha_hora), '%d-%m-%Y') AS fecha,
       u.nombre AS usuario,
       p.nombre AS cliente,
       IF(l.estado IS NULL, IF(v.estado='Parcial', 'Pendiente', v.estado), l.estado) AS estadol,
       p.idvendedor,
       ve.nombre AS vendedor,SUM(de.cajas) as total_cajas
        FROM venta v 
        LEFT JOIN logisticadespacho l ON l.idventa=v.idventa
        INNER JOIN (SELECT idventa,sum(cantidad-cantidadev) as cajas FROM detalle_venta GROUP BY idventa) de ON de.idventa=v.idventa
        INNER JOIN persona p ON p.idpersona=v.idcliente 
        LEFT JOIN vendedor ve ON ve.idvendedor=p.idvendedor  
        INNER JOIN usuario u ON v.idusuario=u.idusuario 
        WHERE l.estado='Despachada' 
          AND v.tipo_comprobante<>'Regalo' 
          AND v.fecha_hora >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')
          AND v.fecha_hora < DATE_FORMAT(CURDATE(), '%Y-%m-01')
        ORDER BY v.idventa DESC";
    */    
    //Por Fecha de Despacho
    $sql="SELECT v.idventa, 
       IF(v.fechadespacho='0000-00-00', 'sin fecha', date_format(v.fechadespacho, '%d-%m-%Y')) AS fechadespacho,
       IF(v.fechadespacho='0000-00-00', DATEDIFF(NOW(), DATE(v.fecha_hora)), DATEDIFF(NOW(), DATE(v.fechadespacho))) AS diasdecobranza,
       date_format(DATE(v.fecha_hora), '%d-%m-%Y') AS fecha,
       u.nombre AS usuario,
       p.nombre AS cliente,
       IF(l.estado IS NULL, IF(v.estado='Parcial', 'Pendiente', v.estado), l.estado) AS estadol,
       p.idvendedor,
       ve.nombre AS vendedor,SUM(de.cajas) as total_cajas
        FROM venta v 
        LEFT JOIN logisticadespacho l ON l.idventa=v.idventa
        INNER JOIN (SELECT idventa,sum(cantidad-cantidadev) as cajas FROM detalle_venta GROUP BY idventa) de ON de.idventa=v.idventa
        INNER JOIN persona p ON p.idpersona=v.idcliente 
        LEFT JOIN vendedor ve ON ve.idvendedor=p.idvendedor  
        INNER JOIN usuario u ON v.idusuario=u.idusuario 
        WHERE l.estado='Despachada' 
          AND v.tipo_comprobante<>'Regalo' 
          AND v.fechadespacho >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')
          AND v.fechadespacho < DATE_FORMAT(CURDATE(), '%Y-%m-01')
        ORDER BY v.idventa DESC";
        
	return ejecutarConsulta($sql);
}



public function ventasmesendollaryunidadesa(){
	//$sql="SELECT SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO,MONTH(v.fecha_hora) as mes FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND DATE(fecha_hora)>=(DATE_FORMAT(NOW(),'%Y-%m-%d')-INTERVAL 30 DAY) and DATE(fecha_hora)<=DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP BY MONTH(v.fecha_hora)";
	$sql="SELECT 
    SUM(v.total_ventaimpuestod - v.montocxc - v.montodev + v.montoigtfporcentaje) as venta,
    SUM(d.cajas) as cajas,
    YEAR(v.fecha_hora) AS ANO,
    MONTH(v.fecha_hora) as mes,
    COUNT(v.idventa) as numerocxc  
FROM venta v 
INNER JOIN (
    SELECT idventa, SUM(cantidad - cantidadev) as cajas 
    FROM detalle_venta 
    GROUP BY idventa
) d ON d.idventa=v.idventa
WHERE 
    v.estado <> 'Anulado' 
    AND v.tipo_comprobante <> 'Regalo' 
    AND YEAR(v.fecha_hora) = YEAR(CURDATE() - INTERVAL 1 MONTH)
    AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH)
GROUP BY MONTH(v.fecha_hora);
";
	return ejecutarConsulta($sql);
}

//Nuevo mes en curso
public function ventasmesvendedor(){
	$sql="SELECT v.idvendedor,ve.nombre AS vendedor,ve.idgerente,ifnull(ve1.nombre,'OFICINA') as gerente, IFNULL(ve1.color,'#d5ffff') AS color,SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa LEFT JOIN persona p ON p.idpersona=v.idcliente LEFT JOIN vendedor ve ON ve.idvendedor=p.idvendedor LEFT JOIN vendedor ve1 ON ve1.idvendedor=ve.idgerente 
	WHERE v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' 
	AND YEAR(NOW())=YEAR(v.fecha_hora) 
	AND MONTH(v.fecha_hora)= MONTH(NOW())";
	return ejecutarConsulta($sql);
}

public function ventasmesproducto(){
	$sql="SELECT d.idventa,d.idarticulo,a.nombre AS articulo,SUM(d.cantidad -d.cantidadev) as cajas FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa LEFT JOIN articulo a ON a.idarticulo=d.idarticulo 
	WHERE v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' 
	AND YEAR(NOW())=YEAR(v.fecha_hora) 
	AND MONTH(v.fecha_hora)= MONTH(NOW())";
	return ejecutarConsulta($sql);
}

public function ventasmescanales(){
	$sql="SELECT ve.idgerente,ifnull(ve1.nombre,'OFICINA') as gerente, IFNULL(ve1.color,'#d5ffff') AS color,SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa LEFT JOIN persona p ON p.idpersona=v.idcliente LEFT JOIN vendedor ve ON ve.idvendedor=p.idvendedor LEFT JOIN vendedor ve1 ON ve1.idvendedor=ve.idgerente 
	WHERE v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' 
	AND YEAR(NOW())=YEAR(v.fecha_hora) 
	AND MONTH(v.fecha_hora)= MONTH(NOW())";
	return ejecutarConsulta($sql);
}

//Nuevo mes en anterior
public function ventasmesvendedora(){
	$sql="SELECT v.idvendedor,ve.nombre AS vendedor,ve.idgerente,ifnull(ve1.nombre,'OFICINA') as gerente, IFNULL(ve1.color,'#d5ffff') AS color,SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa LEFT JOIN persona p ON p.idpersona=v.idcliente LEFT JOIN vendedor ve ON ve.idvendedor=p.idvendedor LEFT JOIN vendedor ve1 ON ve1.idvendedor=ve.idgerente 
	WHERE v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' 
	AND YEAR(v.fecha_hora) = YEAR(CURDATE() - INTERVAL 1 MONTH) 
	AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH)";
	return ejecutarConsulta($sql);
}

public function ventasmesproductoa(){
	$sql="SELECT d.idventa,d.idarticulo,a.nombre AS articulo,SUM(d.cantidad -d.cantidadev) as cajas FROM detalle_venta d INNER JOIN venta v ON v.idventa=d.idventa LEFT JOIN articulo a ON a.idarticulo=d.idarticulo 
	WHERE v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' 
	AND YEAR(v.fecha_hora) = YEAR(CURDATE() - INTERVAL 1 MONTH) 
	AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH)";
	return ejecutarConsulta($sql);
}

public function ventasmescanalesa(){
	$sql="SELECT ve.idgerente,ifnull(ve1.nombre,'OFICINA') as gerente, IFNULL(ve1.color,'#d5ffff') AS color,SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa LEFT JOIN persona p ON p.idpersona=v.idcliente LEFT JOIN vendedor ve ON ve.idvendedor=p.idvendedor LEFT JOIN vendedor ve1 ON ve1.idvendedor=ve.idgerente 
	WHERE v.estado<>'Anulado' AND v.tipo_comprobante<>'Regalo' 
	AND YEAR(v.fecha_hora) = YEAR(CURDATE() - INTERVAL 1 MONTH) 
	AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH)";
	return ejecutarConsulta($sql);
}

//A«Šo
public function ventasvendedoryear(){
	$sql="SELECT 
    v.idvendedor,
    ve.nombre AS vendedor,
    ve.idgerente,
    IFNULL(ve1.nombre, 'OFICINA') AS gerente, 
    IFNULL(ve1.color, '#d5ffff') AS color,
    SUM(v.total_ventaimpuestod - v.montocxc - v.montodev + v.montoigtfporcentaje) AS venta,
    SUM(d.cajas) AS cajas,
    YEAR(v.fecha_hora) AS ANO 
	FROM 
		venta v 
	INNER JOIN 
		(SELECT idventa, SUM(cantidad - cantidadev) AS cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa = v.idventa 
	LEFT JOIN 
		persona p ON p.idpersona = v.idcliente 
	LEFT JOIN 
		vendedor ve ON ve.idvendedor = p.idvendedor 
	LEFT JOIN 
		vendedor ve1 ON ve1.idvendedor = ve.idgerente 
	WHERE 
		v.estado <> 'Anulado' 
		AND v.tipo_comprobante <> 'Regalo' 
		AND YEAR(v.fecha_hora) = YEAR(CURDATE())
	-- GROUP BY 
		-- ve.idvendedor
	";
	return ejecutarConsulta($sql);
}

public function ventasproductoyear(){
	$sql="SELECT 
    d.idventa, 
    d.idarticulo, 
    a.nombre AS articulo, 
    SUM(d.cantidad - d.cantidadev) AS cajas 
	FROM 
		detalle_venta d 
	INNER JOIN 
		venta v ON v.idventa = d.idventa 
	LEFT JOIN 
		articulo a ON a.idarticulo = d.idarticulo 
	WHERE 
		v.estado <> 'Anulado' 
		AND v.tipo_comprobante <> 'Regalo' 
		AND YEAR(v.fecha_hora) = YEAR(CURDATE())
	-- GROUP BY 
		-- d.idarticulo;
	";
	return ejecutarConsulta($sql);
}

public function ventascanalesyear(){
	$sql="SELECT 
    ve.idgerente, 
    IFNULL(ve1.nombre, 'OFICINA') AS gerente, 
    IFNULL(ve1.color, '#d5ffff') AS color,
    SUM(v.total_ventaimpuestod - v.montocxc - v.montodev + v.montoigtfporcentaje) AS venta,
    SUM(d.cajas) AS cajas,
    YEAR(v.fecha_hora) AS ANO 
	FROM 
		venta v 
	INNER JOIN 
		(SELECT idventa, SUM(cantidad - cantidadev) AS cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa = v.idventa 
	LEFT JOIN 
		persona p ON p.idpersona = v.idcliente 
	LEFT JOIN 
		vendedor ve ON ve.idvendedor = v.idvendedor 
	LEFT JOIN 
		vendedor ve1 ON ve1.idvendedor = ve.idgerente 
	WHERE 
		v.estado <> 'Anulado' 
		AND v.tipo_comprobante <> 'Regalo' 
		AND YEAR(v.fecha_hora) = YEAR(CURDATE())
	-- GROUP BY 
		-- ve.idgerente;
	";
	return ejecutarConsulta($sql);
}

public function cajasdeschadasyear(){
	$sql="SELECT 
		v.idventa, 
		IF(v.fechadespacho = '0000-00-00', 'sin fecha', DATE_FORMAT(v.fechadespacho, '%d-%m-%Y')) AS fechadespacho,
		IF(v.fechadespacho = '0000-00-00', DATEDIFF(NOW(), DATE(v.fecha_hora)), DATEDIFF(NOW(), DATE(v.fechadespacho))) AS diasdecobranza,
		DATE_FORMAT(DATE(v.fecha_hora), '%d-%m-%Y') AS fecha,
		u.nombre AS usuario,
		p.nombre AS cliente,
		IF(l.estado IS NULL, IF(v.estado = 'Parcial', 'Pendiente', v.estado), l.estado) AS estadol,
		p.idvendedor,
		ve.nombre AS vendedor,
		SUM(de.cajas) AS total_cajas
		FROM 
			venta v 
		LEFT JOIN 
			logisticadespacho l ON l.idventa = v.idventa
		INNER JOIN 
			(SELECT idventa, SUM(cantidad - cantidadev) AS cajas FROM detalle_venta GROUP BY idventa) de ON de.idventa = v.idventa
		INNER JOIN 
			persona p ON p.idpersona = v.idcliente 
		LEFT JOIN 
			vendedor ve ON ve.idvendedor = p.idvendedor  
		INNER JOIN 
			usuario u ON v.idusuario = u.idusuario 
		WHERE 
			l.estado = 'Despachada' 
			AND v.tipo_comprobante <> 'Regalo' 
			AND YEAR(v.fechadespacho) = YEAR(CURDATE())
		ORDER BY 
			v.idventa DESC;
		";
        
	return ejecutarConsulta($sql);
}

public function ventasyearendollaryunidadesc($idusuario){
	$sql="SELECT SUM(v.total_ventaimpuestod-v.montocxc-v.montodev+v.montoigtfporcentaje) as venta,SUM(d.cajas) as cajas,YEAR(v.fecha_hora) AS ANO FROM venta v INNER JOIN (SELECT idventa,SUM(cantidad -cantidadev) as cajas FROM detalle_venta GROUP BY idventa) d ON d.idventa=v.idventa INNER JOIN persona p ON p.idpersona=v.idcliente INNER JOIN relacionvendedorusuario r ON r.idvendedor=p.idvendedor WHERE v.estado<>'Anulado' AND YEAR(NOW())=YEAR(v.fecha_hora) AND r.idusuario='$idusuario' GROUP BY YEAR(v.fecha_hora) ORDER BY v.idvendedor";
	return ejecutarConsulta($sql);
}


//Mes
//Cobranza en transito

public function cobranzaentransito(){
	$sql="SELECT 
    v.idvendedor, 
    v.nombre AS vendedor, 
    v.idgerente, 
    v1.nombre AS gerente, 
    SUM(IF(f.nombre = 'TRANSFERENCIA', c.total_pagob, 0)) AS total_pagobs, 
    SUM(IF(f.nombre = 'TRANSFERENCIA', c.total_pago, 0)) AS total_pagotasad, 
    SUM(IF(f.nombre <> 'TRANSFERENCIA', c.total_pago, 0)) AS total_pagod, 
    SUM(c.total_pago) AS total_pago, 
    SUM(c.total_pagob) AS total_pagob, 
    c.tasacambioventa, 
    c.estado
FROM 
    cobrosv c 
LEFT JOIN 
    persona p ON p.idpersona = c.idcobrocliente 
LEFT JOIN 
    vendedor v ON v.idvendedor = p.idvendedor 
LEFT JOIN 
    vendedor v1 ON v1.idvendedor = v.idgerente 
LEFT JOIN 
    formapago f ON f.idformapago = c.idformapago 
WHERE 
    c.estado = 'Pago'
-- GROUP BY 
--    v.idvendedor, v.idgerente
ORDER BY 
    v.nombre ASC";
	return ejecutarConsulta($sql);
}


//Precio promedio

//Mes
public function preciopromediom(){
	$sql="WITH ArticuloVentas AS (
    SELECT
        d.idarticulo,
        a.nombre AS articulo,
        SUM(d.cantidad - d.cantidadev) AS cajas,
        SUM((d.cantidad - d.cantidadev) * (d.precio_venta / v.tasa_dollar)) AS totalventa,
        MIN(d.precio_venta / v.tasa_dollar) AS preciomenor,
        MAX(d.precio_venta / v.tasa_dollar) AS preciomayor,
        SUM((d.cantidad - d.cantidadev) * (d.precio_venta / v.tasa_dollar)) / SUM(d.cantidad - d.cantidadev) AS preciopromedio
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    LEFT JOIN 
        articulo a ON a.idarticulo = d.idarticulo
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE())
        AND MONTH(v.fecha_hora) = MONTH(CURDATE())
    -- GROUP BY 
       -- d.idarticulo
),
VentasMenor AS (
    SELECT
        d.idarticulo,
        d.idventa,
        (d.precio_venta / v.tasa_dollar) AS preciomenor
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE())
        AND MONTH(v.fecha_hora) = MONTH(CURDATE())
    ORDER BY 
        preciomenor ASC
    LIMIT 1
),
VentasMayor AS (
    SELECT
        d.idarticulo,
        d.idventa,
        (d.precio_venta / v.tasa_dollar) AS preciomayor
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE())
        AND MONTH(v.fecha_hora) = MONTH(CURDATE())
    ORDER BY 
        preciomayor DESC
    LIMIT 1
)
SELECT
    av.idarticulo,
    av.articulo,
    av.cajas,
    av.totalventa,
    av.preciomenor,
    vm.idventa AS idventa_preciomenor,
    av.preciomayor,
    vma.idventa AS idventa_preciomayor,
    av.preciopromedio
FROM 
    ArticuloVentas av
LEFT JOIN 
    VentasMenor vm ON av.idarticulo = vm.idarticulo
LEFT JOIN 
    VentasMayor vma ON av.idarticulo = vma.idarticulo
ORDER BY 
    av.cajas DESC
	";
	return ejecutarConsulta($sql);
}

//Mes Anterior
public function preciopromedioma(){
	$sql="WITH ArticuloVentas AS (
    SELECT
        d.idarticulo,
        a.nombre AS articulo,
        SUM(d.cantidad - d.cantidadev) AS cajas,
        SUM((d.cantidad - d.cantidadev) * (d.precio_venta / v.tasa_dollar)) AS totalventa,
        MIN(d.precio_venta / v.tasa_dollar) AS preciomenor,
        MAX(d.precio_venta / v.tasa_dollar) AS preciomayor,
        SUM((d.cantidad - d.cantidadev) * (d.precio_venta / v.tasa_dollar)) / SUM(d.cantidad - d.cantidadev) AS preciopromedio
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    LEFT JOIN 
        articulo a ON a.idarticulo = d.idarticulo
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE()) -- A«Šo en curso
        AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH) -- Mes anterior
    -- GROUP BY 
        -- d.idarticulo
),
VentasMenor AS (
    SELECT
        d.idarticulo,
        d.idventa,
        (d.precio_venta / v.tasa_dollar) AS preciomenor
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE()) -- A«Šo en curso
        AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH) -- Mes anterior
    ORDER BY 
        preciomenor ASC
    LIMIT 1
),
VentasMayor AS (
    SELECT
        d.idarticulo,
        d.idventa,
        (d.precio_venta / v.tasa_dollar) AS preciomayor
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE()) -- A«Šo en curso
        AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH) -- Mes anterior
    ORDER BY 
        preciomayor DESC
    LIMIT 1
)
SELECT
    av.idarticulo,
    av.articulo,
    av.cajas,
    av.totalventa,
    av.preciomenor,
    vm.idventa AS idventa_preciomenor,
    av.preciomayor,
    vma.idventa AS idventa_preciomayor,
    av.preciopromedio
FROM 
    ArticuloVentas av
LEFT JOIN 
    VentasMenor vm ON av.idarticulo = vm.idarticulo
LEFT JOIN 
    VentasMayor vma ON av.idarticulo = vma.idarticulo
ORDER BY 
    av.cajas DESC
	";
	return ejecutarConsulta($sql);
}

// A«Šo
public function preciopromedioy(){
	$sql="WITH ArticuloVentas AS (
    SELECT
        d.idarticulo,
        a.nombre AS articulo,
        SUM(d.cantidad - d.cantidadev) AS cajas,
        SUM((d.cantidad - d.cantidadev) * (d.precio_venta / v.tasa_dollar)) AS totalventa,
        MIN(d.precio_venta / v.tasa_dollar) AS preciomenor,
        MAX(d.precio_venta / v.tasa_dollar) AS preciomayor,
        SUM((d.cantidad - d.cantidadev) * (d.precio_venta / v.tasa_dollar)) / SUM(d.cantidad - d.cantidadev) AS preciopromedio
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    LEFT JOIN 
        articulo a ON a.idarticulo = d.idarticulo
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE()) -- A«Šo en curso
        -- AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH) -- Mes anterior
    -- GROUP BY 
        -- d.idarticulo
),
VentasMenor AS (
    SELECT
        d.idarticulo,
        d.idventa,
        (d.precio_venta / v.tasa_dollar) AS preciomenor
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE()) -- A«Šo en curso
        -- AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH) -- Mes anterior
    ORDER BY 
        preciomenor ASC
    LIMIT 1
),
VentasMayor AS (
    SELECT
        d.idarticulo,
        d.idventa,
        (d.precio_venta / v.tasa_dollar) AS preciomayor
    FROM 
        detalle_venta d
    INNER JOIN 
        venta v ON v.idventa = d.idventa
    WHERE 
        v.estado <> 'Anulado'
        AND v.tipo_comprobante <> 'Regalo'
        AND YEAR(v.fecha_hora) = YEAR(CURDATE()) -- A«Šo en curso
        -- AND MONTH(v.fecha_hora) = MONTH(CURDATE() - INTERVAL 1 MONTH) -- Mes anterior
    ORDER BY 
        preciomayor DESC
    LIMIT 1
)
SELECT
    av.idarticulo,
    av.articulo,
    av.cajas,
    av.totalventa,
    av.preciomenor,
    vm.idventa AS idventa_preciomenor,
    av.preciomayor,
    vma.idventa AS idventa_preciomayor,
    av.preciopromedio
FROM 
    ArticuloVentas av
LEFT JOIN 
    VentasMenor vm ON av.idarticulo = vm.idarticulo
LEFT JOIN 
    VentasMayor vma ON av.idarticulo = vma.idarticulo
ORDER BY 
    av.cajas DESC
	";
	return ejecutarConsulta($sql);
}

//Cuentas por cobrar a vencer a menos de dias
public function cxcporvencermeno10dias(){
	$sql="WITH venta_calculada AS (
		SELECT 
			v.idventa,
			v.idcliente,
			v.idvendedor,
			v.estado,
			v.num_comprobante1,
			v.fecha_hora,
			v.fechadespacho,
			v.nrodias,
			v.total_ventaimpuestod,
			v.montocxc,
			v.montodev,
			v.montopendiente,
			v.tasa_dollar,
			-- C«”lculo de fechainicio
			IF(v.fechadespacho = '0000-00-00', v.fecha_hora, v.fechadespacho) AS fechainicio,
			-- C«”lculo de fecha_vencimiento
			DATE_ADD(IF(v.fechadespacho = '0000-00-00', v.fecha_hora, v.fechadespacho), INTERVAL v.nrodias DAY) AS fecha_vencimiento,
			-- C«”lculo de diasparaelcredito
			DATEDIFF(
				DATE_ADD(IF(v.fechadespacho = '0000-00-00', v.fecha_hora, v.fechadespacho), INTERVAL v.nrodias DAY),
				CURDATE()
			) AS diasparaelcredito,
			-- C«”lculo de diastranscurridos
			DATEDIFF(
				CURDATE(),
				IF(v.fechadespacho = '0000-00-00', v.fecha_hora, v.fechadespacho)
			) AS diastranscurridos
		FROM 
			venta v
		WHERE 
			v.estado IN ('Pendiente', 'Parcial')
			AND v.nrodias > 0
			AND DATEDIFF(
					DATE_ADD(IF(v.fechadespacho = '0000-00-00', v.fecha_hora, v.fechadespacho), INTERVAL v.nrodias DAY),
					CURDATE()
				) BETWEEN 0 AND 10
	)

	SELECT 
		p.idpersona,
		p.nombre AS cliente,
		p.idvendedor,
		ve.nombre AS vendedor, 
		COUNT(vc.idventa) AS nrocxcpendientemas90, 
		vc.num_comprobante1 AS cxc, 
		DATE_FORMAT(vc.fecha_hora, '%d-%m-%Y') AS fechafacturacion, 
		DATE_FORMAT(vc.fechadespacho, '%d-%m-%Y') AS fechadespacho, 
		DATE_FORMAT(vc.fechainicio, '%d-%m-%Y') AS fechainicio,
		DATE_FORMAT(vc.fecha_vencimiento, '%d-%m-%Y') AS fecha_vencimiento,
		vc.nrodias AS diasdecredito,
		vc.diasparaelcredito,
		vc.diastranscurridos,
		ROUND(
			SUM(
				IF(
					vc.estado = 'Pendiente', 
					(vc.total_ventaimpuestod - vc.montocxc - vc.montodev), 
					(vc.montopendiente / vc.tasa_dollar)
				)
			), 
			2
		) AS saldo
	FROM 
		venta_calculada vc
	INNER JOIN 
		persona p ON p.idpersona = vc.idcliente
	LEFT JOIN 
		vendedor ve ON ve.idvendedor = p.idvendedor
	-- GROUP BY 
	--    vc.idventa
	-- ORDER BY 
	--    vc.diasparaelcredito ASC 
	";
	return ejecutarConsulta($sql);
}

public function backorder(){
	$sql="SELECT 
    d.idpedido,
    d.idarticulo,
    a.nombre AS articulo,
    SUM(d.cantidad - d.cantidad_facturada) AS backorder
	FROM 
		detalle_pedido d
	INNER JOIN 
		pedido p ON p.idpedido = d.idpedido
	INNER JOIN 
		articulo a ON a.idarticulo = d.idarticulo
	WHERE 
		p.estado = 'Parcial'
	-- GROUP BY 
		-- d.idarticulo
	HAVING 
		backorder > 0
	ORDER BY 
		backorder DESC;";
	return ejecutarConsulta($sql);
}

public function clientesatendidos()  {
	$sql="SELECT 
		p.idvendedor,
		ve.nombre as vendedor,
		COUNT(p.idpersona) as nrocliente,
		SUM(IFNULL(c.num_visitas,0)) AS nrovisitas,
		sum(IF(c.num_visitas is null,0,1)) as clientesvisitado,
		sum(IF(c.num_visitas is null,1,0)) as clientesnovisitado
		FROM persona p
		LEFT JOIN (SELECT 
					d.idcliente,
					d.idvendedor,
					COUNT(d.idcliente) AS num_visitas
				FROM 
					detalle_controlvisita d
				WHERE 
					YEAR(d.fechavisita) = YEAR(CURDATE()) 
					AND MONTH(d.fechavisita) = MONTH(CURDATE())
				GROUP BY 
					d.idcliente) c ON c.idcliente=p.idpersona
		LEFT JOIN vendedor ve ON ve.idvendedor=p.idvendedor
		WHERE
			p.condicion = 1 
			AND p.tipo_persona = 'Cliente'
		-- Chocomilk 
		 AND ve.idgerente=55
		 AND p.idvendedor<>61
		-- Local
		-- AND ve.idgerente='11'
		-- GROUP BY
			-- p.idpersona,
			-- p.idvendedor
		ORDER BY
			p.idvendedor";
	return ejecutarConsulta($sql);
}

//Mes Anterior
public function clientesatendidosa() {
    $sql = "SELECT 
                p.idvendedor,
                ve.nombre AS vendedor,
                COUNT(p.idpersona) AS nrocliente,
                SUM(IFNULL(c.num_visitas, 0)) AS nrovisitas,
                SUM(IF(c.num_visitas IS NULL, 0, 1)) AS clientesvisitado,
                SUM(IF(c.num_visitas IS NULL, 1, 0)) AS clientesnovisitado
            FROM persona p
            LEFT JOIN (
                SELECT 
                    d.idcliente,
                    d.idvendedor,
                    COUNT(d.idcliente) AS num_visitas
                FROM 
                    detalle_controlvisita d
                WHERE 
                    YEAR(d.fechavisita) = YEAR(CURDATE() - INTERVAL 1 MONTH) 
                    AND MONTH(d.fechavisita) = MONTH(CURDATE() - INTERVAL 1 MONTH)
                GROUP BY 
                    d.idcliente
            ) c ON c.idcliente = p.idpersona
            LEFT JOIN vendedor ve ON ve.idvendedor = p.idvendedor
            WHERE
                p.condicion = 1 
                AND p.tipo_persona = 'Cliente'
                -- Chocomilk 
                 AND ve.idgerente = 55
                 AND p.idvendedor <> 61
                -- Local
                -- AND ve.idgerente = '11'
			-- GROUP BY
			-- p.idpersona,
			-- p.idvendedor
            ORDER BY
                p.idvendedor";
    return ejecutarConsulta($sql);
}












}

 ?>
