/*
 Navicat Premium Data Transfer

 Source Server         : 56 Zero Tier
 Source Server Type    : MySQL
 Source Server Version : 50644 (5.6.44-log)
 Source Host           : 192.168.196.18:3306
 Source Schema         : erpsatelite

 Target Server Type    : MariaDB
 Target Server Version : 101199
 File Encoding         : 65001

 Date: 17/11/2025 09:15:50
*/


-- ----------------------------
-- View structure for vw_cuentas_bancarias
-- ----------------------------
DROP VIEW IF EXISTS `vw_cuentas_bancarias`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY INVOKER VIEW `vw_cuentas_bancarias` AS select `cub_cuenta_bancaria`.`cub_id` AS `cub_id`,concat(`ban_banco`.`ban_nombre`,': ',`cub_cuenta_bancaria`.`cub_numero`) AS `cuenta`,`cub_cuenta_bancaria`.`cub_nombre` AS `nombre`,if((count(`tra_transaccion`.`tra_monto`) > 0),(`cub_cuenta_bancaria`.`cub_saldo_inicial` + sum(`tra_transaccion`.`tra_monto`)),`cub_cuenta_bancaria`.`cub_saldo_inicial`) AS `saldo`,`cub_cuenta_bancaria`.`cub_saldo_minimo` AS `saldo_minimo` from ((`cub_cuenta_bancaria` left join `tra_transaccion` on(((`tra_transaccion`.`tra_id_cub` = `cub_cuenta_bancaria`.`cub_id`) and (`tra_transaccion`.`tra_aplicar` = 1)))) left join `ban_banco` on((`cub_cuenta_bancaria`.`cub_id_ban` = `ban_banco`.`ban_id`))) group by `cub_cuenta_bancaria`.`cub_id` order by `cub_cuenta_bancaria`.`cub_id`;

-- ----------------------------
-- View structure for vw_activos
-- ----------------------------
DROP VIEW IF EXISTS `vw_activos`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY INVOKER VIEW `vw_activos` AS select `act_activo_fijo`.`act_id` AS `act_id`,`tac_tipo_activofijo`.`tac_id` AS `tac_id`,`axe_activoxempleado`.`axe_id_emp` AS `emp_id`,`tac_tipo_activofijo`.`tac_nombre` AS `tipo`,`grp_grupo`.`grp_nombre` AS `grupo`,`tad_tipo_adquisicion`.`tad_nombre` AS `adquisicion`,`act_activo_fijo`.`act_codigo` AS `codigo`,`act_activo_fijo`.`act_nombre` AS `nombre`,`act_activo_fijo`.`act_estado` AS `estado`,avg((`act_activo_fijo`.`act_valor_compra` - ifnull(`act_activo_fijo`.`act_valor_dep`,0))) AS `monto`,sum(`dep_depreciacion`.`dep_monto`) AS `valor`,((`emp_empleado`.`emp_nombre` + ' ') + `emp_empleado`.`emp_apellido`) AS `empleado`,`ubi_ubicacion`.`ubi_nombre` AS `oficina` from (((((((`act_activo_fijo` join `tac_tipo_activofijo` on((`act_activo_fijo`.`act_id_tac` = `tac_tipo_activofijo`.`tac_id`))) left join `tad_tipo_adquisicion` on((`act_activo_fijo`.`act_id_tad` = `tad_tipo_adquisicion`.`tad_id`))) left join `grp_grupo` on((`act_activo_fijo`.`act_id_grp` = `grp_grupo`.`grp_id`))) left join `axe_activoxempleado` on(((`axe_activoxempleado`.`axe_id_act` = `act_activo_fijo`.`act_id`) and (`axe_activoxempleado`.`axe_estado` = 1)))) left join `dep_depreciacion` on((`dep_depreciacion`.`dep_id_act` = `act_activo_fijo`.`act_id`))) left join `emp_empleado` on((`axe_activoxempleado`.`axe_id_emp` = `emp_empleado`.`emp_id`))) left join `ubi_ubicacion` on((`ubi_ubicacion`.`ubi_id` = `emp_empleado`.`emp_id_ubi`))) group by `act_activo_fijo`.`act_id`,`tac_tipo_activofijo`.`tac_id`,`axe_activoxempleado`.`axe_id_emp`,`tac_tipo_activofijo`.`tac_nombre`,`grp_grupo`.`grp_nombre`,`tad_tipo_adquisicion`.`tad_nombre`,`act_activo_fijo`.`act_codigo`,`act_activo_fijo`.`act_nombre`,`act_activo_fijo`.`act_estado`,((`emp_empleado`.`emp_nombre` + ' ') + `emp_empleado`.`emp_apellido`),`ubi_ubicacion`.`ubi_nombre`;

-- ----------------------------
-- View structure for vw_chequeras
-- ----------------------------
DROP VIEW IF EXISTS `vw_chequeras`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY INVOKER VIEW `vw_chequeras` AS select `chq_chequera`.`chq_id` AS `chq_id`,`chq_chequera`.`chq_numero` AS `chq_numero`,`vw_cuentas_bancarias`.`cuenta` AS `cuenta`,(`chq_chequera`.`chq_cantidad` - (select count(0) from `che_cheque` where (`che_cheque`.`che_id_chq` = `chq_chequera`.`chq_id`))) AS `disponibles` from (`chq_chequera` join `vw_cuentas_bancarias` on((`chq_chequera`.`chq_id_cub` = `vw_cuentas_bancarias`.`cub_id`))) order by `vw_cuentas_bancarias`.`cuenta`;

-- ----------------------------
-- View structure for vw_empleados
-- ----------------------------
DROP VIEW IF EXISTS `vw_empleados`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY INVOKER VIEW `vw_empleados` AS select `emp_empleado`.`emp_id` AS `emp_id`,`are_area`.`are_id` AS `are_id`,`ubi_ubicacion`.`ubi_id` AS `ubi_id`,`users`.`id` AS `usu_id`,`emp_empleado`.`emp_codigo` AS `codigo`,concat(`emp_empleado`.`emp_nombre`,' ',`emp_empleado`.`emp_apellido`) AS `nombre`,`are_area`.`are_nombre` AS `area`,`plz_plaza`.`plz_nombre` AS `cargo`,`users`.`username` AS `usuario`,`ubi_ubicacion`.`ubi_nombre` AS `oficina`,if((`emp_empleado`.`emp_estado` = 1),'Activo','Inactivo') AS `estado` from ((((`emp_empleado` left join `are_area` on((`emp_empleado`.`emp_id_are` = `are_area`.`are_id`))) left join `users` on((`emp_empleado`.`emp_id_usu` = `users`.`id`))) left join `plz_plaza` on((`emp_empleado`.`emp_id_plz` = `plz_plaza`.`plz_id`))) left join `ubi_ubicacion` on((`emp_empleado`.`emp_id_ubi` = `ubi_ubicacion`.`ubi_id`)));

-- ----------------------------
-- View structure for vw_oficina
-- ----------------------------
DROP VIEW IF EXISTS `vw_oficina`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY INVOKER VIEW `vw_oficina` AS select `oficina`.`ubi_id` AS `ubi_id`,`regional`.`ubi_id` AS `regional_id`,`regional`.`ubi_nombre` AS `regional`,`nivel`.`ubi_nombre` AS `nivel`,`oficina`.`ubi_nombre` AS `oficina` from ((`ubi_ubicacion` `regional` left join `ubi_ubicacion` `nivel` on((`regional`.`ubi_id` = `nivel`.`ubi_id`))) left join `ubi_ubicacion` `oficina` on((`nivel`.`ubi_id` = `oficina`.`ubi_id`)));

-- ----------------------------
-- View structure for vw_opc
-- ----------------------------
DROP VIEW IF EXISTS `vw_opc`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY INVOKER VIEW `vw_opc` AS select `opc_opcion`.`opc_id` AS `opc_id`,if((`opc_opcion`.`opc_nivel` = 0),concat('',`opc_opcion`.`opc_nombre`),if((`opc_opcion`.`opc_nivel` = 1),concat(' - ',`opc_opcion`.`opc_nombre`),concat(' -- ',`opc_opcion`.`opc_nombre`))) AS `opc_nombre` from `opc_opcion`;

-- ----------------------------
-- Procedure structure for eliminar_clientex
-- ----------------------------
DROP PROCEDURE IF EXISTS `eliminar_clientex`;
delimiter ;;
CREATE PROCEDURE `eliminar_clientex`(`id` int)
  SQL SECURITY INVOKER
BEGIN

 DECLARE EXIT HANDLER FOR SQLEXCEPTION
 BEGIN
 SHOW ERRORS LIMIT 1;
RESIGNAL;
 ROLLBACK;
 END; 
 DECLARE EXIT HANDLER FOR SQLWARNING
 BEGIN
 SHOW WARNINGS LIMIT 1;
RESIGNAL;
 ROLLBACK;
 END;
START TRANSACTION;
	DELETE FROM tpn_tipo_precio_cliente     WHERE  tpn_id_cli   = id;
	DELETE FROM  drn_directorio_contacto    WHERE  drn_id_cli   = id;
 	DELETE FROM  txc_telefonoxcliente       WHERE  txc_id_cli   = id;
 	DELETE FROM  cxm_clientexmediocontacto  WHERE  cxm_id_cli   = id;
 	DELETE FROM  ixc_impuestoxcliente       WHERE  ixc_id_cli   = id;
 	DELETE FROM  rxc_retencionxcliente      WHERE  rxc_id_cli   = id;
 	DELETE FROM  con_contacto               WHERE  con_id_cli   = id;
 	DELETE FROM  rfc_referencia_cliente     WHERE  rfc_id_cli   = id;
 	DELETE FROM  dcc_documento_cliente      WHERE  dcc_id_cli   = id;
    DELETE FROM  cxn_cuentaxcliente         WHERE  cxn_id_cli   = id;    
    DELETE FROM  cli_cliente  				WHERE  cli_id       = id;    

commit;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for eliminar_promocion
-- ----------------------------
DROP PROCEDURE IF EXISTS `eliminar_promocion`;
delimiter ;;
CREATE PROCEDURE `eliminar_promocion`(`id` int)
  SQL SECURITY INVOKER
BEGIN

 DECLARE EXIT HANDLER FOR SQLEXCEPTION
 BEGIN
 SHOW ERRORS LIMIT 1;
RESIGNAL;
 ROLLBACK;
 END; 
 DECLARE EXIT HANDLER FOR SQLWARNING
 BEGIN
 SHOW WARNINGS LIMIT 1;
RESIGNAL;
 ROLLBACK;
 END;
START TRANSACTION;
	DELETE FROM  pma_promocion_articulo    	  	WHERE  pma_id_pmp   = id;
	DELETE FROM  pmt_promocion_tipo_articulo    WHERE  pmt_id_pmp   = id;
 	DELETE FROM  pmp_promocion_producto  				WHERE  pmp_id       = id;    

commit;
END
;;
delimiter ;

-- ----------------------------
-- Function structure for get_parametro
-- ----------------------------
DROP FUNCTION IF EXISTS `get_parametro`;
delimiter ;;
CREATE FUNCTION `get_parametro`(`v_codigo` varchar(300))
 RETURNS text CHARSET utf8
  SQL SECURITY INVOKER
BEGIN
  DECLARE v_param TEXT DEFAULT '';
  
  SELECT par_valor INTO v_param
  FROM   par_parametro
	WHERE  par_codigo = v_codigo
	LIMIT  1;
  
	RETURN v_param;
END
;;
delimiter ;

-- ----------------------------
-- Function structure for pro_get_orden_actual
-- ----------------------------
DROP FUNCTION IF EXISTS `pro_get_orden_actual`;
delimiter ;;
CREATE FUNCTION `pro_get_orden_actual`(`tarea` int,`registro` int)
 RETURNS int(11)
  SQL SECURITY INVOKER
BEGIN

	#Routine body goes here...

	#Retorna el orden actual del registro en

	DECLARE pas_orden int;



	SET pas_orden = (Select

		pas_paso.pas_orden

	From try_trayecto

		Inner Join	pas_paso On try_trayecto.try_id_pas = pas_paso.pas_id

		Inner Join	tar_tarea On pas_paso.pas_id_tar = tar_tarea.tar_id

	Where

		try_trayecto.try_registro_id = registro And

		tar_tarea.tar_id = tarea

	Order By

		try_trayecto.try_id Desc

	Limit 1);



	RETURN pas_orden;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for prueba_procedimiento
-- ----------------------------
DROP PROCEDURE IF EXISTS `prueba_procedimiento`;
delimiter ;;
CREATE PROCEDURE `prueba_procedimiento`(IN codCli INT, IN fechaDesde VARCHAR(10), IN fechaHasta VARCHAR(10), IN estado INT)
  SQL SECURITY INVOKER
BEGIN
DECLARE nit VARCHAR(50);
SET nit := get_parametro('ID_TIPO_DOCUMENTO_NIT');
		#SIN FILTROS
    IF(codCli = NULL OR codCli = ' ' AND fechaDesde = ' ' AND fechaHasta = ' ' AND estado = 5 ) THEN

			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																													WHEN   nit = dcc_id_tde THEN dcc_valor
																																											END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
							Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,
-- sum(cdd_duracion_min) minutos_consumidos, 
							if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
												AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
							SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
							(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cli_id = codigo_cliente AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
							fac_subtotal as total_neto, 
							-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
							fac_total as totalMasIva,
																																																	CASE  
																																																		WHEN   fac_estado = 0 THEN 'Anulada'
																																																		WHEN   fac_estado = 1 THEN 'Pendiente'
																																																		WHEN   fac_estado = 2 THEN 'Pagada'
																																																	 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- LEFT JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif
			GROUP BY cdd_numero_origen, fac_id
    
		 ;
		#SOLO FECHAS
    ELSEIF(codCli = ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND estado != 5 ) THEN

       
		SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																												WHEN  nit = dcc_id_tde THEN dcc_valor
																																										END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
						Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,
						fac_subtotal as total_neto, 
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codigo_cliente AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
						-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
						fac_total as totalMasIva,
																																																CASE  
																																																	WHEN   fac_estado = 0 THEN 'Anulada'
																																																	WHEN   fac_estado = 1 THEN 'Pendiente'
																																																	WHEN   fac_estado = 2 THEN 'Pagada'
																																																 END estado, tif_nombre tipo_factura
		FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
															 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
															 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
															 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
															 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
															 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
															 INNER JOIN src_servicio					 ON src_id = sxc_id_src
															 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
															 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

		WHERE  DATE(fxs_fecha_inicio) >= fechaDesde
				AND DATE(fxs_fecha_inicio) <= fechaHasta
				AND fac_estado=estado
		GROUP BY cdd_numero_origen, fac_id
      
		 ; 
		 #TODOS LOS FILTROS
     ELSEIF(codCli != ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND estado != 5) THEN
        
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																												WHEN  nit = dcc_id_tde THEN dcc_valor
																																										END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
						Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,
						fac_subtotal as total_neto, 
						-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
						fac_total as totalMasIva,
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codCli AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
																																																CASE  
																																																	WHEN   fac_estado = 0 THEN 'Anulada'
																																																	WHEN   fac_estado = 1 THEN 'Pendiente'
																																																	WHEN   fac_estado = 2 THEN 'Pagada'
																																																 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

			WHERE  DATE(fxs_fecha_inicio)  >= fechaDesde
					AND DATE(fxs_fecha_inicio) <= fechaHasta
          AND cli_id = codCli
					AND fac_estado=estado
			GROUP BY cdd_numero_origen, fac_id
		 ; 


ELSEIF(codCli != ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND estado = 5) THEN
        
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																												WHEN  nit = dcc_id_tde THEN dcc_valor
																																										END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
						Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo, 
						fac_subtotal as total_neto, 
						-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
						fac_total as totalMasIva,
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codCli AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
																																																CASE  
																																																	WHEN   fac_estado = 0 THEN 'Anulada'
																																																	WHEN   fac_estado = 1 THEN 'Pendiente'
																																																	WHEN   fac_estado = 2 THEN 'Pagada'
																																																 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

			WHERE  DATE(fxs_fecha_inicio)  >= fechaDesde
					AND DATE(fxs_fecha_inicio) <= fechaHasta
          AND cli_id = codCli
			GROUP BY cdd_numero_origen, fac_id
		 ; 
     
    ELSE
    #SOLO CLIENTE
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre, 
								CASE  
								WHEN   nit = dcc_id_tde THEN dcc_valor
								END NIT, cli_registro registro, fac_numero factura, 
							Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
							Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,  
							fac_subtotal as total_neto, 
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codCli AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
							-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
							fac_total as totalMasIva,
																																																	CASE  
																																																		WHEN   fac_estado = 0 THEN 'Anulada'
																																																		WHEN   fac_estado = 1 THEN 'Pendiente'
																																																		WHEN   fac_estado = 2 THEN 'Pagada'
																																																	 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

			WHERE cli_id = codCli
			GROUP BY cdd_numero_origen, fac_id
		 ;
    

    END IF;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_cargos_fac
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_cargos_fac`;
delimiter ;;
CREATE PROCEDURE `sp_cargos_fac`(factura int, tipo_costo int, fechaDesde varchar(10), fechaHasta varchar(10))
  SQL SECURITY INVOKER
BEGIN
		
		DECLARE tipo_cargo INT;
		IF (tipo_costo = 1 AND fechaDesde != '' AND fechaHasta != '') THEN 
	
			SET tipo_cargo := get_parametro('SYS_CARGO_FIJO');
		
			SELECT fac.fac_id as 'fac_id',fac.fac_numero as 'numero_fac',src.src_nombre as 'servicio', 
			SUM(caf.caf_subtotal) as 'subtotal',
			SUM(caf.caf_valor) as 'valor',

			SUM(caf.caf_impuesto) as 'caf_imp',
			-- caf.caf_subtotal as 'subtotal',
			tcs.tcs_nombre as 'tipo_cargo',
			DATE_FORMAT(fxs.fxs_fecha_inicio,'%d/%m/%Y') as 'fecha_inicio',
			DATE_FORMAT(fxs.fxs_fecha_fin,'%d/%m/%Y') as 'fecha_fin',
			caf.caf_id_tcs,caf.caf_id,
		  DATE_FORMAT(caf.caf_fecha,'%d/%m/%Y') as 'caf_fecha'

 
			-- sxc.sxc_numero as 'numero',sxc.sxc_id
	
		  FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
			ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
			ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
			ON src.src_id = sxc.sxc_id_src INNER JOIN caf_cargo_facturacion AS caf
			ON caf.caf_id_sxc = sxc.sxc_id INNER JOIN tcs_tipo_cargo_servicio AS tcs
			ON tcs.tcs_id = caf_id_tcs		 

			WHERE caf.caf_id_tcs = tipo_cargo AND fac.fac_id = factura 
			 AND date_format(caf.caf_fecha,"%Y-%m-%d") >= fechaDesde
			 AND date_format(caf.caf_fecha,"%Y-%m-%d") <= fechaHasta
			GROUP BY sxc.sxc_id
			;
		ELSEIF (tipo_costo = 2 AND fechaDesde != '' AND fechaHasta != '') THEN

			SET tipo_cargo := get_parametro('SYS_CARGO_CONSUMO');	
			SELECT fac.fac_id as 'fac_id',fac.fac_numero as 'numero_fac',src.src_nombre as 'servicio', 
			-- SUM(caf.caf_subtotal) as 'subtotal',
			caf.caf_subtotal as 'subtotal',
			SUM(caf.caf_valor) as 'valor',
			SUM(caf.caf_impuesto) as 'caf_imp',
			tcs.tcs_nombre as 'tipo_cargo',
			
			DATE_FORMAT(fxs.fxs_fecha_inicio,'%d/%m/%Y') as 'fecha_inicio',
			DATE_FORMAT(fxs.fxs_fecha_fin,'%d/%m/%Y') as 'fecha_fin',
			caf.caf_id_tcs,caf.caf_id,
			DATE_FORMAT(caf.caf_fecha,'%d/%m/%Y') as 'caf_fecha'
			-- ,sxc.sxc_id
	
			FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
			ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
			ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
			ON src.src_id = sxc.sxc_id_src INNER JOIN caf_cargo_facturacion AS caf
			ON caf.caf_id_sxc = sxc.sxc_id INNER JOIN tcs_tipo_cargo_servicio AS tcs
			ON tcs.tcs_id = caf_id_tcs 
			WHERE caf.caf_id_tcs > tipo_cargo AND fac.fac_id = factura
			AND date_format(caf.caf_fecha,"%Y-%m-%d") >= fechaDesde
			AND date_format(caf.caf_fecha,"%Y-%m-%d") <= fechaHasta
		  -- AND datediff(fac_fecha_fact, caf.caf_fecha) BETWEEN 0 AND 30 -- Cobrar solo una vez los cargos adicionales
			GROUP BY caf.caf_id_tcs
			;
		END IF;

	/*SELECT fac.fac_id as 'fac_id',fac.fac_numero as 'numero_fac',src.src_nombre as 'servicio', caf.caf_subtotal as 'subtotal',
	DATE_FORMAT(fxs.fxs_fecha_inicio,'%d/%m/%Y') as 'fecha_inicio',
	DATE_FORMAT(fxs.fxs_fecha_fin,'%d/%m/%Y') as 'fecha_fin',
	caf.caf_id_tcs,sxc.sxc_numero as 'numero',sxc.sxc_id
	
		FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
			ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
			ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
			ON src.src_id = sxc.sxc_id_src INNER JOIN caf_cargo_facturacion AS caf
			ON caf.caf_id_sxc = sxc.sxc_id WHERE caf.caf_id_tcs = cargo_fijo AND fac.fac_id = factura;*/
			
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_depreciacion_mensual
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_depreciacion_mensual`;
delimiter ;;
CREATE PROCEDURE `sp_depreciacion_mensual`(`periodo` int,`usuario` int)
  SQL SECURITY INVOKER
BEGIN
	-- Inicializacion de variables 
	DECLARE id_activo INT; -- ID del activo fijo
	DECLARE fecha_adquisicion DATE; -- Fecha de adquisicion del activo
	DECLARE costo DECIMAL(19,2); -- valor contable (de la compra act_valor_compra) del activo
	DECLARE nuevo_valor_contable DECIMAL(19,2); -- Nuevo valor contable
	DECLARE vida_util INT; -- tiempo de vida util del activo
	DECLARE numero_meses INT; -- Numero de meses de vida Util
	DECLARE depreciacion_mensual DECIMAL(19,4); -- Monto Mensual Depreciacion
	DECLARE depreciacion_acumulada DECIMAL(19,4); -- Monto total de depreciacion
	DECLARE es_depreciable TINYINT; -- boolean
	DECLARE fecha_cargo DATE DEFAULT CURRENT_DATE(); -- fecha de cargo
	DECLARE row_not_found TINYINT DEFAULT FALSE; -- handler
	DECLARE depreciacion_validar DECIMAL(19,2); -- Validador para poder depreciar
	DECLARE periodo_dep DATE; -- periodo a depreciar
	
	#SET periodo_dep = get_periodo_dep(periodo) ;


	-- listado de activos fijos disponibles
	DECLARE listado_activos_cursor CURSOR FOR
	SELECT act_id, 
	act_fecha_adq AS fecha_adquisicion,
	IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) AS costo, 
	( 
act_valor_cont - ((act_valor_compra - IFNULL(act_valor_residual,0))/(act_vida_util * 12)) )  nuevo_valor_contable, #el nuevo valor contable
	tac_vida_util AS vida_util,
	#(tac_vida_util * 12) AS numero_meses_bk,
	(act_vida_util * 12) AS numero_meses
	FROM act_activo_fijo
	INNER JOIN tac_tipo_activofijo ON tac_id = act_id_tac
	WHERE act_estado = 1 AND act_depreciable=1; -- 1 = activo

	-- handler para manejar la excepcion de fila no encontrada
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET row_not_found = TRUE;



	-- Eliminar la depreciacion del periodo a ejecutar
	DELETE FROM dep_depreciacion WHERE dep_id_prd=periodo;

	-- abrir el cursor antes de usarlo
	OPEN listado_activos_cursor;

	-- recorrer cursor
	WHILE row_not_found = FALSE DO
	  -- validador de activos depreciables
/*	  SELECT CAST(par_valor AS DECIMAL(19,2)) INTO depreciacion_validar
	  FROM par_parametro
	  WHERE par_codigo = 'ACT_DEP_MONTO';
*/
		-- resetear estado de es_depreciable
		SET es_depreciable = FALSE;
		-- cargar datos de la fila actual
		FETCH listado_activos_cursor 
		INTO id_activo, fecha_adquisicion, costo, nuevo_valor_contable, vida_util, numero_meses;
		-- Calcular depreciacion acumulada para el activo 
		SELECT
		CASE 
			WHEN SUM(dep_monto) IS NULL THEN 0 
			WHEN SUM(dep_monto) IS NOT NULL THEN ROUND( SUM(dep_monto),2 )
		END INTO depreciacion_acumulada 
		FROM dep_depreciacion
		WHERE dep_id_act = id_activo;

		-- verificar si el activo es apto para depreciacion
		IF( /*costo >= depreciacion_validar && */ depreciacion_acumulada < costo ) THEN
			SET es_depreciable = TRUE;
		END IF; 
				
		-- verificar que la fila exista
		IF( row_not_found = FALSE AND es_depreciable = TRUE ) THEN
			-- calcular depreciacion mensual lineal
			SET depreciacion_mensual = costo / numero_meses;
			-- insertar depreciacion mensual por activo fijo
			INSERT INTO dep_depreciacion (dep_id_act, dep_monto, dep_fecha,dep_id_prd,dep_estado,dep_usu_mod,dep_fecha_mod)
			VALUES (id_activo, depreciacion_mensual, fecha_cargo,periodo,1,usuario,SYSDATE());
			
			UPDATE act_activo_fijo SET act_valor_cont = nuevo_valor_contable, act_usu_modificacion = usuario, act_fecha_modificacion=SYSDATE();

		END IF;
		
	END WHILE;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_ejecutar_depreciacion_mensual
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_ejecutar_depreciacion_mensual`;
delimiter ;;
CREATE PROCEDURE `sp_ejecutar_depreciacion_mensual`(`periodo_dep` int,`usuario` int, `fecha_depreciar` date)
  SQL SECURITY INVOKER
BEGIN
-- ELIMINAR LA DEPRECIACIÓN YA EJECUTADA PARA DICHO PERIODO (PARA EVITAR DUPLICIDAD)

DELETE FROM  dep_depreciacion WHERE dep_id_prd = periodo_dep
AND dep_id_act IN (
SELECT act_id FROM (	
SELECT act_id, 
( SELECT ROUND(IFNULL(SUM(dep_monto),0), 6) FROM dep_depreciacion WHERE dep_id_act = act_id ) depreciacion_acumulada,
IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) AS costo
	FROM act_activo_fijo
	WHERE act_estado = 1 AND act_depreciable=1 AND act_vida_util IS NOT NULL
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m-%d') <= DATE_FORMAT(fecha_depreciar ,'%Y-%m-%d') OR act_fecha_inicia_dep IS NULL)
# VALIDAR QUE NO SE BORRE SI YA SE DEPRECIO LOS MESE DE LA VIDA UTILR
# para que lo haga prorrateado quitar la condicional
AND ( (SELECT COUNT(DISTINCT dep_id_prd) from dep_depreciacion where dep_id_act = act_id) < ((act_vida_util*12) + ( IF(DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01',1,0) )  ) ) 
GROUP BY act_id
HAVING depreciacion_acumulada < costo
) f 
) ;

-- INSERTAR EN LA TABLA DE DEPRECIACIÓN LA DEPRECIACIÓN MENSUAL PARA CADA ACTIVO.
INSERT INTO dep_depreciacion (dep_id_act, dep_id_prd, dep_monto, dep_fecha, dep_estado, dep_usu_mod, dep_fecha_mod) 
SELECT act_id, periodo, depreciacion_mensual, fecha, estado, usuario, fmod from (	
SELECT act_id, periodo_dep periodo, 
ROUND((
	CASE 
	WHEN ( (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m') = DATE_FORMAT(fecha_depreciar,'%Y-%m') )
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01' )
 ) THEN 
	( ROUND((ROUND((IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) / (act_vida_util * 12)), 6)) 
	/ 30 /*DATE_FORMAT(LAST_DAY(act_fecha_inicia_dep),'%d')*/ ,2) ) * (DATEDIFF(LAST_DAY(fecha_depreciar), act_fecha_inicia_dep))
WHEN (DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01' AND (( ((act_vida_util*12) + ( IF(DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01',1,0) )  ) -(SELECT COUNT(DISTINCT dep_id_prd) from dep_depreciacion where dep_id_act = act_id)) ) = 1)
THEN
		ROUND(((act_valor_compra - (SELECT SUM(dep_monto) FROM dep_depreciacion WHERE dep_id_act=act_id )) - act_valor_residual ), 6)	
ELSE 
	ROUND((IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) / (act_vida_util * 12)), 6)
	END
),2)  AS depreciacion_mensual, 
CURRENT_DATE() fecha,
1 estado ,1 usuario_mod,
CURRENT_TIMESTAMP() fmod,
( SELECT ROUND(IFNULL(SUM(dep_monto),0), 6) FROM dep_depreciacion WHERE dep_id_act = act_id ) depreciacion_acumulada,
IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) AS costo
	FROM act_activo_fijo
	WHERE act_estado = 1 AND act_depreciable=1 AND act_vida_util IS NOT NULL
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar ,'%Y-%m-%d')) OR act_fecha_inicia_dep IS NULL)
# VALIDAR QUE NO SE BORRE SI YA SE DEPRECIO LOS MESE DE LA VIDA UTILR
# para que lo haga prorrateado quitar la condicional
AND ( (SELECT COUNT(DISTINCT dep_id_prd) from dep_depreciacion where dep_id_act = act_id) < ((act_vida_util*12) + ( IF(DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01',1,0) ) ) ) 
AND periodo_dep NOT IN (SELECT dep_id_prd from dep_depreciacion where dep_id_act = act_id)
GROUP BY act_id
HAVING depreciacion_acumulada < costo
) f ;

-- ACTUALIZAR EL VALOR CONTABLE.
UPDATE act_activo_fijo
SET act_valor_cont = (act_valor_compra - (SELECT ROUND(IFNULL(SUM(dep_monto),0), 4) FROM dep_depreciacion WHERE dep_id_act = act_id))
,act_usu_modificacion = usuario, act_fecha_modificacion = CURRENT_TIMESTAMP()
WHERE act_estado = 1 AND act_depreciable=1 AND act_vida_util IS NOT NULL
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar ,'%Y-%m-%d')) OR act_fecha_inicia_dep IS NULL);

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_ejecutar_depreciacion_mensual_act
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_ejecutar_depreciacion_mensual_act`;
delimiter ;;
CREATE PROCEDURE `sp_ejecutar_depreciacion_mensual_act`(`periodo_dep` int,`usuario` int, `fecha_depreciar` date, `act_especifico` int)
  SQL SECURITY INVOKER
BEGIN
-- ELIMINAR LA DEPRECIACIÓN YA EJECUTADA PARA DICHO PERIODO (PARA EVITAR DUPLICIDAD)
DELETE FROM  dep_depreciacion WHERE dep_id_prd = periodo_dep AND dep_id_act = act_especifico
AND dep_id_act IN (
SELECT act_id FROM (	
SELECT act_id, 
( SELECT ROUND(IFNULL(SUM(dep_monto),0), 6) FROM dep_depreciacion WHERE dep_id_act = act_id ) depreciacion_acumulada,
IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) AS costo
	FROM act_activo_fijo
	WHERE act_estado = 1 AND act_depreciable=1 AND act_vida_util IS NOT NULL
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m-%d') <= DATE_FORMAT(fecha_depreciar ,'%Y-%m-%d') OR act_fecha_inicia_dep IS NULL)
# VALIDAR QUE NO SE BORRE SI YA SE DEPRECIO LOS MESE DE LA VIDA UTILR
# para que lo haga prorrateado quitar la condicional
AND ( (SELECT COUNT(DISTINCT dep_id_prd) from dep_depreciacion where dep_id_act = act_id) < ((act_vida_util*12) + ( IF(DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01',1,0) )  ) ) 
AND periodo_dep NOT IN (SELECT dep_id_prd from dep_depreciacion where dep_id_act = act_id)
GROUP BY act_id
HAVING depreciacion_acumulada < costo
) f 
) ;

-- INSERTAR EN LA TABLA DE DEPRECIACIÓN LA DEPRECIACIÓN MENSUAL PARA CADA ACTIVO.
INSERT INTO dep_depreciacion (dep_id_act, dep_id_prd, dep_monto, dep_fecha, dep_estado, dep_usu_mod, dep_fecha_mod) 
SELECT act_id, periodo, depreciacion_mensual, fecha, estado, usuario, fmod from (	
SELECT act_id, periodo_dep periodo, 
ROUND((
	CASE 
	WHEN ( (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m') = DATE_FORMAT(fecha_depreciar,'%Y-%m') )
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01' )
 ) THEN 
	( ROUND((ROUND((IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) / (act_vida_util * 12)), 6)) 
	/ 30 /*DATE_FORMAT(LAST_DAY(act_fecha_inicia_dep),'%d')*/ ,2) ) * (DATEDIFF(LAST_DAY(fecha_depreciar), act_fecha_inicia_dep))
WHEN (DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01' AND (( ((act_vida_util*12) + ( IF(DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01',1,0) )  ) -(SELECT COUNT(DISTINCT dep_id_prd) from dep_depreciacion where dep_id_act = act_id)) ) = 1)
THEN
		ROUND(((act_valor_compra - (SELECT SUM(dep_monto) FROM dep_depreciacion WHERE dep_id_act=act_id )) - act_valor_residual ), 6)	
ELSE 
	ROUND((IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) / (act_vida_util * 12)), 6)
	END
),2)  AS depreciacion_mensual, 
CURRENT_DATE() fecha,
1 estado ,1 usuario_mod,
CURRENT_TIMESTAMP() fmod,
( SELECT ROUND(IFNULL(SUM(dep_monto),0), 6) FROM dep_depreciacion WHERE dep_id_act = act_id ) depreciacion_acumulada,
IFNULL((act_valor_compra - IFNULL(act_valor_residual,0)),0) AS costo
	FROM act_activo_fijo
	WHERE act_estado = 1 AND act_id = act_especifico  AND act_depreciable=1 AND act_vida_util IS NOT NULL
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar ,'%Y-%m-%d')) OR act_fecha_inicia_dep IS NULL)
# VALIDAR QUE NO SE BORRE SI YA SE DEPRECIO LOS MESE DE LA VIDA UTILR
# para que lo haga prorrateado quitar la condicional
AND ( (SELECT COUNT(DISTINCT dep_id_prd) from dep_depreciacion where dep_id_act = act_id) < ((act_vida_util*12) + ( IF(DATE_FORMAT(act_fecha_inicia_dep,'%d') != '01',1,0) ) ) ) 
AND periodo_dep NOT IN (SELECT dep_id_prd from dep_depreciacion where dep_id_act = act_id)
GROUP BY act_id
HAVING depreciacion_acumulada < costo
) f ;

-- ACTUALIZAR EL VALOR CONTABLE.
UPDATE act_activo_fijo
SET act_valor_cont = (act_valor_compra - (SELECT ROUND(IFNULL(SUM(dep_monto),0), 6) FROM dep_depreciacion WHERE dep_id_act = act_id))
,act_usu_modificacion = usuario, act_fecha_modificacion = CURRENT_TIMESTAMP()
WHERE act_estado = 1  AND act_id = act_especifico AND act_depreciable=1 AND act_vida_util IS NOT NULL
	AND (DATE_FORMAT(act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar ,'%Y-%m-%d')) OR act_fecha_inicia_dep IS NULL);

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_ejecutar_depreciacion_mensual_diaria
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_ejecutar_depreciacion_mensual_diaria`;
delimiter ;;
CREATE PROCEDURE `sp_ejecutar_depreciacion_mensual_diaria`(IN `periodo_dep` INT,
  IN `usuario` INT,
  IN `fecha_depreciar` DATE)
  SQL SECURITY INVOKER
BEGIN
  DECLARE v_ini_mes DATE;
  SET v_ini_mes = DATE_FORMAT(fecha_depreciar,'%Y-%m-01');

  /* Vuelve a calcular cuota diaria si está NULL */
  UPDATE act_activo_fijo a
     SET a.act_depreciacion_diaria = ROUND(
           ( (a.act_valor_compra - COALESCE(a.act_valor_residual,0)) /
             NULLIF(
               DATEDIFF(
                 DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                 COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
               ), 0)
           ), 8)
   WHERE a.act_depreciacion_diaria IS NULL
     AND a.act_estado = 1
     AND a.act_depreciable = 1
     AND a.act_vida_util IS NOT NULL AND a.act_vida_util > 0
     AND (a.act_fecha_inicia_dep IS NULL OR a.act_fecha_inicia_dep <= LAST_DAY(fecha_depreciar));

  /* Calcula el periodo (borra lo existente del período para activos que aun son depreciables) */
  DELETE FROM dep_depreciacion
   WHERE dep_id_prd = periodo_dep
     AND dep_id_act IN (
       SELECT act_id FROM (
         SELECT a.act_id,
                (SELECT ROUND(IFNULL(SUM(d.dep_monto),0),6) FROM dep_depreciacion d WHERE d.dep_id_act = a.act_id) AS dep_acum,
                IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0) AS costo
           FROM act_activo_fijo a
          WHERE a.act_estado = 1
            AND a.act_depreciable = 1
            AND a.act_vida_util IS NOT NULL
            AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= DATE_FORMAT(fecha_depreciar,'%Y-%m-%d')
                 OR a.act_fecha_inicia_dep IS NULL)
            AND (
                 (SELECT COUNT(DISTINCT d2.dep_id_prd) FROM dep_depreciacion d2 WHERE d2.dep_id_act = a.act_id)
                 < ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
                )
         GROUP BY a.act_id
         HAVING dep_acum < costo
       ) f
     );

  /* Inserta depreciación */
  INSERT INTO dep_depreciacion (dep_id_act, dep_id_prd, dep_monto, dep_fecha, dep_estado, dep_usu_mod, dep_fecha_mod)
  SELECT
      a.act_id,
      periodo_dep,
      /* Monto del mes (diaria * días; primer mes prorrateado; última cuota ajustada) */
      ROUND((
        CASE
          WHEN (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m') = DATE_FORMAT(fecha_depreciar,'%Y-%m')
                AND DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01')
          THEN ROUND(
                 COALESCE(
                   a.act_depreciacion_diaria,
                   ( (IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0)) /
                     NULLIF(DATEDIFF(
                              DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                              COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
                            ),0)
                   )
                 )
                 * (DAY(LAST_DAY(fecha_depreciar)) - DAY(a.act_fecha_inicia_dep) + 1)
               ,6)

          /* Última cuota (saldo) */
          WHEN (DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01'
                AND (
                     ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
                     - (SELECT COUNT(DISTINCT d3.dep_id_prd) FROM dep_depreciacion d3 WHERE d3.dep_id_act = a.act_id)
                    ) = 1)
          THEN ROUND(
                 ( a.act_valor_compra
                   - IFNULL((SELECT SUM(d4.dep_monto) FROM dep_depreciacion d4 WHERE d4.dep_id_act = a.act_id),0)
                   - IFNULL(a.act_valor_residual,0)
                 )
               ,6)
          /* Mes normal */
          ELSE ROUND(
                 COALESCE(
                   a.act_depreciacion_diaria,
                   ( (IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0)) /
                     NULLIF(DATEDIFF(
                              DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                              COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
                            ),0)
                   )
                 )
                 * DAY(LAST_DAY(fecha_depreciar))
               ,6)
        END
      ),2) AS dep_monto,
      CURRENT_DATE() AS dep_fecha,
      1 AS dep_estado,
      usuario AS dep_usu_mod,
      CURRENT_TIMESTAMP() AS dep_fecha_mod
  FROM act_activo_fijo a
  WHERE a.act_estado = 1
    AND a.act_depreciable = 1
    AND a.act_vida_util IS NOT NULL AND a.act_vida_util > 0
    AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar,'%Y-%m-%d'))
         OR a.act_fecha_inicia_dep IS NULL)
    AND (
         (SELECT COUNT(DISTINCT d5.dep_id_prd) FROM dep_depreciacion d5 WHERE d5.dep_id_act = a.act_id)
         < ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
        )
    AND periodo_dep NOT IN (SELECT d6.dep_id_prd FROM dep_depreciacion d6 WHERE d6.dep_id_act = a.act_id)
				AND (SELECT IFNULL(SUM(d7.dep_monto),0) FROM dep_depreciacion d7 WHERE d7.dep_id_act = a.act_id)
        < (a.act_valor_compra - IFNULL(a.act_valor_residual,0));
 /* GROUP BY a.act_id
  HAVING
    (SELECT IFNULL(SUM(d7.dep_monto),0) FROM dep_depreciacion d7 WHERE d7.dep_id_act = a.act_id)
    < (a.act_valor_compra - IFNULL(a.act_valor_residual,0));*/

  /* Actualiza valor contable */
  UPDATE act_activo_fijo a
     SET a.act_valor_cont = (a.act_valor_compra - (SELECT ROUND(IFNULL(SUM(d.dep_monto),0),6) FROM dep_depreciacion d WHERE d.dep_id_act = a.act_id)),
         a.act_usu_modificacion = usuario,
         a.act_fecha_modificacion = CURRENT_TIMESTAMP()
   WHERE a.act_estado = 1
     AND a.act_depreciable = 1
     AND a.act_vida_util IS NOT NULL
     AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar,'%Y-%m-%d'))
          OR a.act_fecha_inicia_dep IS NULL);

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_ejecutar_depreciacion_mensual_diaria_act
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_ejecutar_depreciacion_mensual_diaria_act`;
delimiter ;;
CREATE PROCEDURE `sp_ejecutar_depreciacion_mensual_diaria_act`(IN periodo_dep INT,
  IN usuario INT,
  IN fecha_depreciar DATE,
  IN act_especifico INT)
BEGIN
  DECLARE v_ini_mes DATE;
  SET v_ini_mes = DATE_FORMAT(fecha_depreciar,'%Y-%m-01');

  -- Precalcula diaria si está NULL (solo el activo)
  UPDATE act_activo_fijo a
     SET a.act_depreciacion_diaria = ROUND(
           ( (a.act_valor_compra - COALESCE(a.act_valor_residual,0)) /
             NULLIF(DATEDIFF(
                     DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                     COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
                   ),0)
           ), 8)
   WHERE a.act_id = act_especifico
     AND a.act_depreciacion_diaria IS NULL
     AND a.act_estado = 1
     AND a.act_depreciable = 1
     AND a.act_vida_util IS NOT NULL AND a.act_vida_util > 0
     AND (a.act_fecha_inicia_dep IS NULL OR a.act_fecha_inicia_dep <= LAST_DAY(fecha_depreciar));

  -- Borra período del activo si aún deprecia
  DELETE FROM dep_depreciacion
   WHERE dep_id_prd = periodo_dep
     AND dep_id_act = act_especifico
     AND dep_id_act IN (
       SELECT act_id FROM (
         SELECT a.act_id,
                (SELECT ROUND(IFNULL(SUM(d.dep_monto),0),6) FROM dep_depreciacion d WHERE d.dep_id_act = a.act_id) dep_acum,
                IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0) costo
           FROM act_activo_fijo a
          WHERE a.act_id = act_especifico
            AND a.act_estado = 1
            AND a.act_depreciable = 1
            AND a.act_vida_util IS NOT NULL
            AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= DATE_FORMAT(fecha_depreciar,'%Y-%m-%d')
                 OR a.act_fecha_inicia_dep IS NULL)
            AND (
                 (SELECT COUNT(DISTINCT d2.dep_id_prd) FROM dep_depreciacion d2 WHERE d2.dep_id_act = a.act_id)
                 < ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
                )
         GROUP BY a.act_id
         HAVING dep_acum < costo
       ) f
     );

  -- Inserta depreciación del período para el activo
  INSERT INTO dep_depreciacion (dep_id_act, dep_id_prd, dep_monto, dep_fecha, dep_estado, dep_usu_mod, dep_fecha_mod)
  SELECT
      a.act_id,
      periodo_dep,
      ROUND((
        CASE
          WHEN (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m') = DATE_FORMAT(fecha_depreciar,'%Y-%m')
                AND DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01')
          THEN ROUND(
                 COALESCE(
                   a.act_depreciacion_diaria,
                   ( (IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0)) /
                     NULLIF(DATEDIFF(
                              DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                              COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
                            ),0)
                   )
                 )
                 * (DAY(LAST_DAY(fecha_depreciar)) - DAY(a.act_fecha_inicia_dep) + 1)
               ,6)

          WHEN (DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01'
                AND (
                     ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
                     - (SELECT COUNT(DISTINCT d3.dep_id_prd) FROM dep_depreciacion d3 WHERE d3.dep_id_act = a.act_id)
                    ) = 1)
          THEN ROUND(
                 ( a.act_valor_compra
                   - IFNULL((SELECT SUM(d4.dep_monto) FROM dep_depreciacion d4 WHERE d4.dep_id_act = a.act_id),0)
                   - IFNULL(a.act_valor_residual,0)
                 )
               ,6)

          ELSE ROUND(
                 COALESCE(
                   a.act_depreciacion_diaria,
                   ( (IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0)) /
                     NULLIF(DATEDIFF(
                              DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                              COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
                            ),0)
                   )
                 )
                 * DAY(LAST_DAY(fecha_depreciar))
               ,6)
        END
      ),2) AS dep_monto,
      CURRENT_DATE(),
      1,
      usuario,
      CURRENT_TIMESTAMP()
  FROM act_activo_fijo a
  WHERE a.act_id = act_especifico
    AND a.act_estado = 1
    AND a.act_depreciable = 1
    AND a.act_vida_util IS NOT NULL AND a.act_vida_util > 0
    AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar,'%Y-%m-%d'))
         OR a.act_fecha_inicia_dep IS NULL)
    AND (
         (SELECT COUNT(DISTINCT d5.dep_id_prd) FROM dep_depreciacion d5 WHERE d5.dep_id_act = a.act_id)
         < ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
        )
    AND periodo_dep NOT IN (SELECT d6.dep_id_prd FROM dep_depreciacion d6 WHERE d6.dep_id_act = a.act_id)
		AND (SELECT IFNULL(SUM(d7.dep_monto),0) FROM dep_depreciacion d7 WHERE d7.dep_id_act = a.act_id)
        < (a.act_valor_compra - IFNULL(a.act_valor_residual,0));
  /*GROUP BY a.act_id
  HAVING
    (SELECT IFNULL(SUM(d7.dep_monto),0) FROM dep_depreciacion d7 WHERE d7.dep_id_act = a.act_id)
    < (a.act_valor_compra - IFNULL(a.act_valor_residual,0));*/

  -- Actualiza valor contable del activo
  UPDATE act_activo_fijo a
     SET a.act_valor_cont = (a.act_valor_compra - (SELECT ROUND(IFNULL(SUM(d.dep_monto),0),6) FROM dep_depreciacion d WHERE d.dep_id_act = a.act_id)),
         a.act_usu_modificacion = usuario,
         a.act_fecha_modificacion = CURRENT_TIMESTAMP()
   WHERE a.act_id = act_especifico
     AND a.act_estado = 1
     AND a.act_depreciable = 1
     AND a.act_vida_util IS NOT NULL
     AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar,'%Y-%m-%d'))
          OR a.act_fecha_inicia_dep IS NULL);
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_ejecutar_depreciacion_mensual_diarria
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_ejecutar_depreciacion_mensual_diarria`;
delimiter ;;
CREATE PROCEDURE `sp_ejecutar_depreciacion_mensual_diarria`(IN `periodo_dep` INT,
  IN `usuario` INT,
  IN `fecha_depreciar` DATE)
  SQL SECURITY INVOKER
BEGIN
  DECLARE v_ini_mes DATE;
  SET v_ini_mes = DATE_FORMAT(fecha_depreciar,'%Y-%m-01');

  /* Vuelve a calcular cuota diaria si está NULL */
  UPDATE act_activo_fijo a
     SET a.act_depreciacion_diaria = ROUND(
           ( (a.act_valor_compra - COALESCE(a.act_valor_residual,0)) /
             NULLIF(
               DATEDIFF(
                 DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                 COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
               ), 0)
           ), 8)
   WHERE a.act_depreciacion_diaria IS NULL
     AND a.act_estado = 1
     AND a.act_depreciable = 1
     AND a.act_vida_util IS NOT NULL AND a.act_vida_util > 0
     AND (a.act_fecha_inicia_dep IS NULL OR a.act_fecha_inicia_dep <= LAST_DAY(fecha_depreciar));

  /* Calcula el periodo (borra lo existente del período para activos que aun son depreciables) */
  DELETE FROM dep_depreciacion
   WHERE dep_id_prd = periodo_dep
     AND dep_id_act IN (
       SELECT act_id FROM (
         SELECT a.act_id,
                (SELECT ROUND(IFNULL(SUM(d.dep_monto),0),6) FROM dep_depreciacion d WHERE d.dep_id_act = a.act_id) AS dep_acum,
                IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0) AS costo
           FROM act_activo_fijo a
          WHERE a.act_estado = 1
            AND a.act_depreciable = 1
            AND a.act_vida_util IS NOT NULL
            AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= DATE_FORMAT(fecha_depreciar,'%Y-%m-%d')
                 OR a.act_fecha_inicia_dep IS NULL)
            AND (
                 (SELECT COUNT(DISTINCT d2.dep_id_prd) FROM dep_depreciacion d2 WHERE d2.dep_id_act = a.act_id)
                 < ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
                )
         GROUP BY a.act_id
         HAVING dep_acum < costo
       ) f
     );

  /* Inserta depreciación */
  INSERT INTO dep_depreciacion (dep_id_act, dep_id_prd, dep_monto, dep_fecha, dep_estado, dep_usu_mod, dep_fecha_mod)
  SELECT
      a.act_id,
      periodo_dep,
      /* Monto del mes (diaria * días; primer mes prorrateado; última cuota ajustada) */
      ROUND((
        CASE
          WHEN (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m') = DATE_FORMAT(fecha_depreciar,'%Y-%m')
                AND DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01')
          THEN ROUND(
                 COALESCE(
                   a.act_depreciacion_diaria,
                   ( (IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0)) /
                     NULLIF(DATEDIFF(
                              DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                              COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
                            ),0)
                   )
                 )
                 * (DAY(LAST_DAY(fecha_depreciar)) - DAY(a.act_fecha_inicia_dep) + 1)
               ,6)

          /* Última cuota (saldo) */
          WHEN (DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01'
                AND (
                     ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
                     - (SELECT COUNT(DISTINCT d3.dep_id_prd) FROM dep_depreciacion d3 WHERE d3.dep_id_act = a.act_id)
                    ) = 1)
          THEN ROUND(
                 ( a.act_valor_compra
                   - IFNULL((SELECT SUM(d4.dep_monto) FROM dep_depreciacion d4 WHERE d4.dep_id_act = a.act_id),0)
                   - IFNULL(a.act_valor_residual,0)
                 )
               ,6)
          /* Mes normal */
          ELSE ROUND(
                 COALESCE(
                   a.act_depreciacion_diaria,
                   ( (IFNULL(a.act_valor_compra - IFNULL(a.act_valor_residual,0),0)) /
                     NULLIF(DATEDIFF(
                              DATE_ADD(COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes), INTERVAL ROUND(a.act_vida_util) YEAR),
                              COALESCE(DATE(a.act_fecha_inicia_dep), v_ini_mes)
                            ),0)
                   )
                 )
                 * DAY(LAST_DAY(fecha_depreciar))
               ,6)
        END
      ),2) AS dep_monto,
      CURRENT_DATE() AS dep_fecha,
      1 AS dep_estado,
      usuario AS dep_usu_mod,
      CURRENT_TIMESTAMP() AS dep_fecha_mod
  FROM act_activo_fijo a
  WHERE a.act_estado = 1
    AND a.act_depreciable = 1
    AND a.act_vida_util IS NOT NULL AND a.act_vida_util > 0
    AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar,'%Y-%m-%d'))
         OR a.act_fecha_inicia_dep IS NULL)
    AND (
         (SELECT COUNT(DISTINCT d5.dep_id_prd) FROM dep_depreciacion d5 WHERE d5.dep_id_act = a.act_id)
         < ((a.act_vida_util*12) + IF(DATE_FORMAT(a.act_fecha_inicia_dep,'%d') <> '01',1,0))
        )
    AND periodo_dep NOT IN (SELECT d6.dep_id_prd FROM dep_depreciacion d6 WHERE d6.dep_id_act = a.act_id)
  GROUP BY a.act_id
  HAVING
    (SELECT IFNULL(SUM(d7.dep_monto),0) FROM dep_depreciacion d7 WHERE d7.dep_id_act = a.act_id)
    < (a.act_valor_compra - IFNULL(a.act_valor_residual,0));

  /* Actualiza valor contable */
  UPDATE act_activo_fijo a
     SET a.act_valor_cont = (a.act_valor_compra - (SELECT ROUND(IFNULL(SUM(d.dep_monto),0),6) FROM dep_depreciacion d WHERE d.dep_id_act = a.act_id)),
         a.act_usu_modificacion = usuario,
         a.act_fecha_modificacion = CURRENT_TIMESTAMP()
   WHERE a.act_estado = 1
     AND a.act_depreciable = 1
     AND a.act_vida_util IS NOT NULL
     AND (DATE_FORMAT(a.act_fecha_inicia_dep,'%Y-%m-%d') <= LAST_DAY(DATE_FORMAT(fecha_depreciar,'%Y-%m-%d'))
          OR a.act_fecha_inicia_dep IS NULL);

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_facturas_anteriores_cli
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_facturas_anteriores_cli`;
delimiter ;;
CREATE PROCEDURE `sp_facturas_anteriores_cli`(factura INT,cliente INT)
BEGIN
	
		DECLARE pendiente INT;
		SET pendiente:= get_parametro('SYS_PEND_FACT');

		SELECT fac.fac_id as 'fac_id',fac.fac_numero as 'numero_fac',src.src_nombre as 'servicio', 
			SUM(caf.caf_subtotal) as 'subtotal',
			fac.fac_total as 'total_fac',
			caf.caf_id,
			-- caf.caf_subtotal as 'subtotal',
			tcs.tcs_nombre as 'tipo_cargo',
			DATE_FORMAT(fxs.fxs_fecha_inicio,'%d/%m/%Y') as 'fecha_inicio',
			DATE_FORMAT(fxs.fxs_fecha_fin,'%d/%m/%Y') as 'fecha_fin',
			caf.caf_id_tcs, fac.fac_estado
			-- sxc.sxc_numero as 'numero',sxc.sxc_id
	
		  FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
			ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
			ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
			ON src.src_id = sxc.sxc_id_src INNER JOIN caf_cargo_facturacion AS caf
			ON caf.caf_id_sxc = sxc.sxc_id INNER JOIN tcs_tipo_cargo_servicio AS tcs
			ON tcs.tcs_id = caf_id_tcs 
			WHERE sxc.sxc_id_cli = cliente AND fac.fac_id <> factura AND fac_estado = pendiente AND 
			fxs.fxs_fecha_inicio < (SELECT fxs.fxs_fecha_inicio FROM fxs_facturaxservicio as fxs WHERE fxs.fxs_id_fac = factura)
			GROUP BY sxc.sxc_id
			; 
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_factura_min_consumidos
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_factura_min_consumidos`;
delimiter ;;
CREATE PROCEDURE `sp_factura_min_consumidos`(factura INT, agrupar INT)
  SQL SECURITY INVOKER
BEGIN 
			IF(agrupar = 1) THEN
			SELECT
				-- txs.txs_numero,
				cdd.cdd_numero_origen 'num_origen',
				cdd.cdd_numero_destino 'num_destino',
				SUM(cdd.cdd_duracion_min) AS 'minutos',
				SUM(cdd.cdd_costo_total) AS 'subtotal',
				SUM(cdd.cdd_costo_unit) AS 'total_unit',
				DATE_FORMAT(fxs.fxs_fecha_inicio,'%d-%m-%Y') AS 'fecha_inicio',
				DATE_FORMAT(fxs.fxs_fecha_fin,'%d-%m-%Y') AS 'fecha_fin',
				-- cdd.cdd_duracion_min as 'minutos',
				-- cdd.cdd_costo_total AS 'costo_total',
				-- cdd.cdd_costo_unit AS 'total_unit',
				src.src_nombre AS 'servicio',
				ppa.ppa_nombre AS 'destino',
				CASE 
					WHEN ppa.ppa_local = 1 THEN 'Local'
					WHEN ppa.ppa_local = 2 THEN 'No Local'
				END AS 'tipo_llamada',
				-- cdd.cdd_id ,
				cdd.cdd_fecha_inicio AS 'fecha_llamada'
			FROM
				cdd_cdr_detalle AS cdd
			LEFT JOIN txs_telefonoxservicio AS txs 
			ON REPLACE (TRIM(txs.txs_numero), '-', '') = cdd.cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente AS sxc ON sxc.sxc_id = txs.txs_id_sxc
			INNER JOIN fxs_facturaxservicio AS fxs ON fxs.fxs_id_sxc = sxc.sxc_id
			INNER JOIN fac_factura AS fac ON fac.fac_id = fxs.fxs_id_fac
			INNER JOIN src_servicio AS src ON src.src_id = sxc.sxc_id_src
			LEFT JOIN ppa_parametro_pais AS ppa ON ppa.ppa_desde_codigo = cdd.cdd_destino
			WHERE
				fac.fac_id = factura
			AND cdd_procesado=1 AND DATE(cdd.cdd_fecha_inicio) BETWEEN DATE(fxs.fxs_fecha_inicio)
			AND DATE(fxs.fxs_fecha_fin)
			GROUP BY
				cdd.cdd_destino,
				-- cdd.cdd_numero_origen,
				ppa.ppa_nombre
			;
		ELSE
			SELECT
				-- txs.txs_numero,
				cdd.cdd_numero_origen 'num_origen',
				cdd.cdd_numero_destino 'num_destino',
				-- SUM(cdd.cdd_duracion_min) AS 'minutos',
				-- SUM(cdd.cdd_costo_total) AS 'subtotal',
				-- SUM(cdd.cdd_costo_unit) AS 'total_unit',
				DATE_FORMAT(cdd.cdd_fecha_inicio,'%d-%m-%Y') AS 'fecha_ini_llamada',
				DATE_FORMAT(cdd.cdd_fecha_inicio,'%h:%i:%s %p') AS 'hora_ini_llamada',
				DATE_FORMAT(fxs.fxs_fecha_inicio,'%d-%m-%Y') AS 'fecha_inicio',
				DATE_FORMAT(fxs.fxs_fecha_fin,'%d-%m-%Y') AS 'fecha_fin',
				cdd.cdd_duracion_min as 'minutos',
				cdd.cdd_costo_unit AS 'costo_unit',
				cdd.cdd_costo_total AS 'costo_total',
				cdd.cdd_costo_unit AS 'total_unit',
				src.src_nombre AS 'servicio',
				ppa.ppa_nombre AS 'destino',
				CASE 
					WHEN ppa.ppa_local = 1 THEN 'Local'
					WHEN ppa.ppa_local = 0 THEN 'No Local'
				END AS 'tipo_llamada',
				-- cdd.cdd_id ,
				cdd.cdd_fecha_inicio AS 'fecha_llamada'
			FROM
				cdd_cdr_detalle AS cdd
			LEFT JOIN txs_telefonoxservicio AS txs 
			ON REPLACE (TRIM(txs.txs_numero), '-', '') = cdd.cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente AS sxc ON sxc.sxc_id = txs.txs_id_sxc
			INNER JOIN fxs_facturaxservicio AS fxs ON fxs.fxs_id_sxc = sxc.sxc_id
			INNER JOIN fac_factura AS fac ON fac.fac_id = fxs.fxs_id_fac
			INNER JOIN src_servicio AS src ON src.src_id = sxc.sxc_id_src
			LEFT JOIN ppa_parametro_pais AS ppa ON ppa.ppa_desde_codigo = cdd.cdd_destino
			WHERE
				fac.fac_id = factura
			AND cdd_procesado=1 AND DATE(cdd.cdd_fecha_inicio) BETWEEN DATE(fxs.fxs_fecha_inicio)
			AND DATE(fxs.fxs_fecha_fin);
		END IF;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_get_art
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_get_art`;
delimiter ;;
CREATE PROCEDURE `sp_get_art`(cod_articulo VARCHAR(100))
  SQL SECURITY INVOKER
BEGIN
SELECT 
	art_id id,
	art_codigo codigo,
	art_nombre producto,
	mep_nombre unidad,
	tia_nombre categoria,
	IFNULL(CAST((SELECT sar_precio FROM sar_saldo_articulo WHERE sar_id_art = art_id ORDER BY sar_id DESC LIMIT 1) AS DECIMAL(12,2)),0) precio,
	IFNULL(SUM(sar_cant_actual),0) existencia,
	art_tipo as tipo_articulo,
	art_id_bod as bod_id,
	art_id_tia
	FROM art_articulo
	LEFT JOIN cdp_codigo_producto ON cdp_id_art = art_id AND cdp_estado = 1
	INNER JOIN cva_conversion_articulo ON cva_id_art = art_id AND cva_defecto = 1
	INNER JOIN mep_medida_producto ON mep_id = cva_id_mep
	INNER JOIN tia_tipo_articulo ON tia_id = art_id_tia
	LEFT JOIN sar_saldo_articulo ON sar_id_art = art_id
	WHERE art_codigo = cod_articulo OR cod_articulo IS null 
				OR art_codigo_barra = cod_articulo OR cod_articulo IS NULL
				OR cdp_codigo = cod_articulo
				OR LOWER(art_nombre) LIKE CONCAT('%', cod_articulo, '%')
	GROUP BY art_id, art_codigo, art_nombre, mep_nombre, tia_nombre, art_tipo, art_id_bod;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_get_cliente
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_get_cliente`;
delimiter ;;
CREATE PROCEDURE `sp_get_cliente`(cod VARCHAR(100))
  SQL SECURITY INVOKER
BEGIN
		SELECT 
	cli_codigo,
	CONCAT(cli_nombre, ' ', '-', ' ', cli_apellido) nombre,
	dNit.dcc_valor nit,
	dDui.dcc_valor dui,
	dNrc.dcc_valor nrc,
	-- IFNULL((SELECT dcc_valor FROM dcc_documento_cliente WHERE dcc_id_cli = cli_id AND dcc_id_tde = (SELECT par_valor FROM par_parametro WHERE par_codigo = 'ID_TIPO_DOCUMENTO_NIT' LIMIT 1)LIMIT 1), ' ') nit,
	-- IFNULL((SELECT dcc_valor FROM dcc_documento_cliente WHERE dcc_id_cli = cli_id AND dcc_id_tde = (SELECT par_valor FROM par_parametro WHERE par_codigo = 'ID_TIPO_DOCUMENTO_DUI' LIMIT 1)LIMIT 1), ' ') dui,
	-- IFNULL((SELECT dcc_valor FROM dcc_documento_cliente WHERE dcc_id_cli = cli_id AND dcc_id_tde = (SELECT par_valor FROM par_parametro WHERE par_codigo = 'TIPO_DOCUMENTO_NRC_PROVEEDOR' LIMIT 1)LIMIT 1), ' ') nrc,
	cli_direccion direccion
	FROM cli_cliente
	LEFT JOIN par_parametro dui ON dui.par_codigo = 'ID_TIPO_DOCUMENTO_DUI'
	LEFT JOIN par_parametro nrc ON nrc.par_codigo = 'TIPO_DOCUMENTO_NRC_PROVEEDOR'
	LEFT JOIN par_parametro nit ON nit.par_codigo = 'ID_TIPO_DOCUMENTO_NIT'
	LEFT JOIN dcc_documento_cliente dNit ON dNit.dcc_id_cli = cli_id and dNit.dcc_estado = 1 AND dNit.dcc_id_tde = nit.par_valor
	LEFT JOIN dcc_documento_cliente dDui ON dDui.dcc_id_cli = cli_id AND dDui.dcc_estado = 1 AND dDui.dcc_id_tde = dui.par_valor
	LEFT JOIN dcc_documento_cliente dNrc ON dNrc.dcc_id_cli = cli_id AND dDui.dcc_estado =1 AND dNrc.dcc_id_tde = nrc.par_valor
	WHERE cli_estado = 1 AND (cli_codigo = cod OR CONCAT(cli_nombre, ' ',cli_apellido) LIKE CONCAT('%',cod,'%') OR dNit.dcc_valor = cod
				OR  dDui.dcc_valor = cod OR dNrc.dcc_valor = cod)
	-- OR (SELECT dcc_valor FROM dcc_documento_cliente WHERE dcc_id_cli = cli_id AND dcc_id_tde = (SELECT par_valor FROM 				par_parametro WHERE par_codigo = 'ID_TIPO_DOCUMENTO_DUI' LIMIT 1)) = cod
-- 	OR (SELECT dcc_valor FROM dcc_documento_cliente WHERE dcc_id_cli = cli_id AND dcc_id_tde = (SELECT par_valor FROM par_parametro WHERE par_codigo = 'TIPO_DOCUMENTO_NRC_PROVEEDOR' LIMIT 1)) = cod;
	GROUP BY 
	cli_codigo, 
	cli_nombre, 
	cli_apellido,
	dNit.dcc_valor, 
	dDui.dcc_valor, 
	dNrc.dcc_valor, 
	cli_direccion;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_historial_facturacion
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_historial_facturacion`;
delimiter ;;
CREATE PROCEDURE `sp_historial_facturacion`(cliente INT, fechaDesde VARCHAR(10), fechaHasta VARCHAR(10))
BEGIN
	-- CAMBIAR RELACION CON PAF A INNER
	IF(cliente = 0 AND fechaDesde = ' ' AND fechaHasta = ' ') THEN
		SELECT src.src_nombre as 'producto',fac_numero AS 'factura',
		DATE_FORMAT(fxs.fxs_fecha_inicio, '%d-%m-%Y') AS 'fecha_inicio',DATE_FORMAT(fxs.fxs_fecha_fin, '%d-%m-%Y') as 'fecha_fin',
											CASE
												WHEN fac.fac_estado = 2 AND fxp.fxp_id_plg IS NOT NULL THEN (SELECT SUM(cpl_total) FROM cpl_cuota_plan_pago WHERE cpl_id_plg = fxp.fxp_id_plg)*fxp.fxp_porcentaje 
												WHEN paf.paf_total IS NULL OR paf.paf_total = ' ' THEN '0.00' ELSE paf.paf_total END AS 'total',
											CASE
												WHEN fxp.fxp_id_plg IS NULL OR fxp.fxp_id_plg = ' ' THEN '' ELSE 'X' END AS 'plan',
											CASE
												WHEN fxp.fxp_id IS NULL OR fxp.fxp_id = ' ' THEN '' ELSE fxp.fxp_id END AS 'plan_id',												sxc.sxc_id as 'sxc',
											CASE
												WHEN paf.paf_fecha_pag IS NOT NULL THEN paf.paf_fecha_pag END AS 'fecha_pago',
											CASE
												WHEN paf.paf_numero IS NOT NULL THEN paf.paf_numero END AS 'correlativo',
											CASE 
													WHEN fac.fac_estado = 1 THEN 'Pendiente' 
													WHEN fac.fac_estado = 2 THEN 'Pagada'
													WHEN fac.fac_estado = 0 THEN 'Anulada'
											END AS 'estado'
		FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
		ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
		ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
		ON src.src_id = sxc.sxc_id_src LEFT JOIN paf_pago_factura AS paf 
		ON paf.paf_id_fac = fac.fac_id INNER JOIN cli_cliente AS cli
		ON cli.cli_id = sxc.sxc_id_cli LEFT JOIN fxp_facturaxplan_pago AS fxp ON 
		fxp.fxp_id_fac = fac.fac_id LEFT JOIN plg_plan_pago AS plg
		ON plg.plg_id = fxp.fxp_id_plg
		-- LEFT JOIN pxl_plan_promoxcliente AS pxl
		-- ON pxl.pxl_id_sxc = sxc.sxc_id LEFT JOIN pln_plan_promocion AS pln
		-- ON pln.pln_id = pxl.pxl_id_pln 
	ORDER BY fac_numero ASC;

	ELSEIF (cliente = 0 AND fechaDesde != ' ' AND fechaHasta != ' ') THEN 
		
		SELECT src.src_nombre as 'producto',fac_numero AS 'factura',
		DATE_FORMAT(fxs.fxs_fecha_inicio, '%d-%m-%Y') AS 'fecha_inicio',DATE_FORMAT(fxs.fxs_fecha_fin, '%d-%m-%Y') as 'fecha_fin',
											CASE
												WHEN fac.fac_estado = 2 AND fxp.fxp_id_plg IS NOT NULL THEN (SELECT SUM(cpl_total) FROM cpl_cuota_plan_pago WHERE cpl_id_plg = fxp.fxp_id_plg)*fxp.fxp_porcentaje 
												WHEN paf.paf_total IS NULL OR paf.paf_total = ' ' THEN '0.00' ELSE paf.paf_total END AS 'total',
											CASE
												WHEN fxp.fxp_id_plg IS NULL OR fxp.fxp_id_plg = ' ' THEN '' ELSE 'X' END AS 'plan',
											CASE
												WHEN fxp.fxp_id IS NULL OR fxp.fxp_id = ' ' THEN '' ELSE fxp.fxp_id END AS 'plan_id',
											CASE
												WHEN paf.paf_fecha_pag IS NOT NULL THEN paf.paf_fecha_pag END AS 'fecha_pago',
											CASE
												WHEN paf.paf_numero IS NOT NULL THEN paf.paf_numero END AS 'correlativo',
											CASE 
													WHEN fac.fac_estado = 1 THEN 'Pendiente' 
													WHEN fac.fac_estado = 2 THEN 'Pagada'
													WHEN fac.fac_estado = 0 THEN 'Anulada'
											END AS 'estado'
		FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
		ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
		ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
		ON src.src_id = sxc.sxc_id_src LEFT JOIN paf_pago_factura AS paf 
		ON paf.paf_id_fac = fac.fac_id INNER JOIN cli_cliente AS cli
		ON cli.cli_id = sxc.sxc_id_cli LEFT JOIN fxp_facturaxplan_pago AS fxp ON 
		fxp.fxp_id_fac = fac.fac_id LEFT JOIN plg_plan_pago AS plg
		ON plg.plg_id = fxp.fxp_id_plg
	
		WHERE DATE(fxs.fxs_fecha_inicio) >= fechaDesde
			AND		DATE(fxs.fxs_fecha_inicio) <= fechaHasta
		ORDER BY fac_numero ASC
	;

	ELSEIF (cliente > 0 AND fechaDesde != ' ' AND fechaHasta != ' ') THEN
		SELECT src.src_nombre as 'producto',fac_numero AS 'factura',
		DATE_FORMAT(fxs.fxs_fecha_inicio, '%d-%m-%Y') AS 'fecha_inicio',DATE_FORMAT(fxs.fxs_fecha_fin, '%d-%m-%Y') as 'fecha_fin',
											CASE
												WHEN fac.fac_estado = 2 AND fxp.fxp_id_plg IS NOT NULL THEN (SELECT SUM(cpl_total) FROM cpl_cuota_plan_pago WHERE cpl_id_plg = fxp.fxp_id_plg)*fxp.fxp_porcentaje 
												WHEN paf.paf_total IS NULL OR paf.paf_total = ' ' THEN '0.00' ELSE paf.paf_total END AS 'total',
											CASE
												WHEN fxp.fxp_id_plg IS NULL OR fxp.fxp_id_plg = ' ' THEN '' ELSE 'X' END AS 'plan',
											CASE
												WHEN fxp.fxp_id IS NULL OR fxp.fxp_id = ' ' THEN '' ELSE fxp.fxp_id END AS 'plan_id',
											CASE
												WHEN paf.paf_fecha_pag IS NOT NULL THEN paf.paf_fecha_pag END AS 'fecha_pago',
											CASE
												WHEN paf.paf_numero IS NOT NULL THEN paf.paf_numero END AS 'correlativo',
											CASE 
													WHEN fac.fac_estado = 1 THEN 'Pendiente' 
													WHEN fac.fac_estado = 2 THEN 'Pagada'
													WHEN fac.fac_estado = 0 THEN 'Anulada'
											END AS 'estado'
		FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
		ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
		ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
		ON src.src_id = sxc.sxc_id_src LEFT JOIN paf_pago_factura AS paf 
		ON paf.paf_id_fac = fac.fac_id INNER JOIN cli_cliente AS cli
		ON cli.cli_id = sxc.sxc_id_cli LEFT JOIN fxp_facturaxplan_pago AS fxp ON 
		fxp.fxp_id_fac = fac.fac_id LEFT JOIN plg_plan_pago AS plg
		ON plg.plg_id = fxp.fxp_id_plg
	
		WHERE DATE(fxs.fxs_fecha_inicio) >= fechaDesde
			AND		DATE(fxs.fxs_fecha_inicio) <= fechaHasta
			AND 	cli.cli_id = cliente
		ORDER BY fac_numero ASC
	;

	ELSE
		SELECT src.src_nombre as 'producto',fac_numero AS 'factura',
		DATE_FORMAT(fxs.fxs_fecha_inicio, '%d-%m-%Y') AS 'fecha_inicio',DATE_FORMAT(fxs.fxs_fecha_fin, '%d-%m-%Y') as 'fecha_fin',
											CASE
												WHEN fac.fac_estado = 2 AND fxp.fxp_id_plg IS NOT NULL THEN (SELECT SUM(cpl_total) FROM cpl_cuota_plan_pago WHERE cpl_id_plg = fxp.fxp_id_plg)*fxp.fxp_porcentaje 
												WHEN paf.paf_total IS NULL OR paf.paf_total = ' ' THEN '0.00' ELSE paf.paf_total END AS 'total',
											CASE
												WHEN fxp.fxp_id_plg IS NULL OR fxp.fxp_id_plg = ' ' THEN '' ELSE 'X' END AS 'plan',
											CASE
												WHEN fxp.fxp_id IS NULL OR fxp.fxp_id = ' ' THEN '' ELSE fxp.fxp_id END AS 'plan_id',
											CASE
												WHEN paf.paf_fecha_pag IS NOT NULL THEN paf.paf_fecha_pag END AS 'fecha_pago',
											CASE
												WHEN paf.paf_numero IS NOT NULL THEN paf.paf_numero END AS 'correlativo',
											CASE 
													WHEN fac.fac_estado = 1 THEN 'Pendiente' 
													WHEN fac.fac_estado = 2 THEN 'Pagada'
													WHEN fac.fac_estado = 0 THEN 'Anulada'
											END AS 'estado'
		FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs
		ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
		ON sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN src_servicio AS src
		ON src.src_id = sxc.sxc_id_src LEFT JOIN paf_pago_factura AS paf 
		ON paf.paf_id_fac = fac.fac_id INNER JOIN cli_cliente AS cli
		ON cli.cli_id = sxc.sxc_id_cli LEFT JOIN fxp_facturaxplan_pago AS fxp ON 
		fxp.fxp_id_fac = fac.fac_id LEFT JOIN plg_plan_pago AS plg
		ON plg.plg_id = fxp.fxp_id_plg
	
		WHERE cli.cli_id = cliente
		ORDER BY fac_numero ASC
	;
	END IF;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_listado_planes_pago
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_listado_planes_pago`;
delimiter ;;
CREATE PROCEDURE `sp_listado_planes_pago`()
  SQL SECURITY INVOKER
BEGIN

SELECT plg.plg_id,CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente',
plg.plg_monto_deuda as 'monton_inicial',
	(
		plg.plg_monto_deuda - 
		(
			SELECT IFNULL(SUM(cpl.cpl_total),0) FROM cpl_cuota_plan_pago AS cpl WHERE cpl.cpl_id_plg = plg.plg_id 
			AND cpl.cpl_estado = 2
		)
	) AS 'pendiente',
	(
			SELECT IFNULL(COUNT(cpl.cpl_id),0) FROM cpl_cuota_plan_pago AS cpl WHERE cpl.cpl_id_plg = plg.plg_id 
	) AS 'cuotas_proyectadas',
	
	(
		SELECT IFNULL(COUNT(cpl.cpl_id),0) FROM cpl_cuota_plan_pago AS cpl WHERE cpl.cpl_id_plg = plg.plg_id 
			AND cpl.cpl_estado = 2
	) AS 'cuotas_pagadas',
	plg.plg_fecha_plan AS 'fecha_inicio',
	(
		SELECT cpl.cpl_fecha_vencimiento FROM cpl_cuota_plan_pago AS cpl WHERE cpl.cpl_id_plg = plg.plg_id 
		ORDER BY cpl.cpl_id DESC LIMIT 1
	) AS 'fecha_fin'
FROM plg_plan_pago AS plg LEFT JOIN fxp_facturaxplan_pago AS fxp
On plg.plg_id = fxp.fxp_id_plg LEFT JOIN fac_factura AS fac 
ON fac.fac_id = fxp.fxp_id_fac LEFT JOIN fxs_facturaxservicio AS fxs
ON fxs.fxs_id_fac = fac.fac_id LEFT JOIN sxc_servicioxcliente AS sxc
ON sxc.sxc_id = fxs.fxs_id_sxc LEFT JOIN src_servicio AS src
ON src.src_id = sxc.sxc_id_src LEFT JOIN cli_cliente AS cli
ON cli.cli_id  = sxc.sxc_id_cli 
GROUP BY plg.plg_id;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_cdr
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_cdr`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_cdr`(IN telOrigen VARCHAR(100), IN fechaDesde VARCHAR(50), IN fechaHasta VARCHAR(50),procesados VARCHAR(1))
BEGIN
    IF(telOrigen = NULL OR telOrigen = ' ' AND fechaDesde = ' ' AND fechaHasta = ' ' AND procesados = ' ') THEN

      SELECT	 cdd_id,cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora, 
				cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total, src_nombre as servicio,
					CASE 
							WHEN cdd_procesado = 1 THEN 'Sí'
							WHEN cdd_procesado = 0 THEN 'No'
          END as procesado      
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1
				AND	cdd_numero_origen IN (cdd_numero_origen)
      ORDER BY cdd_fecha_inicio ASC
		 ;   
    ELSEIF(telOrigen = ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND procesados = ' ') THEN

      SELECT	 cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora,
						cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total, src_nombre as servicio,
					CASE 
							WHEN cdd_procesado = 1 THEN 'Sí'
							WHEN cdd_procesado = 0 THEN 'No'
          END as procesado  
                    
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1
				AND cdd_fecha_inicio >= CONCAT(fechaDesde, ' 00:00:00')
				AND cdd_fecha_inicio <= CONCAT(fechaHasta, ' 23:59:59')
      ORDER BY cdd_fecha_inicio ASC
      
		 ; 

     ELSEIF(telOrigen != ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND procesados = ' ') THEN
      SELECT	 cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora,
					cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total,src_nombre as servicio,
					CASE 
							WHEN cdd_procesado = 1 THEN 'Sí'
							WHEN cdd_procesado = 0 THEN 'No'
          END as procesado  
                    
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1
        AND	cdd_numero_origen IN (telOrigen)
				AND cdd_fecha_inicio >= CONCAT(fechaDesde, ' 00:00:00')
				AND cdd_fecha_inicio <= CONCAT(fechaHasta, ' 23:59:59')
      ORDER BY cdd_fecha_inicio ASC
		 ;

		ELSEIF(telOrigen = ' ' AND fechaDesde = ' ' AND fechaHasta = ' ' AND procesados != ' ') THEN
      SELECT	 cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora,
					cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total,src_nombre as servicio,
					CASE 
							WHEN cdd_procesado = 1 THEN 'Sí'
							WHEN cdd_procesado = 0 THEN 'No'
          END as procesado  
                    
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1 AND cdd_procesado = procesados
      ORDER BY cdd_fecha_inicio ASC
		 ; 

		 ELSEIF(telOrigen != ' ' AND fechaDesde = ' ' AND fechaHasta = ' ' AND procesados != ' ') THEN
      SELECT	 cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora,
					cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total,src_nombre as servicio,
					CASE 
							WHEN cdd_procesado = 1 THEN 'Sí'
							WHEN cdd_procesado = 0 THEN 'No'
          END as procesado  
                    
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1 AND cdd_procesado = procesados
        AND	cdd_numero_origen IN (telOrigen) AND cdd_procesado = procesados
				/*AND cdd_fecha_inicio >= CONCAT(fechaDesde, ' 00:00:00')
				AND cdd_fecha_inicio <= CONCAT(fechaHasta, ' 23:59:59')*/
      ORDER BY cdd_fecha_inicio ASC
		 ; 

		ELSEIF(telOrigen = ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND procesados != ' ') THEN
      SELECT	 cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora,
					cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total,src_nombre as servicio,
					CASE 
							WHEN cdd_procesado = 1 THEN 'Sí'
							WHEN cdd_procesado = 0 THEN 'No'
          END as procesado  
                    
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1 AND cdd_procesado = procesados
        /*AND	cdd_numero_origen IN (telOrigen)*/
				AND cdd_fecha_inicio >= CONCAT(fechaDesde, ' 00:00:00')
				AND cdd_fecha_inicio <= CONCAT(fechaHasta, ' 23:59:59')
				AND cdd_procesado = procesados
      ORDER BY cdd_fecha_inicio ASC
		 ; 

		ELSEIF(telOrigen != ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND procesados != ' ') THEN
      SELECT	 cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora,
					cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total,src_nombre as servicio,
					CASE 
							WHEN cdd_procesado = 1 THEN 'Sí'
							WHEN cdd_procesado = 0 THEN 'No'
          END as procesado  
                    
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1 AND cdd_procesado = procesados
        AND	cdd_numero_origen IN (telOrigen)
				AND cdd_fecha_inicio >= CONCAT(fechaDesde, ' 00:00:00')
				AND cdd_fecha_inicio <= CONCAT(fechaHasta, ' 23:59:59')
				AND cdd_procesado = procesados
      ORDER BY cdd_fecha_inicio ASC
		 ; 
     
    ELSE
      SELECT	 cdd_numero_origen origen, cdd_numero_destino  Terminacion, 
               ppa_nombre  nombre_destino, Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, Date_format(cdd_fecha_inicio,'%h:%i:%s') hora,
							cdd_duracion_min minutos, cdd_costo_unit costo, cdd_costo_total total,src_nombre as servicio,
							CASE 
								WHEN cdd_procesado = 1 THEN 'Sí'
								WHEN cdd_procesado = 0 THEN 'No'
          END as procesado  
                    
			FROM	cdd_cdr_detalle LEFT JOIN ppa_parametro_pais ON cdd_destino = ppa_desde_codigo
			INNER JOIN txs_telefonoxservicio ON REPLACE(txs_numero,'-','') = cdd_numero_origen 
			INNER JOIN sxc_servicioxcliente ON sxc_id = txs_id_sxc INNER JOIN src_servicio ON 
			src_id = sxc_id_src
			WHERE	cdd_estado = 1
				AND	cdd_numero_origen IN (telOrigen)
      ORDER BY cdd_fecha_inicio ASC
		 ;
    

    END IF;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_cli
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_cli`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_cli`(IN cliPersoneria INT)
BEGIN
DECLARE dui VARCHAR (50);
DECLARE nit VARCHAR(50);

SET dui := get_parametro('ID_TIPO_DOCUMENTO_DUI');
SET nit := get_parametro('ID_TIPO_DOCUMENTO_NIT');

IF (cliPersoneria = 0) THEN
SELECT cli_id codigo, CONCAT_WS(' ',cli_nombre, cli_apellido) AS nombre,  CASE  
                                                                          WHEN   dui = dcc_id_tde THEN dcc_valor
                                                                          END 'DUI',
                                                                          CASE  
                                                                          WHEN   nit = dcc_id_tde THEN dcc_valor
                                                                          END 'NIT',
                                                                         gir_nombre razon_social, 
                                                                         CASE  
                                                                          WHEN   cli_personeria = 1 THEN 'Natural'
                                                                          ELSE   'Juridica'
                                                                         END AS tipo_cliente 
                                                                         
FROM cli_cliente LEFT JOIN dcc_documento_cliente ON dcc_id_cli = cli_id
                 LEFT JOIN gir_giro ON cli_id_gir = gir_id
;
ELSE
SELECT cli_id codigo, CONCAT_WS(' ',cli_nombre, cli_apellido) AS nombre,  CASE  
                                                                          WHEN   dui = dcc_id_tde THEN dcc_valor
                                                                          END 'DUI',
                                                                          CASE  
                                                                          WHEN   nit = dcc_id_tde THEN dcc_valor
                                                                          END 'NIT',
                                                                         gir_nombre razon_social, 
                                                                         CASE  
                                                                          WHEN   cli_personeria = 1 THEN 'Natural'
                                                                          ELSE   'Juridica'
                                                                         END AS tipo_cliente 
                                                                         
FROM cli_cliente LEFT JOIN dcc_documento_cliente ON dcc_id_cli = cli_id
                 LEFT JOIN gir_giro ON cli_id_gir = gir_id
WHERE cli_personeria = cliPersoneria
;
END IF;


END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_consolidado_min
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_consolidado_min`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_consolidado_min`(departamento INT, fecha_inicio VARCHAR(10), fecha_fin VARCHAR(10))
BEGIN 
	IF(fecha_inicio = ' ' AND fecha_fin = ' ') THEN 
					/*SELECT
						dep.dep_nombre,
						pai.pai_nombre,
						ppa.ppa_nombre,
						SUM(cdd.cdd_duracion_min) AS minutos,
						SUM(cdd.cdd_costo_total) AS total,
						cdd.cdd_fecha_inicio
					FROM
						dep_departamento AS dep
					INNER JOIN pai_pais AS pai ON pai.pai_id = dep.dep_id_pai
					INNER JOIN ppa_parametro_pais AS ppa ON ppa.ppa_id_pai = pai.pai_id
					INNER JOIN cdd_cdr_detalle AS cdd ON cdd.cdd_destino = ppa.ppa_desde_codigo
					WHERE
						dep.dep_id = departamento
					GROUP BY
						ppa.ppa_nombre
					ORDER BY
						ppa.ppa_nombre;*/
					SELECT dep.dep_id, dep.dep_nombre,ppa.ppa_nombre,
					SUM(cdd.cdd_duracion_min) AS minutos,
					SUM(cdd.cdd_costo_total) AS total,
						-- cdd.cdd_duracion_min  AS munitos,
						-- cdd.cdd_costo_total AS total,
						cdd.cdd_fecha_inicio
					FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
					ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
					ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
					ON dep.dep_id = mun.mun_id_dep INNER JOIN txs_telefonoxservicio AS txs
          ON txs.txs_id_sxc = sxc.sxc_id INNER JOIN cdd_cdr_detalle AS cdd 
					ON cdd.cdd_numero_origen = REPLACE(TRIM(txs.txs_numero),'-','') INNER JOIN 
					ppa_parametro_pais AS ppa ON ppa.ppa_desde_codigo = cdd.cdd_destino 
					WHERE dep.dep_id = departamento  
					-- AND DATE(cdd.cdd_fecha_inicio) >= '2016-03-01' AND DATE(cdd.cdd_fecha_inicio) <= '2016-03-31'
					GROUP BY ppa.ppa_nombre 
					ORDER BY ppa.ppa_nombre;
	ELSE 
			/*SELECT
				dep.dep_nombre,
				pai.pai_nombre,
				ppa.ppa_nombre,
				SUM(cdd.cdd_duracion_min) AS minutos,
				SUM(cdd.cdd_costo_total) AS total,
				cdd.cdd_fecha_inicio
			FROM
				dep_departamento AS dep
			INNER JOIN pai_pais AS pai ON pai.pai_id = dep.dep_id_pai
			INNER JOIN ppa_parametro_pais AS ppa ON ppa.ppa_id_pai = pai.pai_id
			INNER JOIN cdd_cdr_detalle AS cdd ON cdd.cdd_destino = ppa.ppa_desde_codigo
			WHERE
				dep.dep_id = departamento
			AND DATE(cdd.cdd_fecha_inicio) >= fecha_inicio
			AND DATE(cdd.cdd_fecha_inicio) <= fecha_fin
			GROUP BY
				ppa.ppa_nombre
			ORDER BY
				ppa.ppa_nombre;*/

					SELECT dep.dep_id, dep.dep_nombre,ppa.ppa_nombre,
						SUM(cdd.cdd_duracion_min) AS minutos,
						SUM(cdd.cdd_costo_total) AS total,
						-- cdd.cdd_duracion_min  AS munitos,
						-- cdd.cdd_costo_total AS total,
						cdd.cdd_fecha_inicio
					FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
					ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
					ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
					ON dep.dep_id = mun.mun_id_dep INNER JOIN txs_telefonoxservicio AS txs
          ON txs.txs_id_sxc = sxc.sxc_id INNER JOIN cdd_cdr_detalle AS cdd 
					ON cdd.cdd_numero_origen = REPLACE(TRIM(txs.txs_numero),'-','') INNER JOIN 
					ppa_parametro_pais AS ppa ON ppa.ppa_desde_codigo = cdd.cdd_destino 
					WHERE dep.dep_id = departamento  
					AND DATE(cdd.cdd_fecha_inicio) >= fecha_inicio
					AND DATE(cdd.cdd_fecha_inicio) <= fecha_fin
					GROUP BY ppa.ppa_nombre 
					ORDER BY ppa.ppa_nombre;
	END IF;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_consolidado_pro
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_consolidado_pro`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_consolidado_pro`(IN prodId INT, IN depId INT, IN fechaIni VARCHAR(10), IN fechaFin VARCHAR(10))
BEGIN
  IF(prodId = '' AND  depId = ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total    
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src  
		GROUP BY src_nombre, dep_id;

   ELSEIF(prodId != '' AND  depId = ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src 
    WHERE src_id = prodId
		GROUP BY src_nombre, dep_id; 

    ELSEIF(prodId = '' AND  depId != ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src  
    WHERE dep_id = depId
		GROUP BY src_nombre, dep_id; 

    ELSEIF(prodId = '' AND  depId = ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src  
    -- WHERE DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		WHERE (SELECT count(fac_id) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id AND 
			DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin)
		GROUP BY src_nombre, dep_id; 
 

    ELSEIF(prodId != '' AND  depId != ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src  
    WHERE src_id = prodId
      AND dep_id = depId
		GROUP BY src_nombre, dep_id; 

    ELSEIF(prodId != '' AND  depId = ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src  
    WHERE src_id = prodId
      AND -- DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		(SELECT count(fac_id) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id AND 
			DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin)
		GROUP BY src_nombre, dep_id; 

    ELSEIF(prodId = '' AND  depId != ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src  
    WHERE dep_id = depId
      AND -- DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		(SELECT count(fac_id) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id AND 
			DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin)
		GROUP BY src_nombre, dep_id; 

     ELSEIF(prodId != '' AND  depId != ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
		SELECT dep_nombre departamento, src_nombre producto, count(cli_id) cantidad_cliente, 
		(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
		FROM cli_cliente 
										 INNER JOIN mun_municipio    ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento ON dep_id = mun_id_dep
										 INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src  
    WHERE dep_id = depId
      AND src_id = prodId
      AND -- DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		(SELECT count(fac_id) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id AND 
			DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin)
		GROUP BY src_nombre, dep_id; 
		END IF;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_consolidado_promociones
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_consolidado_promociones`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_consolidado_promociones`(IN depId INT, IN promId INT, IN fechaIni VARCHAR(10), IN fechaFin VARCHAR(10))
BEGIN
 IF(depId = '' AND promId = ''  AND fechaIni = ' ' AND fechaFin = ' ') THEN
 SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac
	GROUP BY pln_id, dep_id
	;

  ELSEIF(depId != '' AND promId = ''  AND fechaIni = ' ' AND fechaFin = ' ') THEN
  SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac
   WHERE dep.dep_id = depId
	GROUP BY pln_id, dep_id
	;

  ELSEIF(depId = '' AND promId != ''  AND fechaIni = ' ' AND fechaFin = ' ') THEN
  SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac
   WHERE pln_id = promId
	GROUP BY pln_id, dep_id
	;

  ELSEIF(depId = '' AND promId = ''  AND fechaIni != ' ' AND fechaFin != ' ') THEN
  SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac 
   WHERE DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
	GROUP BY pln_id, dep_id
	;

	ELSEIF(depId != '' AND promId != ''  AND fechaIni = ' ' AND fechaFin = ' ') THEN
  SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac
   WHERE dep.dep_id = depId 
		AND pln_id = promId
	GROUP BY pln_id, dep_id
	;

	ELSEIF(depId = '' AND promId != ''  AND fechaIni != ' ' AND fechaFin != ' ') THEN
  SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac 
   WHERE DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		AND pln_id = promId
	GROUP BY pln_id, dep_id
	;

	ELSEIF(depId != '' AND promId = ''  AND fechaIni != ' ' AND fechaFin != ' ') THEN
  SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac
   WHERE DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		AND dep.dep_id = depId
	GROUP BY pln_id, dep_id
	;

	ELSEIF(depId != '' AND promId != ''  AND fechaIni = ' ' AND fechaFin = ' ') THEN
  SELECT   dep_nombre, pln_nombre plan, count(DISTINCT cli_id) clientes, sum(pln_costo) monto_total
	FROM cli_cliente AS cli INNER JOIN sxc_servicioxcliente AS sxc 
						ON sxc.sxc_id_cli = cli.cli_id INNER JOIN mun_municipio AS mun 
						ON mun.mun_id = cli.cli_id_mun INNER JOIN dep_departamento AS dep
						ON dep.dep_id = mun.mun_id_dep      INNER JOIN pxl_plan_promoxcliente
						on pxl_id_sxc = sxc_id	INNER JOIN pln_plan_promocion 
						ON pxl_id_pln = pln_id INNER JOIN fxs_facturaxservicio
						ON fxs_id_sxc = sxc_id	INNER JOIN fac_factura
						ON fac_id = fxs_id_fac
   WHERE  dep.dep_id = depId 
    AND pln_id = promId
	GROUP BY pln_id, dep_id
	;
 END IF;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_consolidado_vendedores
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_consolidado_vendedores`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_consolidado_vendedores`(IN venId INT, IN prodID INT, IN depId INT, IN fechaIni VARCHAR(10), IN fechaFin VARCHAR(10))
BEGIN
  IF(venId = '' AND prodID = '' AND  depId = ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND   ven_id = ven_id
			AND   dep_id = dep_id
			AND   src_id = src_id
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;
  ELSEIF(venId != '' AND prodID = '' AND  depId = ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND   ven_id = venId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId = '' AND prodID != '' AND  depId = ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND   src_id = prodID
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId = '' AND prodID = '' AND  depId != ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes,
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND   dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId = '' AND prodID = '' AND  depId = ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id 
				AND  DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId != '' AND prodID != '' AND  depId = ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND venId = ven_id
      AND src_id = prodID
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId != '' AND prodID != '' AND  depId != ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND venId = ven_id
      AND src_id = prodID
      AND dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId != '' AND prodID != '' AND  depId != ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
				AND DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND venId = ven_id
      AND src_id = prodID
      AND dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId != '' AND prodID = '' AND  depId != ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND venId = ven_id
      AND dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId != '' AND prodID = '' AND  depId = ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
				AND DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND venId = ven_id
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId != '' AND prodID = '' AND  depId != ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
				AND DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND venId = ven_id
      AND dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId = '' AND prodID != '' AND  depId != ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
				AND DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
			AND src_id = prodID
      AND dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId = '' AND prodID = '' AND  depId != ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
				AND DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
      AND dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId = '' AND prodID != '' AND  depId = ' ' AND fechaIni != ' ' AND fechaFin != ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes,
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
				AND DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
      AND src_id = prodID
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;

 ELSEIF(venId = '' AND prodID != '' AND  depId != ' ' AND fechaIni = ' ' AND fechaFin = ' ') THEN
	SELECT  ven_nombre, dep_nombre departamento , src_nombre producto, count(cli_id_ven) cantidad_clientes, 
	(SELECT sum(fac_total) FROM fac_factura INNER JOIN fxs_facturaxservicio ON fac_id = fxs_id_fac 
				INNER JOIN sxc_servicioxcliente ON fxs_id_sxc = sxc_id WHERE sxc_id_cli = cli_id
		) as monto_total 
	FROM cli_cliente   INNER JOIN sxc_servicioxcliente ON sxc_id_cli = cli_id
										 INNER JOIN src_servicio         ON src_id = sxc_id_src
										 INNER JOIN ven_vendedor         ON ven_id = cli_id_ven
										 INNER JOIN mun_municipio        ON cli_id_mun = mun_id
										 INNER JOIN dep_departamento     ON dep_id = mun_id_dep
	WHERE  cli_id_ven IS NOT NULL
      AND src_id = prodID
      AND dep_id = depId
	GROUP BY cli_id_ven, src_nombre, dep_nombre
;
END IF;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_contabilidad
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_contabilidad`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_contabilidad`(IN cliId INT, IN fechaIni VARCHAR(10), IN fechaFin varchar(10))
BEGIN
	IF(fechaIni = ' ' AND fechaFin = ' ') THEN 
  SELECT  src.src_nombre, fac.fac_numero factura, fac.fac_subtotal subtotal, fac.fac_total as total,
				 fac.fac_impuesto as iva, 
					-- caf.caf_valor, caf.caf_impuesto iva,
          -- caf.caf_subtotal total,
					sum(DISTINCT(cdd.cdd_duracion_min)) minutos, paf.paf_numero recibo, DATE_FORMAT(paf.paf_fecha_pag, '%d-%m-%Y') fecha_pago
          -- tif.tif_nombre comprobante, pln.pln_nombre
	FROM sxc_servicioxcliente sxc INNER JOIN src_servicio AS src 					 ON src.src_id = sxc.sxc_id_src
																LEFT JOIN txs_telefonoxservicio AS txs  ON txs.txs_id_sxc = sxc.sxc_id
																LEFT JOIN cdd_cdr_detalle AS cdd 			 ON cdd.cdd_numero_origen = REPLACE(TRIM(txs.txs_numero),'-','')
																-- LEFT JOIN caf_cargo_facturacion AS caf  ON caf.caf_id_sxc = sxc.sxc_id
																LEFT JOIN fxs_facturaxservicio  AS fxs  ON  fxs.fxs_id_sxc = sxc.sxc_id  
																LEFT JOIN fac_factura AS fac						 ON fac.fac_id = fxs.fxs_id_fac
																LEFT JOIN paf_pago_factura  AS paf 		 ON fac.fac_id = paf.paf_id_fac 
																LEFT JOIN cli_cliente AS cli            ON cli.cli_id = sxc.sxc_id_cli
																-- LEFT JOIN tif_tipo_factura AS tif       ON tif.tif_id = cli_id_tif
																-- LEFT JOIN pxl_plan_promoxcliente AS pxl ON pxl.pxl_id_sxc = sxc.sxc_id
																-- LEFT JOIN pln_plan_promocion AS pln     ON pxl.pxl_id_pln = pln.pln_id
	Where sxc.sxc_id_cli = cliId
	Group BY sxc_id_cli-- src.src_id-- agrupa por servicio/producto sxc.sxc_id_cli agrupa por cliente
  ;
  ELSE 
  SELECT   src.src_nombre, fac.fac_numero factura, fac.fac_subtotal subtotal, fac.fac_total as total,
				 fac.fac_impuesto as iva, 
					-- caf.caf_valor, caf.caf_impuesto iva,
          -- caf.caf_subtotal total,
					sum(DISTINCT(cdd.cdd_duracion_min)) minutos, paf.paf_numero recibo, DATE_FORMAT(paf.paf_fecha_pag, '%d-%m-%Y') fecha_pago
          -- tif.tif_nombre comprobante, pln.pln_nombre
	FROM sxc_servicioxcliente sxc INNER JOIN src_servicio AS src 					 ON src.src_id = sxc.sxc_id_src
																LEFT JOIN txs_telefonoxservicio AS txs  ON txs.txs_id_sxc = sxc.sxc_id
																LEFT JOIN cdd_cdr_detalle AS cdd 			 ON cdd.cdd_numero_origen = REPLACE(TRIM(txs.txs_numero),'-','')
																-- LEFT JOIN caf_cargo_facturacion AS caf  ON caf.caf_id_sxc = sxc.sxc_id
																LEFT JOIN fxs_facturaxservicio  AS fxs  ON  fxs.fxs_id_sxc = sxc.sxc_id  
																LEFT JOIN fac_factura AS fac						 ON fac.fac_id = fxs.fxs_id_fac
																LEFT JOIN paf_pago_factura  AS paf 		 ON fac.fac_id = paf.paf_id_fac 
																LEFT JOIN cli_cliente AS cli            ON cli.cli_id = sxc.sxc_id_cli
																-- LEFT JOIN tif_tipo_factura AS tif       ON tif.tif_id = cli_id_tif
																-- LEFT JOIN pxl_plan_promoxcliente AS pxl ON pxl.pxl_id_sxc = sxc.sxc_id
																-- LEFT JOIN pln_plan_promocion AS pln     ON pxl.pxl_id_pln = pln.pln_id
	Where sxc.sxc_id_cli = cliId
		And DATE(fxs_fecha_inicio) BETWEEN fechaIni AND fechaFin
	Group BY sxc_id_cli-- src.src_id-- agrupa por servicio/producto sxc.sxc_id_cli agrupa por cliente
  ;
 END IF;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_costo_fac
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_costo_fac`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_costo_fac`(IN facId INT)
BEGIN
		SELECT	  fac_id, 
				cdd_numero_origen numero_telefono, cdd_numero_destino  numero_destino, 
				ppa_nombre Pais_Operador, 
				Date_format(cdd_fecha_inicio, '%d-%m-%Y') fecha, 
				Date_format(cdd_fecha_inicio,'%h:%i:%s') hora, cdd_duracion_min minutos, 
				cdd_costo_unit costo, cdd_costo_total total
                    
			FROM	cdd_cdr_detalle INNER JOIN txs_telefonoxservicio ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
                            INNER JOIN sxc_servicioxcliente  ON sxc_id = txs_id_sxc
                            INNER JOIN fxs_facturaxservicio  ON sxc_id = fxs_id_sxc
                            INNER JOIN fac_factura           ON fac_id = fxs_id_fac
                            INNER JOIN ppa_parametro_pais    ON cdd_destino = ppa_desde_codigo
			WHERE	fac_id = facId
        AND cdd_estado = 1
				AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
				AND DATE_FORMAT(cdd_fecha_fin, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d')
		 ;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_fac
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_fac`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_fac`(IN codCli INT, IN fechaDesde VARCHAR(10), IN fechaHasta VARCHAR(10), IN estado INT)
BEGIN
DECLARE nit VARCHAR(50);
SET nit := get_parametro('ID_TIPO_DOCUMENTO_NIT');
		#SIN FILTROS
    IF(codCli = NULL OR codCli = ' ' AND fechaDesde = ' ' AND fechaHasta = ' ' AND estado = 5 ) THEN

			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																													WHEN   nit = dcc_id_tde THEN dcc_valor
																																											END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
							Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,
-- sum(cdd_duracion_min) minutos_consumidos, 
							if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
												AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
							SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
							(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cli_id = codigo_cliente AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
							fac_subtotal as total_neto, 
							-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
							fac_total as totalMasIva,
																																																	CASE  
																																																		WHEN   fac_estado = 0 THEN 'Anulada'
																																																		WHEN   fac_estado = 1 THEN 'Pendiente'
																																																		WHEN   fac_estado = 2 THEN 'Pagada'
																																																	 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- LEFT JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif
			GROUP BY cdd_numero_origen, fac_id
    
		 ;
		#SOLO FECHAS
    ELSEIF(codCli = ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND estado != 5 ) THEN

       
		SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																												WHEN  nit = dcc_id_tde THEN dcc_valor
																																										END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
						Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,
						fac_subtotal as total_neto, 
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codigo_cliente AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
						-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
						fac_total as totalMasIva,
																																																CASE  
																																																	WHEN   fac_estado = 0 THEN 'Anulada'
																																																	WHEN   fac_estado = 1 THEN 'Pendiente'
																																																	WHEN   fac_estado = 2 THEN 'Pagada'
																																																 END estado, tif_nombre tipo_factura
		FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
															 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
															 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
															 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
															 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
															 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
															 INNER JOIN src_servicio					 ON src_id = sxc_id_src
															 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
															 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

		WHERE  DATE(fxs_fecha_inicio) >= fechaDesde
				AND DATE(fxs_fecha_inicio) <= fechaHasta
				AND fac_estado=estado
		GROUP BY cdd_numero_origen, fac_id
      
		 ; 
		 #TODOS LOS FILTROS
     ELSEIF(codCli != ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND estado != 5) THEN
        
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																												WHEN  nit = dcc_id_tde THEN dcc_valor
																																										END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
						Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,
						fac_subtotal as total_neto, 
						-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
						fac_total as totalMasIva,
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codCli AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
																																																CASE  
																																																	WHEN   fac_estado = 0 THEN 'Anulada'
																																																	WHEN   fac_estado = 1 THEN 'Pendiente'
																																																	WHEN   fac_estado = 2 THEN 'Pagada'
																																																 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

			WHERE  DATE(fxs_fecha_inicio)  >= fechaDesde
					AND DATE(fxs_fecha_inicio) <= fechaHasta
          AND cli_id = codCli
					AND fac_estado=estado
			GROUP BY cdd_numero_origen, fac_id
		 ; 


ELSEIF(codCli != ' ' AND fechaDesde != ' ' AND fechaHasta != ' ' AND estado = 5) THEN
        
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,CASE  
																																												WHEN  nit = dcc_id_tde THEN dcc_valor
																																										END NIT, cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
						Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo, 
						fac_subtotal as total_neto, 
						-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
						fac_total as totalMasIva,
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codCli AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
																																																CASE  
																																																	WHEN   fac_estado = 0 THEN 'Anulada'
																																																	WHEN   fac_estado = 1 THEN 'Pendiente'
																																																	WHEN   fac_estado = 2 THEN 'Pagada'
																																																 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

			WHERE  DATE(fxs_fecha_inicio)  >= fechaDesde
					AND DATE(fxs_fecha_inicio) <= fechaHasta
          AND cli_id = codCli
			GROUP BY cdd_numero_origen, fac_id
		 ; 
     
    ELSE
    #SOLO CLIENTE
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre, 
								CASE  
								WHEN   nit = dcc_id_tde THEN dcc_valor
								END NIT, cli_registro registro, fac_numero factura, 
							Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio, Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin,
							Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento, src_nombre Producto, fac_tipo,  
							fac_subtotal as total_neto, 
						if( DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') >= DATE_FORMAT(fxs_fecha_inicio, '%Y-%m-%d')
											AND DATE_FORMAT(cdd_fecha_inicio, '%Y-%m-%d') <= DATE_FORMAT(fxs_fecha_fin, '%Y-%m-%d'),
						SUM(cdd_duracion_min), 0.00 ) as minutos_consumidos,
						(SELECT IFNULL(SUM(cdd_duracion_min),0.00) FROM cdd_cdr_detalle 
							INNER JOIN txs_telefonoxservicio as txs ON Replace(TRIM(txs.txs_numero),'-','') = cdd_numero_origen
							INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
							INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
							WHERE cli_id = codCli AND DATE(cdd_fecha_inicio) BETWEEN DATE(fxs_fecha_inicio)
											AND DATE(fxs_fecha_fin) AND cdd_procesado = 1
							)as 'minutos_consumidos_fac',
							-- sum(cdd_costo_total) + (sum(cdd_costo_total)*caf_impuesto) totalMasIva, 
							fac_total as totalMasIva,
																																																	CASE  
																																																		WHEN   fac_estado = 0 THEN 'Anulada'
																																																		WHEN   fac_estado = 1 THEN 'Pendiente'
																																																		WHEN   fac_estado = 2 THEN 'Pagada'
																																																	 END estado, tif_nombre tipo_factura
			FROM cdd_cdr_detalle INNER JOIN txs_telefonoxservicio  ON Replace(TRIM(txs_numero),'-','') = cdd_numero_origen
																 INNER JOIN sxc_servicioxcliente   ON sxc_id = txs_id_sxc
																 INNER JOIN cli_cliente 					 ON cli_id = sxc_id_cli
																 LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
																 INNER JOIN fac_factura 					 ON cli_id = fac_id_cli
																 INNER JOIN fxs_facturaxservicio	 ON fac_id = fxs_id_fac
																 INNER JOIN src_servicio					 ON src_id = sxc_id_src
																 -- INNER JOIN caf_cargo_facturacion  ON caf_id_sxc = sxc_id
																 INNER JOIN tif_tipo_factura			 ON tif_id = cli_id_tif

			WHERE cli_id = codCli
			GROUP BY cdd_numero_origen, fac_id
		 ;
    

    END IF;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_fac_venc
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_fac_venc`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_fac_venc`(cliente INT,servicio INT,fecha_desde VARCHAR(10),fecha_hasta VARCHAR(10))
BEGIN	
			-- sin nada
			IF(cliente = 0 AND servicio = 0 AND fecha_desde = '' AND fecha_hasta = '') THEN
	
			SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente',cli.cli_id, src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					ORDER BY fac.fac_fecha_vencimiento DESC
				;	
			
			-- solo cliente
			ELSEIF(cliente != 0 AND servicio = '' AND fecha_desde = '' AND fecha_hasta='' ) THEN 
				SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente', src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					AND cli.cli_id = cliente
					ORDER BY fac.fac_fecha_vencimiento DESC
					;
		
			-- solo servicio
			ELSEIF(cliente=0 AND servicio != 0 AND fecha_desde = '' AND fecha_hasta='') THEN
					SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente', src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					AND src.src_id = servicio
					ORDER BY fac.fac_fecha_vencimiento DESC
					;

			-- solo fechas
			ELSEIF(cliente = 0 AND servicio = 0 AND fecha_desde!='' AND fecha_hasta!='') THEN
					SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente', src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					AND DATE(fac.fac_fecha_vencimiento) BETWEEN fecha_desde AND fecha_hasta
					ORDER BY fac.fac_fecha_vencimiento DESC
					;
			
			-- cliente y fechas 
			ELSEIF(cliente != 0 AND servicio = 0 AND fecha_desde != '' AND fecha_hasta!='') THEN
					SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente', src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					AND cli.cli_id = cliente
					AND DATE(fac.fac_fecha_vencimiento) BETWEEN fecha_desde AND fecha_hasta
					ORDER BY fac.fac_fecha_vencimiento DESC
					;
			
			-- servicio fechas 
			ELSEIF (cliente=0 AND servicio != 0 AND fecha_desde!='' AND fecha_hasta!='') THEN
					SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente', src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					AND src.src_id = servicio
					AND DATE(fac.fac_fecha_vencimiento) BETWEEN fecha_desde AND fecha_hasta
					ORDER BY fac.fac_fecha_vencimiento DESC
					;

			-- cliente y servicio 
			ELSEIF(cliente!=0 AND servicio!=0 AND fecha_desde = '' AND fecha_hasta = '') THEN
					SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente', src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					AND src.src_id = servicio AND cli.cli_id = cliente
					ORDER BY fac.fac_fecha_vencimiento DESC
					-- AND DATE(fac.fac_fecha_vencimiento) BETWEEN fecha_desde AND fecha_hasta
					;
			-- completo
			ELSEIF(cliente != 0 AND servicio != 0 AND fecha_desde != '' AND fecha_hasta != '') THEN
					SELECT CONCAT(cli.cli_nombre,' ',cli.cli_apellido) as 'cliente', src.src_nombre as 'servicio',
					(SELECT txs.txs_numero FROM txs_telefonoxservicio AS txs WHERE txs.txs_id_sxc = sxc.sxc_id AND txs.txs_principal = 1) 
					as 'numero',
					fac.fac_numero AS 'factura', fac.fac_total as 'total_fac',
					DATE_FORMAT(fac.fac_fecha_vencimiento,'%d-%m-%Y') as 'vencimiento',
					DATEDIFF(DATE(NOW()),DATE(fac.fac_fecha_vencimiento)) AS 'dias_vencido'

					FROM fac_factura AS fac INNER JOIN fxs_facturaxservicio AS fxs

					ON fxs.fxs_id_fac = fac.fac_id INNER JOIN sxc_servicioxcliente AS sxc
					On sxc.sxc_id = fxs.fxs_id_sxc INNER JOIN cli_cliente AS cli 
					ON cli.cli_id = sxc.sxc_id_cli INNER JOIN src_servicio AS src
					ON src.src_id = sxc.sxc_id_src WHERE DATE(fac.fac_fecha_vencimiento) < DATE(NOW())
					AND src.src_id = servicio AND cli.cli_id = cliente
					AND DATE(fac.fac_fecha_vencimiento) BETWEEN fecha_desde AND fecha_hasta
					ORDER BY fac.fac_fecha_vencimiento DESC
					;

			END IF;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_libro_iva
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_libro_iva`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_libro_iva`(IN tipoFac int, IN fechaDesde varchar(10), IN fechaHasta varchar(10))
BEGIN
	DECLARE nit VARCHAR(50);
	DECLARE dui VARCHAR(50);
	SET nit := get_parametro('ID_TIPO_DOCUMENTO_NIT');
	SET dui := get_parametro('ID_TIPO_DOCUMENTO_DUI');
	  IF(tipoFac = NULL OR tipoFac = ' ' AND fechaDesde = ' ' AND fechaHasta = ' ') THEN
				
				SELECT 
                DATE_FORMAT(fac_fecha_fact, '%d-%m-%Y') as 'fecha_fac',fac_numero,tif_abreviacion,B.dcc_valor as NIT,C.dcc_valor AS DUI,cli_registro,
                cli_nombre,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto=0    
                ) AS EXENTAS,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS GRAVADAS,
                 (SELECT 
                D.fac_impuesto
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  DEB_FISCAL,
                0 AS EXPORTACIONES,
                	(SELECT 
                D.fac_total
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  VENTAS_TOTALES,
                0 AS IMP_RETENIDO_1,
                0 AS IMP_RETENIDO_5

					FROM 
                fac_factura A
                INNER JOIN cli_cliente ON cli_id=fac_id_cli
                LEFT JOIN dcc_documento_cliente B ON B.dcc_id_cli=cli_id AND B.dcc_id_tde=nit 
                LEFT JOIN dcc_documento_cliente C ON C.dcc_id_cli=cli_id AND C.dcc_id_tde=dui 
                INNER JOIN cof_correlativo_factura ON cof_id=fac_id_cof
                INNER JOIN sef_serie_factura ON sef_id=cof_id_sef
                INNER JOIN tif_tipo_factura ON tif_id=sef_id_tif
					;

		ELSEIF(tipoFac = ' ' AND fechaDesde != ' ' AND fechaHasta != ' ') THEN
						SELECT 
                DATE_FORMAT(fac_fecha_fact, '%d-%m-%Y') as 'fecha_fac',fac_numero,tif_abreviacion,B.dcc_valor as NIT,C.dcc_valor AS DUI,cli_registro,
                cli_nombre,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto=0    
                ) AS EXENTAS,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS GRAVADAS,
                 (SELECT 
                D.fac_impuesto
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  DEB_FISCAL,
                0 AS EXPORTACIONES,
                	(SELECT 
                D.fac_total
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  VENTAS_TOTALES,
                0 AS IMP_RETENIDO_1,
                0 AS IMP_RETENIDO_5

					FROM 
                fac_factura A
                INNER JOIN cli_cliente ON cli_id=fac_id_cli
                LEFT JOIN dcc_documento_cliente B ON B.dcc_id_cli=cli_id AND B.dcc_id_tde=nit 
                LEFT JOIN dcc_documento_cliente C ON C.dcc_id_cli=cli_id AND C.dcc_id_tde=dui
                INNER JOIN cof_correlativo_factura ON cof_id=fac_id_cof
                INNER JOIN sef_serie_factura ON sef_id=cof_id_sef
                INNER JOIN tif_tipo_factura ON tif_id=sef_id_tif
					WHERE 
                DATE(fac_fecha_fact)>= fechaDesde 
						AND DATE(fac_fecha_fact)<= fechaHasta 
					;

		ELSEIF(tipoFac != ' ' AND fechaDesde != ' ' AND fechaHasta != ' ') THEN

					SELECT 
                DATE_FORMAT(fac_fecha_fact, '%d-%m-%Y') as 'fecha_fac',fac_numero,tif_abreviacion,B.dcc_valor as NIT,C.dcc_valor AS DUI,cli_registro,
                cli_nombre,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto=0    
                ) AS EXENTAS,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS GRAVADAS,
                 (SELECT 
                D.fac_impuesto
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  DEB_FISCAL,
                0 AS EXPORTACIONES,
                	(SELECT 
                D.fac_total
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  VENTAS_TOTALES,
                0 AS IMP_RETENIDO_1,
                0 AS IMP_RETENIDO_5

					FROM 
                fac_factura A
                INNER JOIN cli_cliente ON cli_id=fac_id_cli
                LEFT JOIN dcc_documento_cliente B ON B.dcc_id_cli=cli_id AND B.dcc_id_tde=nit 
                LEFT JOIN dcc_documento_cliente C ON C.dcc_id_cli=cli_id AND C.dcc_id_tde=dui 
                INNER JOIN cof_correlativo_factura ON cof_id=fac_id_cof
                INNER JOIN sef_serie_factura ON sef_id=cof_id_sef
                INNER JOIN tif_tipo_factura ON tif_id=sef_id_tif
					WHERE 
                DATE(fac_fecha_fact)>= fechaDesde 
						AND DATE(fac_fecha_fact)<= fechaHasta 
            AND tif_id=tipoFac
					;
	
		ELSE


					SELECT 
                DATE_FORMAT(fac_fecha_fact, '%d-%m-%Y') as 'fecha_fac',fac_numero,tif_abreviacion,B.dcc_valor as NIT,C.dcc_valor AS DUI,cli_registro,
                cli_nombre,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto=0    
                ) AS EXENTAS,
                (SELECT 
                D.fac_subtotal
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS GRAVADAS,
                (SELECT 
                D.fac_impuesto
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  DEB_FISCAL,
                0 AS EXPORTACIONES,
                	(SELECT 
                D.fac_total
                FROM fac_factura D
                WHERE 
                D.fac_id=A.fac_id
                AND fac_impuesto>0    
                ) AS  VENTAS_TOTALES,
                0 AS IMP_RETENIDO_1,
                0 AS IMP_RETENIDO_5

					FROM 
                fac_factura A
                INNER JOIN cli_cliente ON cli_id=fac_id_cli
                LEFT JOIN dcc_documento_cliente B ON B.dcc_id_cli=cli_id AND B.dcc_id_tde=nit 
                LEFT JOIN dcc_documento_cliente C ON C.dcc_id_cli=cli_id AND C.dcc_id_tde=dui 
                INNER JOIN cof_correlativo_factura ON cof_id=fac_id_cof
                INNER JOIN sef_serie_factura ON sef_id=cof_id_sef
                INNER JOIN tif_tipo_factura ON tif_id=sef_id_tif
					WHERE tif_id=tipoFac
					;	

		END IF;

END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for sp_reporte_pag
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_reporte_pag`;
delimiter ;;
CREATE PROCEDURE `sp_reporte_pag`(IN codCli INT, fechaInicio VARCHAR(10), fechaFin VARCHAR(10))
BEGIN
DECLARE nit VARCHAR(50);
SET nit := get_parametro('ID_TIPO_DOCUMENTO_NIT');

   IF(codCli = NULL OR codCli = ' ' AND fechaInicio = ' ' AND fechaFin = ' ') THEN

			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre, CASE  
																																													WHEN  nit  = dcc_id_tde THEN dcc_valor
																																												 END NIT,
							cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
							Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
							paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, paf_total total_cancelado
							
			FROM cli_cliente LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
											 INNER JOIN fac_factura            ON cli_id = fac_id_cli
											 INNER JOIN fxs_facturaxservicio  ON fac_id = fxs_id_fac
											 INNER  JOIN paf_pago_factura       ON fac_id = paf_id_fac -- CAMBIAR A INNER AL EXISTIR DATOS

		 
			-- INCLUIR LAS FACTURAS DEL PLAN DE PAGOS
 UNION ALL
	SELECT cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,
CASE WHEN  nit  = dcc_id_tde THEN dcc_valor END NIT,
cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, (paf_total*fxp.fxp_porcentaje) total_cancelado
FROM paf_pago_factura paf
INNER JOIN cpl_cuota_plan_pago cpl ON cpl.cpl_id = paf.paf_id_cpl
INNER JOIN plg_plan_pago plg ON plg.plg_id = cpl.cpl_id_plg
INNER JOIN fxp_facturaxplan_pago fxp ON fxp.fxp_id_plg = plg.plg_id
INNER JOIN fac_factura fac ON fac.fac_id = fxp.fxp_id_fac
INNER JOIN fxs_facturaxservicio  ON fac_id = fxs_id_fac
INNER JOIN cli_cliente cli ON cli_id = fac.fac_id_cli
LEFT JOIN dcc_documento_cliente dcc ON dcc.dcc_id_cli = cli.cli_id
WHERE paf_id_fac IS NULL
AND dcc_id_tde = nit  -- Filtro por NIT
;
    ELSEIF(codCli = ' ' AND fechaInicio != ' ' AND fechaFin != ' ') THEN

			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre, CASE  
																																													WHEN   dcc_id_tde = 2 THEN dcc_valor
																																												 END NIT,
							cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
							Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
							paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, paf_total total_cancelado
							
			FROM cli_cliente LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
											 INNER JOIN fac_factura            ON cli_id = fac_id_cli
											 INNER JOIN  fxs_facturaxservicio  ON fac_id = fxs_id_fac
											 INNER JOIN paf_pago_factura       ON fac_id = paf_id_fac -- CAMBIAR A INNER AL EXISTIR DATOS
			WHERE DATE(fxs_fecha_inicio) >= fechaInicio
				AND DATE(fxs_fecha_inicio) <= fechaFin
      
-- INCLUIR LAS FACTURAS DEL PLAN DE PAGOS
 UNION ALL
	SELECT cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,
CASE WHEN  nit  = dcc_id_tde THEN dcc_valor END NIT,
cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, (paf_total*fxp.fxp_porcentaje) total_cancelado
FROM paf_pago_factura paf
INNER JOIN cpl_cuota_plan_pago cpl ON cpl.cpl_id = paf.paf_id_cpl
INNER JOIN plg_plan_pago plg ON plg.plg_id = cpl.cpl_id_plg
INNER JOIN fxp_facturaxplan_pago fxp ON fxp.fxp_id_plg = plg.plg_id
INNER JOIN fac_factura fac ON fac.fac_id = fxp.fxp_id_fac
INNER JOIN fxs_facturaxservicio  ON fac_id = fxs_id_fac
INNER JOIN cli_cliente cli ON cli_id = fac.fac_id_cli
LEFT JOIN dcc_documento_cliente dcc ON dcc.dcc_id_cli = cli.cli_id
WHERE paf_id_fac IS NULL
AND dcc_id_tde = nit  -- Filtro por NIT
AND DATE(fxs_fecha_inicio) >= fechaInicio
AND DATE(fxs_fecha_inicio) <= fechaFin				
;

     ELSEIF(codCli != ' ' AND fechaInicio != ' ' AND fechaFin != ' ') THEN
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre, CASE  
																																													WHEN   dcc_id_tde = 2 THEN dcc_valor
																																												 END NIT,
							cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
							Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
							paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, paf_total total_cancelado
							
			FROM cli_cliente LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
											 INNER JOIN fac_factura            ON cli_id = fac_id_cli
											 INNER JOIN  fxs_facturaxservicio  ON fac_id = fxs_id_fac
											 INNER JOIN paf_pago_factura       ON fac_id = paf_id_fac -- CAMBIAR A INNER AL EXISTIR DATOS
			WHERE cli_id IN (codCli)
				AND DATE(fxs_fecha_inicio) >= fechaInicio
				AND DATE(fxs_fecha_inicio) <= fechaFin
		
-- INCLUIR LAS FACTURAS DEL PLAN DE PAGOS
 UNION ALL
	SELECT cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,
CASE WHEN  nit  = dcc_id_tde THEN dcc_valor END NIT,
cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, (paf_total*fxp.fxp_porcentaje) total_cancelado
FROM paf_pago_factura paf
INNER JOIN cpl_cuota_plan_pago cpl ON cpl.cpl_id = paf.paf_id_cpl
INNER JOIN plg_plan_pago plg ON plg.plg_id = cpl.cpl_id_plg
INNER JOIN fxp_facturaxplan_pago fxp ON fxp.fxp_id_plg = plg.plg_id
INNER JOIN fac_factura fac ON fac.fac_id = fxp.fxp_id_fac
INNER JOIN fxs_facturaxservicio  ON fac_id = fxs_id_fac
INNER JOIN cli_cliente cli ON cli_id = fac.fac_id_cli
LEFT JOIN dcc_documento_cliente dcc ON dcc.dcc_id_cli = cli.cli_id
WHERE cli_id IN (codCli)
AND paf_id_fac IS NULL
AND dcc_id_tde = nit  -- Filtro por NIT
AND DATE(fxs_fecha_inicio) >= fechaInicio
AND DATE(fxs_fecha_inicio) <= fechaFin				
;
     
    ELSE
			SELECT  cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre, CASE  
																																													WHEN   dcc_id_tde = 2 THEN dcc_valor
																																												 END NIT,
							cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
							Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
							paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, paf_total total_cancelado
							
			FROM cli_cliente LEFT  JOIN dcc_documento_cliente  ON dcc_id_cli = cli_id
											 INNER JOIN fac_factura            ON cli_id = fac_id_cli
											 INNER JOIN  fxs_facturaxservicio  ON fac_id = fxs_id_fac
											 INNER JOIN paf_pago_factura       ON fac_id = paf_id_fac -- CAMBIAR A INNER AL EXISTIR DATOS
			WHERE cli_id IN (codCli)
    
-- INCLUIR LAS FACTURAS DEL PLAN DE PAGOS
 UNION ALL
	SELECT cli_id codigo_cliente, CONCAT_WS(' ',cli_nombre, cli_apellido) nombre,
CASE WHEN  nit  = dcc_id_tde THEN dcc_valor END NIT,
cli_registro registro, fac_numero factura, Date_format(fxs_fecha_inicio, '%d-%m-%Y') fecha_inicio_factura,
Date_format(fxs_fecha_fin, '%d-%m-%Y') fecha_fin_factura, Date_format(fac_fecha_vencimiento, '%d-%m-%Y') fecha_vencimiento,
paf_numero correlativo_recibo, paf_fecha_pag fecha_pago, (paf_total*fxp.fxp_porcentaje) total_cancelado
FROM paf_pago_factura paf
INNER JOIN cpl_cuota_plan_pago cpl ON cpl.cpl_id = paf.paf_id_cpl
INNER JOIN plg_plan_pago plg ON plg.plg_id = cpl.cpl_id_plg
INNER JOIN fxp_facturaxplan_pago fxp ON fxp.fxp_id_plg = plg.plg_id
INNER JOIN fac_factura fac ON fac.fac_id = fxp.fxp_id_fac
INNER JOIN fxs_facturaxservicio  ON fac_id = fxs_id_fac
INNER JOIN cli_cliente cli ON cli_id = fac.fac_id_cli
LEFT JOIN dcc_documento_cliente dcc ON dcc.dcc_id_cli = cli.cli_id
WHERE cli_id IN (codCli)
AND paf_id_fac IS NULL
AND dcc_id_tde = nit  -- Filtro por NIT
;

    END IF;

END
;;
delimiter ;

