<?php 

class covensol_cxc_cuentasxcobrar{

	function covensol_cxc_cuentasxcobrar($propiedades=array()){		
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			// Function: correspondencia
			// Access: public (covensol_cxc_cuentasxcobrar)
			// Description: Constructor de la Clase
			// Creado Por: Lic. Edgar A. Quintero
			// Fecha Creación: 27/01/2009 								
			// Fecha Última Modificación : 
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			global $ruta;
			
			if(!$propiedades['habilitar_json']){$propiedades['habilitar_json']='si';}
			if($ruta==''){$ruta="../";}
			$this->ruta=$ruta;
			require_once($ruta."shared/class_folder/sigesp_include_covensol.php");
			$io_include=new sigesp_include_covensol();
			$io_conexion=$io_include->uf_conectar();			
			require_once($ruta."shared/class_folder/class_sql_covensol.php");
			$this->io_sql=new class_sql_covensol($io_conexion);	
						
			require_once($ruta."shared/class_folder/class_mensajes.php");
			$this->io_mensajes=new class_mensajes();
			require_once($ruta."shared/class_folder/sigesp_conexiones.php");
			$this->io_conexiones=new conexiones();
			require_once($ruta."shared/class_folder/class_funciones_db.php");
			$this->fun = new class_funciones_db($io_conexion,1);
			//require_once($ruta."arc/clases/arc_c_archivos.php");
			//$this->archivo = new archivos_doc;	
			require_once($ruta."shared/class_folder/class_funciones.php");
			$this->io_funciones=new class_funciones();		
			require_once($ruta."shared/class_folder/sigesp_c_seguridad.php");
			$this->io_seguridad= new sigesp_c_seguridad();				
			$this->ls_codemp=$_SESSION["la_empresa"]["codemp"];
			$this->codemp=$_SESSION["la_empresa"]["codemp"];
			require_once($ruta."shared/class_folder/class_numero_a_letra.php");
			$this->numalet	  = new class_numero_a_letra();
			
			$this->AnoPeriodoAct = substr($_SESSION["la_empresa"]['periodo'],0,4);
			
			$this->postgres_ilike = '';
			if($propiedades['habilitar_json']=='si'){
				require_once($ruta.'shared/class_folder/JSON.php');
				$this->json = new JSON();
			}
			if($_SESSION["ls_gestor"] == 'POSTGRES'){$this->postgres_ilike = 'I';}
			$this->extraer_configuracion();
			$param['codsis'] = 'COR';
			$param['seccion'] = 'CONFIG';
			$param['entry'] = 'NOMINAS';
			$this->nominas = $this->select_config($param);			
			
			$this->inicio_numerodoc=1;
			$this->inicio_numerofact=1;
			$this->inicio_numerocot=1;
			$this->inicio_numeroped=1;
			
			require_once($ruta."shared/class_folder/class_fecha.php");		
			$this->io_fecha= new class_fecha();	
			require_once($ruta."shared/class_folder/class_sigesp_int.php");
			require_once($ruta."shared/class_folder/class_sigesp_int_int.php");
			require_once($ruta."shared/class_folder/class_sigesp_int_spg.php");
			require_once($ruta."shared/class_folder/class_sigesp_int_scg.php");
			require_once($ruta."shared/class_folder/class_sigesp_int_spi.php");
			$this->io_sigesp_int=new class_sigesp_int_int();
			$this->io_sigesp_int_spg=new class_sigesp_int_spg();
			$this->io_sigesp_int_scg=new class_sigesp_int_scg();	
			require_once($ruta."shared/class_folder/sigesp_c_generar_consecutivo.php");
			$this->io_keygen= new sigesp_c_generar_consecutivo();
			
			require_once($ruta."spg/sigesp_spg_c_comprobante.php");
			$this->classcmp=new sigesp_spg_c_comprobante();
			$this->classcmp->DisableTrans = $this->io_sql->DisableTrans;
			
			require_once($ruta."spi/sigesp_spi_c_comprobante.php");
			$this->cmpspi=new sigesp_spi_c_comprobante();			
						
			require_once($ruta."spi/class_folder/sigesp_spi_c_reprocesar_spi.php");
			$this->SaldosSPI = new sigesp_spi_c_reprocesar_spi();
			
			require_once($ruta."spg/class_folder/sigesp_spg_c_reprocesar_spg.php");
			$this->SaldosSPG = new sigesp_spg_c_reprocesar_spg();
			
			$this->estpreing =  $_SESSION["la_empresa"]["estpreing"];
						
			$this->EsAjax = 0;
			
			if($propiedades['RepExcel']){
				require_once($ruta.'shared/PHPExcel/Classes/PHPExcelCovensol.php');
				$this->PHPExcel = new PHPExcelCovensol();
				$this->objWriter = PHPExcel_IOFactory::createWriter($this->PHPExcel, 'Excel5');
			}
			
			require_once($ruta."shared/class_folder/grid_covensol.php");
			$this->Grid = new GridCovensol();
			
	}


	function ValidarSesion($opciones = array()){
	//==========================================================================================================================
	//	Function:      ValidarSesion
	//  Elaborado por: Lic. Edgar A. Quintero U.
	//	Returns:	   
	//	Description:   Ejecuta la acción en caso de no haber obtenido las credenciales necesarias.
	//==========================================================================================================================
		if(!array_key_exists("la_logusr",$_SESSION)){
			echo '<script type="text/javascript">';			
			echo "if(window.opener!=null){opener.location.href='".$this->ruta."covensol_login.php'; window.close();}";
			echo "else{location.href='".$this->ruta."covensol_login.php';}";		
			echo '</script>';		
			return false;
		}
		return true;	
	}
	
   function cargar_seguridad($as_sistema,$as_ventanas)
   {
		$ls_empresa=$_SESSION["la_empresa"]["codemp"];
		$ls_logusr=$_SESSION["la_logusr"];
		$this->seguridad["empresa"]=$ls_empresa;
		$this->seguridad["logusr"]=$ls_logusr;
		$this->seguridad["sistema"]=$as_sistema;
		$this->seguridad["ventanas"]=$as_ventanas;
		$this->permisos="";
		$this->la_permisos = array();
		$this->la_permisos["leer"]="";
		$this->la_permisos["incluir"]="";
		$this->la_permisos["cambiar"]="";
		$this->la_permisos["eliminar"]="";
		$this->la_permisos["imprimir"]="";
		$this->la_permisos["anular"]="";
		$this->la_permisos["ejecutar"]="";
		if (array_key_exists("permisos",$_POST)||($ls_logusr=="PSEGIS"))
		{	
			if($ls_logusr=="PSEGIS")
			{
				$this->permisos="1";
				$this->la_permisos=$this->io_seguridad->uf_sss_load_permisossigesp();
			}
			else
			{
				$this->permisos=$_POST["permisos"];
				$this->la_permisos["leer"]=$_POST["leer"];
				$this->la_permisos["incluir"]=$_POST["incluir"];
				$this->la_permisos["cambiar"]=$_POST["cambiar"];
				$this->la_permisos["eliminar"]=$_POST["eliminar"];
				$this->la_permisos["imprimir"]=$_POST["imprimir"];
				$this->la_permisos["anular"]=$_POST["anular"];
				$this->la_permisos["ejecutar"]=$_POST["ejecutar"];
			}
		}
		else
		{
			$this->permisos=$this->io_seguridad->uf_sss_load_permisos($ls_empresa,$ls_logusr,$as_sistema,$as_ventanas,$this->la_permisos);
			if($this->permisos===false){
				echo '<script type="text/javascript">';			
				//echo "if(window.opener!=null){opener.location.href='".$this->ruta."sigesp_inicio_sesion.php'; window.close();}";
				echo "if(window.opener!=null){window.close();}";
				echo "else{location.href='".$this->ruta."index_covensol.php';}";		
				echo '</script>';		
				return false;
			}
		}
		
   }// end function cargar_seguridad
   
   function guardar_seguridad($param=array()){
	   $resp = $this->io_seguridad->uf_sss_insert_eventos_ventana( $this->seguridad["empresa"],
																   $this->seguridad["sistema"],
																   $this->seguridad['evento'],
																   $this->seguridad["logusr"],
																   $this->seguridad["ventanas"],
	   															   $this->seguridad['descripcion']);
	   return true;	   
   }
   
   function imprimir_permisos($as_permisos,$aa_permisos,$as_logusr,$as_accion)
   {
		if (($as_permisos)||($as_logusr=="PSEGIS"))
		{
			print("<input type=hidden name=permisos id=permisos value='$as_permisos'>");
			print("<input type=hidden name=leer id=leer value='$aa_permisos[leer]'>");
			print("<input type=hidden name=incluir id=incluir value='$aa_permisos[incluir]'>");
			print("<input type=hidden name=cambiar id=cambiar value='$aa_permisos[cambiar]'>");
			print("<input type=hidden name=eliminar id=eliminar value='$aa_permisos[eliminar]'>");
			print("<input type=hidden name=imprimir id=imprimir value='$aa_permisos[imprimir]'>");
			print("<input type=hidden name=anular id=anular value='$aa_permisos[anular]'>");
			print("<input type=hidden name=ejecutar id=ejecutar value='$aa_permisos[ejecutar]'>");
			print("<input type=hidden name=administrador id=administrador value='$aa_permisos[administrador]'>");
			print("<input type=hidden name=usuadmin id=usuadmin value='$aa_permisos[administrador]'>");
		}
		else
		{
			print("<script language=JavaScript>");
			print("".$as_accion."");
			print("</script>");
		}
   }// end function uf_print_permisos
	
	function CerrarVentana(){
		echo "<script language=JavaScript>";
		echo "close();";		
		echo "</script>";
		exit();
		return true;
	}
	
	function MensajeReporte($msj){
		echo "<script language=JavaScript>";
		echo "alert('".$msj."');";
		echo "</script>";		
	}
	
	function FormatLonCodEstPro($datos=array()){
	           	
				if($datos['codestpro1']=='-------------------------'){$this->Estructura="S/E"; return $datos;}
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro1'];
				$datos['codestpro1']=substr($datos['codestpro1'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro1']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro2'];
				$datos['codestpro2']=substr($datos['codestpro2'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro2']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro3'];
				$datos['codestpro3']=substr($datos['codestpro3'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro3']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro4'];
				$datos['codestpro4']=substr($datos['codestpro4'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro4']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro5'];
				$datos['codestpro5']=substr($datos['codestpro5'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro5']);
				
				$this->Estructura = $datos['codestpro1']."-".$datos['codestpro3']."-".$datos['codestpro3'];
				
				return $datos;
   }
	
	
	function obtSegCxc($prop=array()){
					
		if(!$this->codintper){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar la seguridad de la sucursal. 				           			    
						<br><br><b>METODO:</b> obtSegCxc ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		$ls_sql="SELECT codintper, enabled
				  FROM sss_permisos_internos 
				 WHERE codemp='".$this->ls_codemp."' 
				   AND codusu='".$_SESSION["la_logusr"]."' 
				   AND codsis='CXC'
				   AND codintper='".$this->codintper."' ";
						
		$this->RsCxcSeg=$this->io_sql->select($ls_sql);
				
		if($this->RsCxcSeg===false)
		{
			$metodo = 'obtSegCxc';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		$this->CxcSegEnable = $this->RsCxcSeg->RecordCount()?1:0;
		
		return $this->CxcSegEnable;
	}
	
	function GenerarArchivoExcel($nomarch){
		header('Content-Type: application/vnd.ms-excel');
		header('Content-Disposition: attachment;filename="'.$nomarch.'.xls"');
		header('Cache-Control: max-age=0');
		$this->objWriter->save('php://output');
		exit();
	}
	
	function NroCmpFactura($datos=array()){
		if(!$this->numfact){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de factura para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpFactura ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->DatosFact['codsuc']){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código de la sucursal para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpFactura ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$cmp = "F-".str_pad($this->DatosFact['codsuc'], 3, "0", STR_PAD_LEFT).'-'.str_pad((integer)$this->numfact, 13, "0", STR_PAD_LEFT);
		
		return $cmp;
	}
	
	function NroCmpNC($datos=array()){
		if(!$this->numfact){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de factura para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpNC ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->DatosFact['codsuc']){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código de la sucursal para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpNC ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->numdoc){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de documento de NC para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpNC ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$cmp = "NC-".str_pad($this->DatosFact['codsuc'], 3, "0", STR_PAD_LEFT).'-'.str_pad((integer)$this->numdoc, 13, "0", STR_PAD_LEFT);
		
		return $cmp;
	}
	
	function NroCmpCobro($datos=array()){
		if(!(integer)$this->numfact){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de factura para crear el número de comprobante de cobro. 				           			    
				<br><b>METODO:</b> NroCmpCobro ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->codsuccob){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código de la sucursal de cobro para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpCobro ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->codsucfact){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código de la sucursal de la factura para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpCobro ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->nromovcob){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número movimiento de cobro de factura para crear el número de comprobante de cobro. 				           			    
				<br><b>METODO:</b> NroCmpCobro ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->fecmovcob){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la fecha del movimiento de cobro de factura para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpCobro ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		//$cmp = "C-".str_pad($this->codsuccob, 3, "0", STR_PAD_LEFT).'-'.str_pad($this->codsucfact, 3, "0", STR_PAD_LEFT).'-'.str_pad((integer)$this->numfact, 10, "0", STR_PAD_LEFT).'-'.str_pad($this->nromovcob, 2, "0", STR_PAD_LEFT);
		$cmp = "C-".str_pad($this->codsucfact, 3, "0", STR_PAD_LEFT).'-'.str_pad((integer)$this->numfact, 10, "0", STR_PAD_LEFT).'-'.str_pad($this->nromovcob, 2, "0", STR_PAD_LEFT);
		return $cmp;
	}
	
	function NroCmpRet($datos=array()){
	
		if(!(integer)$this->numfact){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de factura para crear el número de comprobante de Retención. 				           			    
				<br><b>METODO:</b> NroCmpRet ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
				
		if(!$this->fecconsig){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la fecha de consignación del comprobante para crear el número de comprobante de Retención. 				           			    
				<br><b>METODO:</b> NroCmpRet ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->numretdoc){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de retención para crear el número de comprobante de Retención. 				           			    
				<br><b>METODO:</b> NroCmpRet ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$datos['codsuc']){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código de la sucursal para crear el número de comprobante. 				           			    
				<br><b>METODO:</b> NroCmpRet ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$cmp = "R-".str_pad($datos['codsuc'], 3, "0", STR_PAD_LEFT).'-'.str_pad((integer)$this->numfact, 10, "0", STR_PAD_LEFT).'-'.str_pad($this->numretdoc, 2, "0", STR_PAD_LEFT);
		
		return $cmp;
	}
	
	function NroCmpCobroAnt($datos=array()){
		
		if(!$this->idant){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el id del anticipo para crear el número de comprobante de cobro. 				           			    
				<br><b>METODO:</b> NroCmpCobroAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$this->nromovcob){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número movimiento de cobro del anticipo para crear el número de comprobante de cobro. 				           			    
				<br><b>METODO:</b> NroCmpCobroAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$cmp = "ANT-".str_pad($this->codsuc, 3, "0", STR_PAD_LEFT).'-'.str_pad((integer)$this->idant, 7, "0", STR_PAD_LEFT).'-'.str_pad($this->nromovcob, 2, "0", STR_PAD_LEFT);
		
		return $cmp;
	}
	
	
	
	function ExisteCuentaScg($datos=array()){
		//echo "ok".$this->numfact.'-'.$this->codfact.'-'.$this->procede.'-'.$this->fechacomp.'-'.$datos['sc_cuenta'].'-'.$datos['debhab'];
		$this->nromovcob = $this->nromovcob?$this->nromovcob:0;
		$this->numretdoc = $this->numretdoc?$this->numretdoc:0;
						
		$metodo = 'ExisteCuentaScg';
				
		switch($this->procede){
				
				case 'CXCANU':
				case 'CXCFAC':
				        $id	= $this->id_fact;
					    break;
						
				case 'CXCANC':
				case 'CXCRCB':
				        $id	= $this->id_doc;
					    break;
						
				case 'CXCANR':
				case 'CXCRET':
				       $id	= $this->id_doc;
					   if(!$this->numretdoc){		   		
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el numero de retención de la factura para verificar el detalle contable				           			    
										<br><b>METODO:</b> ExisteCuentaScg ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
					   }
					    break;
						
				case 'CXCACR':
				case 'CXCCRE':
				        $id	= $this->id_doc;
					    break;
			
		}
		
		$ls_sql="SELECT * FROM cxc_dt_scg 
				 WHERE codemp='".$this->ls_codemp."' 
				    AND id_doc='".$id."'					
					AND procede='".$this->procede."'
					AND comprobante='".$this->comprobante."'
					AND fecha='".$this->fechacomp."'
					AND sc_cuenta='".$datos['sc_cuenta']."'
					AND debhab='".$datos['debhab']."'
					AND cod_pro='----------'
					AND ced_bene='".$this->ced_bene."'
					AND nromovcob='".$this->nromovcob."'
					AND numretdoc='".$this->numretdoc."'
					AND tipo_destino='B'";
		//echo $ls_sql.'<br>';
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
		 
	}
	
	
	function ConsultaDetContable($datos=array()){
		
		$metodo = 'ConsultaDetContable';
		$sqlcriterio="";
		
		$numretdoc = $this->numretdoc?$this->numretdoc:0;
		$nromovcob = $this->nromovcob?$this->nromovcob:0;
		
		$procede = $this->procede;
		
		switch($this->procede){
				
				case 'CXCANU':
				case 'CXCFAC':
				        $procede = 'CXCFAC';
						$iddoc =$this->id_fact;
						$nromovcob = 0;
						$numretdoc = 0;
					    break;
						
				case 'CXCANC':
				case 'CXCRCB':
				        $procede = 'CXCRCB';						
						$iddoc =$this->id_doc;
						$numretdoc = 0;
						if(!$this->id_doc or !$this->comprobante){				
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar el detalle contable. 				           			    
										<br><b>METODO:</b> ConsultaDetContable ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
						}
					    break;
						
				case 'CXCANR':
				case 'CXCRET':
				        $procede = 'CXCRET';
						$iddoc	= $this->id_doc;
						if(!$this->id_doc or !$this->comprobante){				
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar el detalle contable. 				           			    
										<br><b>METODO:</b> ConsultaDetContable ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
					   }
					   if(!$this->numretdoc){		   		
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el numero de retención de la factura para consultar el detalle contable				           			    
										<br><b>METODO:</b> ConsultaDetContable ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
					   }
					    break;
						
				case 'CXCACR':
				case 'CXCCRE':
				        $procede = 'CXCCRE';
						$iddoc =$this->id_doc;
						$nromovcob = 0;
						$numretdoc = 0;
					    break;			
		}
				
		
		
		$ls_sql="SELECT d.*, c.denominacion
		         FROM cxc_dt_scg d
				 LEFT JOIN scg_cuentas c ON d.sc_cuenta=c.sc_cuenta 
		         WHERE d.codemp='".$this->ls_codemp."'
				   AND d.id_doc='".$iddoc."'
				   AND d.procede='".$procede."'
				   AND d.comprobante='".$this->comprobante."'
				   AND d.nromovcob='".$nromovcob."'
				   AND d.numretdoc='".$numretdoc."'
				   ".$sqlcriterio."
				   ORDER BY d.debhab,d.sc_cuenta
				 ";
				 
		//echo $ls_sql.'<br>';
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		//echo $rs_data->RecordCount().'<br><br>';
		return $rs_data;
		
	}
	
	function ConsultaDetSPI($datos=array()){
		
		$criteriosql="";
		$metodo = 'ConsultaDetSPI';
		
		$numretdoc = $this->numretdoc?$this->numretdoc:0;
		$nromovcob = $this->nromovcob?$this->nromovcob:0;		
		$procede = $this->procede;
				
		switch($this->procede){
			
				case 'CXCANU':
				case 'CXCFAC':
						$procede = 'CXCFAC';
						$iddoc =$this->id_fact;
						$nromovcob = 0;
						$numretdoc = 0;		
						break;
						
				case 'CXCANC':
				case 'CXCRCB':
						$procede = 'CXCRCB';
						$iddoc =$this->id_doc;				
						$numretdoc = 0;		
						break;
						
				case 'CXCANR':
				case 'CXCRET':
					    $procede = 'CXCRET';
						$iddoc =$this->id_fact;	
					    if(!$this->id_fact or !$this->comprobante)
					    {				
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar el detalle de ingreso. 				           			    
										<br><b>METODO:</b> ConsultaDetSPI ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
					    }
					    if(!$this->numretdoc){		   		
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el numero de retención de la factura para consultar el detalle ingreso				           			    
										<br><b>METODO:</b> ConsultaDetSPI ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
					    }
						break;
						
				case 'CXCACR':
				case 'CXCCRE':
				        $procede = 'CXCCRE';
						$iddoc =$this->id_doc;
						$nromovcob = 0;
						$numretdoc = 0; 
						break;
		}
		
		
		$ls_sql="SELECT d.*, c.denominacion
		         FROM cxc_dt_spi d
				 LEFT JOIN spi_cuentas c ON c.spi_cuenta=d.spi_cuenta
		         WHERE d.codemp='".$this->ls_codemp."'
				   AND d.id_doc='".$iddoc."'
				   AND d.nromovcob='".$nromovcob."'
				   AND d.numretdoc='".$numretdoc."'
				   AND d.procede='".$procede."'
				   AND d.comprobante='".$this->comprobante."'
				   ".$criteriosql."
				 ORDER BY d.spi_cuenta
				    ";
				 
		//echo $ls_sql.'<br>';
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
				
		return $rs_data;
		
		
	}
	
	function ConsultaDetPresup($datos=array()){
		
		$metodo = 'ConsultaDetPresup';
		
		$procede = $this->procede;
		
		switch($this->procede){
				case 'CXCANU':
				        $procede = 'CXCFAC';
						$iddoc =$this->id_fact;
					    break;
						
				case 'CXCANC':
				        $procede = 'CXCRCB';
					    break;
						
				case 'CXCANR':
				        $procede = 'CXCRET';
						$iddoc =$this->id_doc;
					    break;
		}
		
		
		$ls_sql="SELECT * 
		         FROM cxc_dt_spg 
		         WHERE codemp='".$this->ls_codemp."'
				   AND id_fact='".$iddoc."'
				   AND procede='".$procede."'
				   AND comprobante='".$this->comprobante."' ";
				 
	
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
		
		
	}
	
	function VerificaCuentaSCG($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: VerificaCuentaSCG
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de verificar que una Cuenta Contable Exista en el Plan de Cuentas
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 22/01/2013							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		$ls_sql="SELECT sc_cuenta
				  FROM scg_cuentas
				 WHERE sc_cuenta='".$datos['sc_cuenta']."'";				 
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$metodo = 'VerificaCuentaSCG';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return false;				
		}
		
		if(!$rs_data->RecordCount()){
			$this->io_conexiones->mensajes_ajax("<b>ERROR:</b> La Cuenta contable ".$datos['sc_cuenta']." no existe en el Plan de Cuentas !");
			return false;
		}
		
		return true;
				
	}
	
	function InsertDetCont($datos=array()){
		
		$metodo = 'InsertDetCont';
		$this->numretdoc = $this->numretdoc?$this->numretdoc:0;	
		$this->nromovcob = $this->nromovcob?$this->nromovcob:0;		
		
		switch($this->procede){
				
				case 'CXCANU':
				case 'CXCFAC':
				        if(!$this->id_fact or !$this->numfact or !$this->codfact or !$this->procede or !$this->fechacomp or !$datos['sc_cuenta'] or !$datos['debhab'])
						{				
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle contable de la factura. 				           			    
										<br><b>METODO:</b> InsertDetCont ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
						}		
				        $id=$this->id_fact;
						$DatosSql=$this->id_fact."','".
								  $this->numfact."','".
								  $this->codfact."',0,'";
						$tipdoc='FACT';
					    break;
						
				case 'CXCANC':
				case 'CXCRCB':
				        if(!$this->id_doc or !$this->procede or !$this->tipdoc or !$this->fechacomp or !$datos['sc_cuenta'] or !$datos['debhab']){		   		
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle contable del movimiento de cobro				           			    
										<br><b>METODO:</b> InsertDetCont ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
						}
				        $id=$this->id_doc;
						$DatosSql=$this->id_doc."','".
								  $this->numfact."','".
								  $this->codfact."',0,'";
						$tipdoc=$this->tipdoc;
					    break;
						
				case 'CXCANR':
				case 'CXCRET':
				        if(!$this->numretdoc){		   		
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el numero de retención de la factura para insertar el detalle contable				           			    
										<br><b>METODO:</b> InsertDetCont ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
						}
				        $id=$this->id_doc;
						$DatosSql=$this->id_doc."','".
								  $this->numfact."','".
								  $this->codfact."','".
								  $this->numretdoc."','";
						$tipdoc='RET';
					    break;
						
				case 'CXCACR':
				case 'CXCCRE':
				         if(!$this->id_doc or !$this->numdoc or !$this->coddoc or !$this->procede or !$this->fechacomp or !$datos['sc_cuenta'] or !$datos['debhab'])
						 {				
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle contable del documento. 				           			    
										<br><b>METODO:</b> InsertDetCont ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
						 }		
				         $id=$this->id_doc;
						 $DatosSql=$this->id_doc."','".
								   $this->numdoc."','".
								   $this->coddoc."',0,'";
						$tipdoc='NC';
					    break;
			
		}
		
		$rsexiste = $this->ExisteCuentaScg($datos);
		if($rsexiste===false){return false;}
		
		$ls_sql="INSERT INTO cxc_dt_scg (codemp, tipdoc,id_doc, numfact, codfact, numretdoc, procede, comprobante, fecha, 
										 sc_cuenta, debhab, cod_pro, ced_bene, tipo_destino, descripcion,nromovcob, 
										 monto)
					 VALUES ('".$this->ls_codemp."','".
					 			$tipdoc."','".
								$DatosSql.								
								$this->procede."','".
								$this->comprobante."','".
								$this->fechacomp."','".								
								$datos['sc_cuenta']."','".
								$datos['debhab']."',
								'----------','".
								$this->ced_bene."','B','".
								$this->descripcion."','".
								$this->nromovcob."',".
								$datos["monto"].")";
		
		if($rsexiste->RecordCount()){
		
			$ls_sql="UPDATE cxc_dt_scg SET monto = monto + ".$datos["monto"]." 
					 WHERE codemp='".$this->ls_codemp."' 
						AND id_doc='".$id."'
						AND numretdoc='".$this->numretdoc."'
						AND nromovcob='".$this->nromovcob."'
						AND procede='".$this->procede."'
						AND comprobante='".$this->comprobante."'
						AND fecha='".$this->fechacomp."'
						AND sc_cuenta='".$datos['sc_cuenta']."'
						AND debhab='".$datos['debhab']."'
						AND cod_pro='----------'
						AND ced_bene='".$this->ced_bene."'
						AND tipo_destino='B'";
		}
		//echo $ls_sql.'<br>';
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return true;
		 
	}
	
	function InsertDetSpi($datos=array()){
		
		$metodo = 'InsertDetSpi';
		if( !$this->procede or 
			!$this->comprobante or 
			!$this->fechacomp or 
			!$datos['spi_cuenta'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle presupuestario de la factura. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
			
		$nromovcob = $this->nromovcob?$this->nromovcob:0;
		$numretdoc = $this->numretdoc?$this->numretdoc:0;		
		
		switch($this->procede){
				case 'CXCANU':
				case 'CXCFAC':
				        if( !$this->id_fact or 
						    !$this->numfact or 
							!$this->codfact or 
							!$this->procede or 
							!$this->comprobante or 
							!$this->fechacomp or 
							!$datos['spi_cuenta'])
						{				
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle presupuestario de la factura. 				           			    
										<br><b>METODO:</b> InsertDetSpi ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
						}		
				        $DatosSql=$this->id_fact."','".
								  $this->numfact."','".
								  $this->codfact."','";
						$nromovcob=0;
						$numretdoc=0;
						$tipdoc='FACT';	
					    break;
						
				case 'CXCANC':
				case 'CXCRCB':
				        $DatosSql=$this->id_doc."','".
								  $this->numfact."','".
								  $this->codfact."','";
						$numretdoc=0;
						$tipdoc='FACT';
					    break;
						
				case 'CXCANR':
				case 'CXCRET':
				        $DatosSql=$this->id_doc."','".
								  $this->numfact."','".
								  $this->codfact."','";
						$tipdoc='RET';
					    break;
						
				case 'CXCACR':
				case 'CXCCRE':
				        if( !$this->id_doc or 
						    !$this->numdoc or 
							!$this->coddoc or 
							!$this->procede or 
							!$this->comprobante or 
							!$this->fechacomp or 
							!$datos['spi_cuenta'])
						{				
							$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle presupuestario del Documento. 				           			    
										<br><b>METODO:</b> InsertDetSpi ';
							$this->io_conexiones->mensajes_ajax($mensaje);																	
							return false;
						}		
				        $DatosSql=$this->id_doc."','".
								  $this->numdoc."','".
								  $this->coddoc."','";
						$nromovcob=0;
						$numretdoc=0;
						$tipdoc='NC';
					    break;
			
		}
		
			
		$ls_sql="INSERT INTO cxc_dt_spi(
										codemp, procede,comprobante, tipdoc, id_doc, numfact, codfact, spi_cuenta, operacion, cod_pro, 
										ced_bene, tipo_destino, descripcion, monto,
										fecha, codestpro1, codestpro2, codestpro3, 
										codestpro4, codestpro5, estcla,nromovcob,numretdoc)
				     VALUES ('".$this->ls_codemp."','".
					            $this->procede."','".
								$this->comprobante."','".
								$tipdoc."','".
					            $DatosSql.
								$datos['spi_cuenta']."','".								
								$this->operacion."',".
								"'----------','".
								$this->ced_bene."','".								
								$this->tipoProvBen."','".
								$this->descripcion."','".
								$datos["monto"]."','".
								$this->fechacomp."','".
								$datos["codestpro1"]."','".
								$datos["codestpro2"]."','".
								$datos["codestpro3"]."','".
								$datos["codestpro4"]."','".
								$datos["codestpro5"]."','".
								$datos["estcla"]."','".
								$nromovcob."','".
								$numretdoc."'".
								")";
		//echo $ls_sql.'<br><br>';
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return true;
		
	}
	
	function EliminaDetSPI($datos=array()){
		$criteriosql="";
		$metodo = 'EliminaDetSPI';
		
		
		$ls_sql="SELECT FROM cxc_dt_spi
				 LEFT JOIN spi_cuentas c ON c.spi_cuenta=spi_cuenta
		         WHERE codemp='".$this->ls_codemp."'
				   AND id_doc='".$iddoc."'
				   AND procede='".$this->procede."'
				   AND comprobante='".$this->comprobante."'
				   ".$criteriosql;
				 
		//echo $ls_sql.'<br>';
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
		
	}
	
	function EliminaDetContable($datos=array()){
		
		$metodo = 'EliminaDetContable';
		$sqlcriterio="";
			
				
		$ls_sql="DELETE
		         FROM cxc_dt_scg 			 
		         WHERE codemp='".$this->ls_codemp."'
				   AND id_doc='".$iddoc."'
				   AND procede='".$this->procede."'
				   AND comprobante='".$this->comprobante."'
				   ".$sqlcriterio;
				 
		//echo $ls_sql.'<br>';
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
		
	}
	
	function GenerarCmp($datos=array()){
	
		//INSERTA LA CABECERA DEL COMPROBANTE		
		$resp = $this->GenerarCabeceraCmp($datos);
		if($resp===false){return false;}		
			
		//INSERTA EL DETALLE PRESUPUESTARIO DE INGRESO DEL COMPROBANTE		
		$resp = $this->GenerarCmpSpi($datos);
		if($resp===false){return false;}		
		
		//INSERTA EL DETALLE CONTABLE DE LA RECEPCIÓN DE DOCUMENTO POR EL DEBE		
		$resp = $this->GenerarCmpScg($datos);
		if($resp===false){return false;}	
		
	}
	
	function GenerarCabeceraCmp($datos=array()){
		
		$metodo='GenerarCabeceraCmp';
		$ls_codemp=$this->ls_codemp;
		$ls_operacion=$this->operacion;
		$ls_comprobante=$this->comprobante;		
		$_SESSION["fechacomprobante"]=$this->io_conexiones->formatea_fecha_normal($this->fechacomp);
		$ld_fecha = $_SESSION["fechacomprobante"];
		$ls_procedencia=$this->procede;
		$ls_descripcion=$this->descripcion;
		$ls_tipo=$this->tipoProvBen;
		$this->classcmp->io_int_int->is_tipo=$this->tipoProvBen;
		$this->classcmp->io_int_int->is_cod_prov="----------";
		$this->classcmp->io_int_int->is_ced_ben=$this->ced_bene;		
		$this->classcmp->io_int_int->ib_procesando_cmp=false;
		$this->classcmp->io_int_int->id_fecha=$this->fechacomp;
		$this->codban     = "---";
		$this->ctaban     = "-------------------------";
		$this->rendfon    =0;
		$this->fuentefin="--";
		
		$resp=$this->io_fecha->uf_valida_fecha_periodo($_SESSION["fechacomprobante"],$this->ls_codemp);
		if($resp===false){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> '.$this->io_fecha->is_msg_error. 				           			    
						'<br><b>METODO:</b> GenerarCabeceraCmp ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
	   
		$existe=$this->cmpspi->uf_verificar_comprobante($ls_codemp,$this->procede,$ls_comprobante);
		if($existe){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El comprobante '.$ls_comprobante.' de contabilización ya existe 				           			    
						<br><b>METODO:</b> GenerarCabeceraCmp ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->cmpspi->OmitorMsj=true;
		//INSERTA EL COMPROBANTE (CABECERA)
		$resp=$this->cmpspi->uf_guardar_automatico($this->comprobante,$_SESSION["fechacomprobante"],$this->procede,$this->descripcion,
												     $this->classcmp->io_int_int->is_cod_prov,
												     $this->classcmp->io_int_int->is_ced_ben,$this->tipoProvBen,1,
												     $this->codban,$this->ctaban, $this->rendfon, $this->fuentefin, 'N');		
		
		if($resp===false){return false;}
		
		$this->arr_cmp["comprobante"]    = $this->comprobante;		
		$this->arr_cmp["fecha"]      	 = $this->fechacomp;
		$this->arr_cmp["procedencia"]	 = $this->procede;
		$this->arr_cmp["descripcion"]	 = $this->descripcion;
		$this->arr_cmp["proveedor"]  	 = $this->classcmp->io_int_int->is_cod_prov;
		$this->arr_cmp["beneficiario"]   = $this->classcmp->io_int_int->is_ced_ben;
		$this->arr_cmp["tipo"]           = $this->tipoProvBen;
		$this->arr_cmp["codemp"]         = $this->codemp;
		$this->arr_cmp["tipo_comp"]      = 1;		
		
		return true;
		
	}
	
	
	function GenerarCmpSpi($datos=array()){
				
		$spi = $this->ConsultaDetSPI($datos);
		if($spi===false){return false;}
		
		if($spi->RecordCount()){		        
				foreach($spi as $DatosSPI){		
					$ld_disponible=0;
					//PARA EVITAR QUE EL MÉTODO GENERE EL COMPROBANTE DE CONTABILIDAD AUTOMÁTICAMENTE YA QUE SE DUPLICARÍA	
					$this->cmpspi->io_int_spi->ib_AutoConta	= false;	
					//***********************************************************************************
					if($this->CmpAnula){$DatosSPI['monto']=-($DatosSPI['monto']);}
					$resp=$this->cmpspi->uf_guardar_movimientos($this->arr_cmp,$DatosSPI['spi_cuenta'],$this->procede,$this->descripcion,
																$this->comprobante,$this->operacion,
																0,$DatosSPI['monto'],"C",$this->codban,$this->ctaban,
																$DatosSPI['codestpro1'],$DatosSPI['codestpro2'],
																$DatosSPI['codestpro3'],$DatosSPI['codestpro4'],
																$DatosSPI['codestpro5'],$DatosSPI['estcla']);
					
					if($resp===false){return false;}
					$this->Saldos->AjaxConect = 1;
					$resp=$this->SaldosSPI->ReprocesarSaldosCtasSPI($DatosSPI);
					if($resp===false){return false;}
					
				}//FIN FOREACH
		}
		
		return true;
	
	}
	
	function GenerarCmpScg($datos=array()){
	
		$scg=$this->ConsultaDetContable($datos);		
		if($scg===false){return false;}	
		
		$resp = $this->VerificarCmpContDescuadrado($this->arr_cmp);
		if($resp===false){return false;}
			
		foreach($scg as $DatosSCG){				
			$resp = $this->VerificaCuentaSCG($DatosSCG);			
			if($resp===false){return false;}			
			//echo $DatosSCG['sc_cuenta'].'-'.$DatosSCG["debhab"].'-'.$DatosSCG['monto'].'<br>';				
			if($this->CmpAnula){$DatosSCG["debhab"]=($DatosSCG["debhab"]=='D')?'H':'D';}	
			$resp=$this->cmpspi->uf_guardar_movimientos_contable($this->arr_cmp,$DatosSCG['sc_cuenta'],$this->procede,$this->descripcion,
																$this->comprobante,$DatosSCG["debhab"],$DatosSCG["monto"],
																$this->codban,$this->ctaban,$this->fechacomp);
			if($resp===false){return false;}
									
		}
		
		return true;
	}
	
	function EliminarCmp($datos=array()){
		
		$metodo='EliminarCmp';
		$ls_codemp=$this->ls_codemp;
		$ls_operacion=$this->operacion;
		$ls_comprobante=$this->comprobante;		
		$_SESSION["fechacomprobante"]=$this->io_conexiones->formatea_fecha_normal($this->fechacomp);
		$ld_fecha = $_SESSION["fechacomprobante"];
		$ls_procedencia=$this->procede;
		$ls_descripcion=$this->descripcion;
		$ls_tipo="B";
		$this->classcmp->io_int_int->is_tipo=$ls_tipo;
		$this->classcmp->io_int_int->is_cod_prov="----------";
		$this->classcmp->io_int_int->is_ced_ben=$this->ced_bene;		
		$this->classcmp->io_int_int->ib_procesando_cmp=false;
		$this->classcmp->io_int_int->id_fecha=$this->fechacomp;
		$ls_codban     = "---";
		$ls_ctaban     = "-------------------------";
		$ls_rendfon    =0;
		$ls_fuentefin="--";
		
		$resp=$this->classcmp->io_int_int->uf_init_delete($ls_codemp,$ls_procedencia,$ls_comprobante, 
		                                                  $this->classcmp->io_int_int->id_fecha,$ls_tipo,
														  $this->classcmp->io_int_int->is_ced_ben,
														  $this->classcmp->io_int_int->is_cod_prov,
														  false,$ls_codban,$ls_ctaban);

		if(!$resp){		   
		   $mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Error al eliminar comprobante '.$this->classcmp->io_int_int->is_msg_error. 				           			    
					   '<br><b>METODO:</b>  '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;	
		}	
	    
		if(!$resp){
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br>'.$this->classcmp->io_int_int->is_msg_error. 				           			    
					   '<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
			
		}	
		
		$resp = $this->classcmp->io_int_int->uf_init_end_transaccion_integracion($this->seguridad);
		if (!$resp){			
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br>'.$this->classcmp->io_int_int->is_msg_error. 				           			    
					   '<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);
																			
			return false;
			
		}
		
		return true;
	
	}
	
	function consulta_tipos_cliente($opciones=array()){	
		
		switch($opciones['criterio']){
			  case "por_id":
					$sql_criterio = " WHERE id_tipo_cliente='".$opciones['id_tipo_cliente']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE codtipocli='".$opciones['codtipocli']."' AND codemp='".$this->ls_codemp."'";   
					break;
			  case "valida_update":
					$sql_criterio = " WHERE codtipocli='".$opciones['codtipocli']."' AND codemp='".$this->ls_codemp."' AND id_tipo_cliente!='".$opciones['id_tipo_cliente']."' ";   
					break;				   
			  case "por_listado":
					$sql_criterio = " WHERE tipo_cliente ".$this->postgres_ilike."LIKE('%".$opciones['tipo_cliente']."%') AND codtipocli ".$this->postgres_ilike."LIKE('%".$opciones['codtipocli']."%') ORDER BY tipo_cliente";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_tipo_clientes ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_tipos_cliente';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function  insertar_tipocliente($datos=array()){
				
				if(!$datos['codtipocli'] or !$datos['tipo_cliente'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_tipos_cliente($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
							
				$ls_sql = "INSERT INTO cxc_tipo_clientes(codemp, codtipocli, tipo_cliente)
						   VALUES ('".$this->ls_codemp."', '".$datos['codtipocli']."', '".$datos['tipo_cliente']."'); ";
				
				$metodo = 'insertar_tipocliente';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'El Tipo de Cliente ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function  modificar_tipocliente($datos=array()){				
				
				if(!$datos['id_tipo_cliente'] or !$datos['codtipocli'] or !$datos['tipo_cliente'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_tipos_cliente($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
						
				$ls_sql = "UPDATE cxc_tipo_clientes
     					   SET codtipocli='".$datos['codtipocli']."', tipo_cliente='".$datos['tipo_cliente']."' 
						   WHERE id_tipo_cliente='".$datos['id_tipo_cliente']." '";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_tipocliente';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El Tipo de Cliente ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  eliminar_tipocliente($datos){
				
				if(!$datos['id_tipo_cliente'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_tipo';
				$resp = $this->consulta_clientes($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar un Tipo de Cliente que esta siendo usado ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
							
				$ls_sql = "DELETE FROM cxc_tipo_clientes WHERE id_tipo_cliente='".$datos['id_tipo_cliente']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_tipocliente';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Tipo de Cliente';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	
	function formato_numerico_us($numero,$redondeo=2){
	
			$busca = array(".", ",");
			$sustituye   = array("", ".");
			number_format(str_replace($busca,$sustituye,$numero),$redondeo,'.','');
			return number_format(str_replace($busca,$sustituye,$numero),$redondeo,'.','');
	
	}
	
	
	function extraer_configuracion(){
	
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'INICIO_NUMERO_FACT';
		$this->inicio_numerofact = $this->select_config($param);
		if(!$this->inicio_numerofact){$this->inicio_numerofact=1;}
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'INICIO_NUMERO_COT';
		$this->inicio_numerocot = $this->select_config($param);
		if(!$this->inicio_numerocot){$this->inicio_numerocot=1;}
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'INICIO_NUMERO_PED';
		$this->inicio_numeroped = $this->select_config($param);
		if(!$this->inicio_numeroped){$this->inicio_numeroped=1;}
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'INICIO_NUMERO_DOC';
		$this->inicio_numerodoc = $this->select_config($param);
		if(!$this->inicio_numerodoc){$this->inicio_numerodoc=1;}
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CANTIDAD_DIGITOS_NUMEROFACT';
		$this->digitosfact = $this->select_config($param);
		if(!$this->digitosfact){$this->digitosfact=6;}
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CANTIDAD_DIGITOS_CODCLIENTE';
		$this->digitoscliente = $this->select_config($param);
		if(!$this->digitoscliente){$this->digitoscliente=6;}
		
		
	}
	
	function select_config($param=array())
	{
		
		$ls_sql="SELECT value ".
				"  FROM sigesp_config ".
				" WHERE codemp='".$this->ls_codemp."' ".
				"   AND codsis='".$param['codsis']."' ".
				"   AND seccion='".$param['seccion']."' ".
				"   AND entry='".$param['entry']."' ";
				
		$this->rsConf=$this->io_sql->select($ls_sql);
		//echo $ls_sql.'<br>';		
		if($this->rsConf===false)
		{
			$metodo = 'select_config';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			$this->io_conexiones->mensajes_ajax($mensaje,'error');	
			return;					
		}
			
		return $this->rsConf->fields["value"];
	}// end function select_config($param)
	
	
	function cargar_config_cxc($opciones=array()){	
		
		 $query_rs ="SELECT *  FROM sigesp_config  
					 WHERE codemp='".$this->ls_codemp."' 
					 AND codsis='CXC' ";
				 
		$clase = get_class($this);
		$metodo = 'cargar_config_cxc';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $this->io_conexiones->conexion($query_rs,$param,$msj);
		
	}
	
	
	
	function actualizar_config($param=array()){
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$config = $this->select_config($param);
		if($config===false){return false;}
		if(!$this->rsConf->RecordCount()){
					$resul = $this->insertar_configuracion($param);
					if($resul===false){return false;}
					return true;
						
		}
		else{
					$resul = $this->modificar_configuracion($param);
					if($resul===false){return false;}
					return true;
		}
		
	}
	
	function insertar_configuracion($param=array())
	{
				
		$ls_sql='INSERT INTO sigesp_config(codemp, codsis, seccion, entry, "type", "value")
				 VALUES'." ('".$this->ls_codemp."', '".$param['codsis']."', '".$param['seccion']."', '".$param['entry']."', 'C', '".$param['value']."');";
				
		$this->rs_data=$this->io_sql->select($ls_sql);
				
		if($this->rs_data===false)
		{
			$metodo = 'insertar_configuracion';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			$this->io_conexiones->mensajes_ajax($mensaje,'error');
			//echo $mensaje;	
			return false;					
		}
			
		return true;
	}// end function select_config($param)
	
	function modificar_configuracion($param=array())
	{
				
		
		$ls_sql='UPDATE sigesp_config
				   SET  "value"'."='".$param['value']."' 
				 WHERE codemp='".$this->ls_codemp."' 
				 AND codsis='".$param['codsis']."' 
				 AND seccion='".$param['seccion']."' 
				 AND entry='".$param['entry']."' 
				 AND ".'"type"'."='C'";
						
		$this->rs_data=$this->io_sql->select($ls_sql);
				
		if($this->rs_data===false)
		{
			$metodo = 'modificar_configuracion';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			$this->io_conexiones->mensajes_ajax($mensaje,'error');	
			return false;					
		}
			
		return true;
	}// end function select_config($param)
	
	
	function combo_tipos_cliente($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbtipocliente';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['id_tipo_cliente']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['tipo_cliente'];  $id_carga = $opciones['id_tipo_cliente'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_tipos_cliente();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["id_tipo_cliente"].'" '.$selected.'>'.$fila["tipo_cliente"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function consulta_paises($opciones=array()){	
		
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE codpai='".$opciones['codpai']."'";
					break;							  
			  case "por_pais":
					$sql_criterio = " WHERE despai ".$this->postgres_ilike."LIKE('%".$opciones['despai']."%') ";   
					break;			   
			  case "por_listado":
					$sql_criterio = " WHERE despai ".$this->postgres_ilike."LIKE('%".$opciones['despai']."%') ORDER BY despai";
					break;			
		}
								   
		$query_rs = "SELECT * FROM sigesp_pais".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_paises';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	
	function combo_paises($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmb_pais';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['codpai']){$carga = 'VENEZUELA'; $id_carga = '058';}
				else{$carga = $opciones['nombre_pais'];  $id_carga = $opciones['codpai'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_paises();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				do { 				
					$combo .= '<option value="'.$resultado['fila']["codpai"].'">'.$resultado['fila']["despai"].'</option>';								
				} while ($resultado['fila'] = $obj_sql->fetch_row($resultado['rs'])); 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function consulta_zonas($opciones=array()){	
		
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' AND id_zona='".$opciones['id_zona']."'";
					break;							  
			  case "por_zona":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND zona ".$this->postgres_ilike."LIKE('%".$opciones['zona']."%')  ";   
					break;
			 case "por_codigo":
					$sql_criterio = " WHERE codzona='".$opciones['codzona']."' AND codemp='".$this->ls_codemp."'";    
					break;
			  case "valida_update":
					$sql_criterio = " WHERE codzona='".$opciones['codzona']."' AND codemp='".$this->ls_codemp."' AND id_zona!='".$opciones['id_zona']."' ";   
					break;
									   
			  case "por_listado":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND zona ".$this->postgres_ilike."LIKE('%".$opciones['zona']."%')
									  AND codzona  ".$this->postgres_ilike."LIKE('%".$opciones['codzona']."%')  
									  ORDER BY codzona";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_zonas ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_zonas';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	
	function combo_zonas($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmb_zona';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['id_zona']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['zona']." (".$opciones['codzona'].")";  $id_carga = $opciones['id_zona'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_zonas();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'" >- '.$carga.' -</option>';
				
							
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_zona"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["id_zona"].'" '.$selected.'>'.$fila["zona"]." (".$fila['codzona'].")".'</option>';								
				} 
				$combo .= '</select>';
																						
				return $combo;

	}
	
	function  insertar_zonas($datos=array()){
				
				if(!$datos['codzona'] or !$datos['zona'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_zonas($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
											
				$ls_sql = "INSERT INTO cxc_zonas(codemp, codzona, zona)
						   VALUES ('".$this->ls_codemp."', '".$datos['codzona']."', '".$datos['zona']."'); ";
				
				$metodo = 'insertar_zonas';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'La zona ha sido agregada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function  modificar_zonas($datos=array()){				
				
				if(!$datos['id_zona'] or !$datos['codzona'] or !$datos['zona'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_zonas($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
						
				$ls_sql = "UPDATE cxc_zonas
     					   SET codzona='".$datos['codzona']."', zona='".$datos['zona']."' 
						   WHERE id_zona='".$datos['id_zona']." '";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_zonas';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'La zona ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  eliminar_zonas($datos){
				
				if(!$datos['id_zona'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Eliminación. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_zona';
				$resp = $this->consulta_clientes($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar una zona que esta siendo usada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
							
				$ls_sql = "DELETE FROM cxc_zonas WHERE id_zona='".$datos['id_zona']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_zonas';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Zonas';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	

	function consulta_cuentas_contables($opciones=array()){	
		
		switch($opciones['criterio']){
					
			 case "por_cuenta":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND sc_cuenta='".$opciones['sc_cuenta']."' ";   
					break;				   
			  case "por_listado":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."'
									  AND sc_cuenta ".$this->postgres_ilike."LIKE('%".$opciones['sc_cuenta']."%')
					                  AND denominacion ".$this->postgres_ilike."LIKE('%".$opciones['denominacion']."%') 
									  AND status='C'
									  ORDER BY sc_cuenta";
					break;			
		}								   
		
		 $query_rs =" SELECT TRIM(sc_cuenta) as sc_cuenta, denominacion, status
		              FROM scg_cuentas ".$sql_criterio;
				 
		$clase = get_class($this);
		$metodo = 'consulta_cuentas_contables';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
		
	}
	
	
	function consulta_clasificacion($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
		
		
		switch($propiedades['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND id_clasif_cliente='".$propiedades['id_clasif_cliente']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
									  AND codclasif ".$this->postgres_ilike."LIKE('%".$propiedades['codclasif']."%') ";   
					break;
			  case "por_codigo":
					$sql_criterio = " WHERE codclasif='".$propiedades['codclasif']."' AND codemp='".$this->ls_codemp."'";    
					break;
			  case "valida_update":
					$sql_criterio = " WHERE codclasif='".$propiedades['codclasif']."' AND codemp='".$this->ls_codemp."' AND id_clasif_cliente!='".$propiedades['id_clasif_cliente']."' ";   
					break;			   
			  case "por_listado":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
									  AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$propiedades['clasif_cliente']."%')
					                  AND codclasif ".$this->postgres_ilike."LIKE('%".$propiedades['codclasif']."%')
									  ORDER BY codclasif ";
					break;			  
						
		}
	
								   
		$query_rs = "SELECT * FROM cxc_clasif_clientes ".$sql_criterio;
		$clase = get_class($this);
		$metodo = 'consulta_clasificacion';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function  insertar_clasificacion($datos=array()){
				
				if(!$datos['codclasif'] or !$datos['clasif_cliente'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_clasificacion($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
											
				$ls_sql = "INSERT INTO cxc_clasif_clientes(codemp, codclasif, clasif_cliente)
						   VALUES ('".$this->ls_codemp."', '".$datos['codclasif']."', '".$datos['clasif_cliente']."'); ";
				
				$metodo = 'insertar_clasificacion';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'La clasificacion ha sido agregada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function  modificar_clasificacion($datos=array()){				
				
				if(!$datos['id_clasif_cliente'] or !$datos['codclasif'] or !$datos['clasif_cliente'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_clasificacion($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
						
				$ls_sql = "UPDATE cxc_clasif_clientes
     					   SET codclasif='".$datos['codclasif']."', clasif_cliente='".$datos['clasif_cliente']."' 
						   WHERE id_clasif_cliente='".$datos['id_clasif_cliente']." '";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_clasificacion';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'La clasificación ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  eliminar_clasificacion($datos){
				
				if(!$datos['id_clasif_cliente'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Eliminación. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_clasificacion';
				$resp = $this->consulta_clientes($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar una clasificación que esta siendo usada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
							
				$ls_sql = "DELETE FROM cxc_clasif_clientes WHERE id_clasif_cliente='".$datos['id_clasif_cliente']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_clasificacion';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Clasificaciones';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	
	function consulta_vendedores($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
		
		
		switch($propiedades['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE v.id_vend='".$propiedades['id_vend']."' AND v.codemp='".$this->ls_codemp."' ";
					break;			  	
			  case "por_codigo":
					$sql_criterio = " WHERE v.codvend='".$propiedades['codvend']."' AND v.codemp='".$this->ls_codemp."'";    
					break;
			  case "valida_update":
					$sql_criterio = " WHERE v.codvend='".$propiedades['codvend']."' AND v.codemp='".$this->ls_codemp."' AND v.id_vend!='".$propiedades['id_vend']."' ";   
					break;		   
			  case "por_listado":
					$sql_criterio = " WHERE v.codemp = '".$this->ls_codemp."' 
									  AND v.nomvend ".$this->postgres_ilike."LIKE('%".$propiedades['nomvend']."%')
					                  AND v.codvend ".$this->postgres_ilike."LIKE('%".$propiedades['codvend']."%')
									  AND v.cedvend ".$this->postgres_ilike."LIKE('%".$propiedades['cedvend']."%')
									  ORDER BY v.nomvend ";
					break;					   
			
						
		}
								   
		$query_rs = "SELECT *,z.zona FROM cxc_vendedores v
					 LEFT JOIN cxc_zonas z ON v.id_zona_vend = z.id_zona ".$sql_criterio;
					 
		$clase = get_class($this);
		$metodo = 'consulta_vendedores';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function extraerdatos_vendedores($datos=array()){
			
					$propiedades['criterio'] = "por_id";
					$propiedades['id_vend'] = $datos['id_vend'];
					$datosvend = $this->consulta_vendedores($propiedades);	
								
					if(!$datosvend['cantidad']){
						$mensaje = 'No hay vendedores con ese id. <br><b>id:</b> '.$datosfact['id_vend'];
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;					
					}
					
					$datosvend['fila']['fecini']=$this->io_conexiones->formatea_fecha_normal($datosvend['fila']['fecini']);
					$datosvend['fila']['fecfin']=$this->io_conexiones->formatea_fecha_normal($datosvend['fila']['fecfin']);
					$datosvend['fila']['combo_zonas'] = $this->combo_zonas($datosvend['fila']);
									
					return $datosvend['fila'];
	
	}
	
	function combo_vendedores($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmb_vend';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['id_vend']){$carga = 'Seleccione'; $id_carga = '';}
				else{$carga = $opciones['nomvend'];  $id_carga = $opciones['id_vend'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_vendedores();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				do { 				
					$combo .= '<option value="'.$resultado['fila']["id_vend"].'">'.$resultado['fila']["nomvend"].'</option>';								
				} while ($resultado['fila'] = $obj_sql->fetch_row($resultado['rs'])); 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function insertar_vendedores($datos=array()){
				
				if(!$datos['codvend'] or !$datos['nomvend'] or !$datos['cedvend'] or !$datos['fecini'] or !$datos['id_zona'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_vendedores($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				if(!$datos['fecfin']){$datos['fecfin']='01/01/1901';}
											
				$ls_sql = "INSERT INTO cxc_vendedores(codemp, codvend, nomvend, cedvend, fecini, fecfin, estatusvend, nivelvend, id_zona_vend)
						   VALUES ('".$this->ls_codemp."', '".
						             $datos['codvend']."', '".
									 $datos['nomvend']."', '".
									 $datos['cedvend']."', '".
									 $this->io_conexiones->formatea_fecha_bd($datos['fecini'])."', '".
									 $this->io_conexiones->formatea_fecha_bd($datos['fecfin'])."', '".
									 $datos['estatusvend']."', '".
									 $datos['nivelvend']."', '".
									 $datos['id_zona']."') ";
				
				$metodo = 'insertar_vendedores';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'El vendedor ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function modificar_vendedores($datos=array()){				
				
				if(!$datos['id_vend'] or !$datos['codvend'] or !$datos['nomvend'] or !$datos['cedvend'] or !$datos['fecini'] or !$datos['id_zona'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_vendedores($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				if(!$datos['fecfin']){$datos['fecfin']='01/01/1901';}		
				$ls_sql = "UPDATE cxc_vendedores
     					   SET codemp='".$this->ls_codemp."', 
						       codvend='".$datos['codvend']."', 
							   nomvend='".$datos['nomvend']."', 
							   cedvend='".$datos['cedvend']."', 
							   fecini='".$this->io_conexiones->formatea_fecha_bd($datos['fecini'])."',
							   fecfin='".$this->io_conexiones->formatea_fecha_bd($datos['fecfin'])."', 
							   estatusvend='".$datos['estatusvend']."', 
							   nivelvend='".$datos['nivelvend']."', 
							   id_zona_vend='".$datos['id_zona']."'  
						   WHERE id_vend='".$datos['id_vend']." '";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_vendedores';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El vendedor ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function eliminar_vendedores($datos){
				
				if(!$datos['id_vend'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Eliminación. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_vend';
				$resp = $this->consulta_clientes($param);
				if($resp['cantidad']){
						$mensaje = '<b>ERROR:</b><br> No se puede eliminar un vendedor que esta siendo usado en un cliente! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$resp = $this->consulta_facturas($param);
				if($resp['cantidad']){
						$mensaje = '<b>ERROR:</b><br> No se puede eliminar un vendedor que esta siendo usado en una factura! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
							
				$ls_sql = "DELETE FROM cxc_vendedores WHERE id_vend='".$datos['id_vend']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_vendedores';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Vendedores';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	function consulta_descuentos($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
		
		
		switch($propiedades['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE id_desc='".$propiedades['id_desc']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' AND coddesc='".$propiedades['coddesc']."' ";   
					break;			   
			  case "por_listado":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' 
									  AND nomdesc ".$this->postgres_ilike."LIKE('%".$propiedades['nomdesc']."%')
					                  AND coddesc ".$this->postgres_ilike."LIKE('%".$propiedades['coddesc']."%')									 
									  ORDER BY coddesc ";
					break;					   
			   case "valida_update":
					$sql_criterio = " WHERE coddesc='".$propiedades['coddesc']."' AND codemp='".$this->ls_codemp."' AND id_desc!='".$propiedades['id_desc']."' ";   
					break;	
						
		}
		
							   
		$query_rs = "SELECT * FROM cxc_descuentos ".$sql_criterio;
		$clase = get_class($this);
		$metodo = 'consulta_descuentos';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	
	function insertar_descuentos($datos=array()){
				
				if(!$datos['coddesc'] or !$datos['nomdesc'] or !$datos['tipodesc'] or !$datos['valordesc'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_descuentos($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
																		
				$ls_sql = "INSERT INTO cxc_descuentos(codemp, coddesc, nomdesc, tipodesc, valordesc, fecreg, usureg, horareg)
						   VALUES ('".$this->ls_codemp."', '".
						             $datos['coddesc']."', '".
									 $datos['nomdesc']."', '".
									 $datos['tipodesc']."', '".
									 $datos['valordesc']."', '".
									 date("Y-m-d")."', '".
									 $_SESSION["la_logusr"]."', '".
									 date("H:i")."') ";
				
				$metodo = 'insertar_descuentos';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'El descuento ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function modificar_descuentos($datos=array()){				
				
				if(!$datos['id_desc'] or !$datos['coddesc'] or !$datos['nomdesc'] or !$datos['tipodesc'] or !$datos['valordesc'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_descuentos($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				
				$ls_sql = "UPDATE cxc_descuentos
     					   SET coddesc='".$datos['coddesc']."', 
							   nomdesc='".$datos['nomdesc']."', 
							   tipodesc='".$datos['tipodesc']."',
							   valordesc='".$datos['valordesc']."',						   
							   fecmod='".date("Y-m-d")."', 
							   usumod='".$_SESSION["la_logusr"]."', 
							   horamod='".date("H:i")."'  
						   WHERE id_desc='".$datos['id_desc']." '";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_descuentos';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El descuento ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function eliminar_descuentos($datos){
				
				if(!$datos['id_desc'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Eliminación. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
			
				$param = $datos;
				$param['criterio'] = 'por_descuento';
				$resp = $this->consulta_descuentocliente($param);
				if($resp==false){return false;}
				if($resp['cantidad']){
						$mensaje = '<b>ERROR:</b><br> No se puede eliminar un descuento que esta siendo usado en un cliente! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
										
				$ls_sql = "DELETE FROM cxc_descuentos WHERE id_desc='".$datos['id_desc']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_descuentos';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()>0){
						$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' descuentos';				
						$this->io_conexiones->mensajes_ajax($mensaje);			
						return true;
				}
				
				return false;
	
	}
	
	
	function consulta_comisiones($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
		
		
		switch($propiedades['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE id_comis='".$propiedades['id_comis']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' AND codcomis='".$propiedades['codcomis']."' ";   
					break;			   
			  case "por_listado":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' 
									  AND nomcomis ".$this->postgres_ilike."LIKE('%".$propiedades['nomcomis']."%')
					                  AND codcomis ".$this->postgres_ilike."LIKE('%".$propiedades['codcomis']."%')									 
									  ORDER BY codcomis ";
					break;					   
			   case "valida_update":
					$sql_criterio = " WHERE codcomis='".$propiedades['codcomis']."' AND codemp='".$this->ls_codemp."' AND id_comis!='".$propiedades['id_comis']."' ";   
					break;	
						
		}
		
							   
		$query_rs = "SELECT * FROM cxc_comisiones ".$sql_criterio;
		$clase = get_class($this);
		$metodo = 'consulta_comisiones';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	
	function insertar_comisiones($datos=array()){
				
				if(!$datos['codcomis'] or !$datos['nomcomis'] or !$datos['tipocomis'] or !$datos['valorcomis'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_comisiones($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
																		
				$ls_sql = "INSERT INTO cxc_comisiones(codemp, codcomis, nomcomis, tipocomis, valorcomis, fecreg, usureg, horareg)
						   VALUES ('".$this->ls_codemp."', '".
						             $datos['codcomis']."', '".
									 $datos['nomcomis']."', '".
									 $datos['tipocomis']."', '".
									 $datos['valorcomis']."', '".
									 date("Y-m-d")."', '".
									 $_SESSION["la_logusr"]."', '".
									 date("H:i")."') ";
				
				$metodo = 'insertar_comisiones';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'La comisión ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function modificar_comisiones($datos=array()){				
				
				if(!$datos['id_comis'] or !$datos['codcomis'] or !$datos['nomcomis'] or !$datos['tipocomis'] or !$datos['valorcomis'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_comisiones($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				
				$ls_sql = "UPDATE cxc_comisiones
     					   SET codcomis='".$datos['codcomis']."', 
							   nomcomis='".$datos['nomcomis']."', 
							   tipocomis='".$datos['tipocomis']."',
							   valorcomis='".$datos['valorcomis']."',						   
							   fecmod='".date("Y-m-d")."', 
							   usumod='".$_SESSION["la_logusr"]."', 
							   horamod='".date("H:i")."'  
						   WHERE id_comis='".$datos['id_comis']." '";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_comisiones';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'La comisión ha sido modificada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function eliminar_comisiones($datos){
				
				if(!$datos['id_comis'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Eliminación. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
			
				$param = $datos;
				$param['criterio'] = 'por_comision';
				$resp = $this->consulta_comisionvendedor($param);
				if($resp==false){return false;}
				if($resp['cantidad']){
						$mensaje = '<b>ERROR:</b><br> No se puede eliminar una comisión que esta siendo usado en un vendedor! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
										
				$ls_sql = "DELETE FROM cxc_comisiones WHERE id_comis='".$datos['id_comis']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_comisiones';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()>0){
						$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' comisiones';				
						$this->io_conexiones->mensajes_ajax($mensaje);			
						return true;
				}
				
				return false;
	
	}
	
	function consulta_comisionvendedor($propiedades=array()){
	
			return true;
	
	}
	
	
	function consulta_tipdescuentos($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
		
		
		switch($propiedades['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE id_desc='".$propiedades['id_desc']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' AND coddesc ".$this->postgres_ilike."LIKE('%".$propiedades['coddesc']."%') ";   
					break;			   
			  case "por_listado":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' 
									  AND nomdesc ".$this->postgres_ilike."LIKE('%".$propiedades['nomdesc']."%')
					                  AND coddesc ".$this->postgres_ilike."LIKE('%".$propiedades['coddesc']."%')									 
									  ORDER BY coddesc ";
					break;					   
			  case "validar_update":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' 
									  AND  id_desc!='".$dato['id_vend']."' 
									  AND nomdesc='".$propiedades['nomdesc']."' "; 
					break;
						
		}
		
							   
		$query_rs = "SELECT * FROM cxc_descuentos ".$sql_criterio;
		$clase = get_class($this);
		$metodo = 'consulta_tipdescuentos';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}

	
	function consulta_clientes($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
				
		$datos = $propiedades;
		$columna = $datos['orden'];
		if($datos['orden']==""){$columna='nombre_cliente';}
		if($datos['codcliente']){$criterio = $criterio." AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
		if($datos['nombre_cliente']){$criterio = $criterio." AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
		if($datos['rifcompleto']){$criterio = $criterio." AND c.tipperrif||c.numpririf||c.numterrif ".$this->postgres_ilike."LIKE('%".$datos['rifcompleto']."%') ";}
		if($datos['numpririf']){$criterio = $criterio." AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
		if($datos['clasif_cliente']){$criterio = $criterio." AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
		if($datos['sc_cuenta']){$criterio = $criterio." AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
		if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['tipperrif']){$criterio = $criterio." AND c.tipperrif = '".$datos['tipperrif']."' ";}
		if($datos['id_tipo_cliente']){$criterio = $criterio." AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
		if($datos['id_zona']){$criterio = $criterio." AND c.id_zona = '".$datos['id_zona']."' ";}
		if($datos['id_vend']){$criterio = $criterio." AND c.id_vend = '".$datos['id_vend']."' ";}
		if($datos['estclient']){$criterio = $criterio." AND c.estclient = '".$datos['estclient']."' ";}		
		if($datos['fecregcliente_d']){
			if($datos['fecregcliente_h'] == ''){$datos['fecregcliente_h'] = $datos['fecregcliente_d'];}
			$criterio = $criterio." AND c.fecregcliente BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_h'])."'  ";
	    }	
		if($datos['nombreresp']){$criterio = $criterio." AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
		if($datos['despai']){$criterio = $criterio." AND despai ".$this->postgres_ilike."LIKE('%".$datos['despai']."%') ";}
		if($datos['desest']){$criterio = $criterio." AND desest ".$this->postgres_ilike."LIKE('%".$datos['desest']."%') ";}
		if($datos['denmun']){$criterio = $criterio." AND denmun ".$this->postgres_ilike."LIKE('%".$datos['denmun']."%') ";}
		if($datos['denpar']){$criterio = $criterio." AND denpar ".$this->postgres_ilike."LIKE('%".$datos['denpar']."%') ";}		
		if($datos['desciu']){$criterio = $criterio." AND desciu ".$this->postgres_ilike."LIKE('%".$datos['desciu']."%') ";}
			//desciu
	    $campos = " * ";	 	 
		switch($propiedades['criterio']){
				  
			  case "por_id":
			        $campos = " c.*,tc.*,z.*,cc.*,v.*,cu.*,p.despai,e.desest,m.denmun,pa.denpar,ciu.desciu ";					
					$sql_criterio = " LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores v ON v.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  LEFT JOIN scv_ciudades ciu ON ciu.codpai = c.codpai AND ciu.codest = c.codest AND ciu.codciu = c.codciu
									  WHERE id_cliente='".$propiedades['id_cliente']."'";				
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' AND codcliente = '".$propiedades['codcliente']."' ";   
					break;			  
			  case "por_tipo":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' AND id_tipo_cliente = '".$propiedades['id_tipo_cliente']."' ";   
					break;
			  case "por_zona":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' AND id_zona = '".$propiedades['id_zona']."' ";   
					break;
			    case "por_clasificacion":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' AND id_clasif_cliente = '".$propiedades['id_clasif_cliente']."' ";   
					break;
			   case "por_vend":
					$sql_criterio = " WHERE c.codemp = '".$this->ls_codemp."' AND c.id_vend='".$propiedades['id_vend']."' ";   
					break;
			  case "por_rif":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."'  
									  AND tipperrif ='".$propiedades['tipperrif']."'
									  AND numpririf ='".$propiedades['numpririf']."'
									  AND numterrif ='".$propiedades['numterrif']."'
									 ";   
					break;		 
			  case "por_listado":
			         $campos = " c.*,tc.*,z.*,cc.*,v.*,cu.*,p.despai,e.desest,m.denmun,pa.denpar,ciu.desciu, 
					             tipperrif||'-'||numpririf||'-'||numterrif as rifcompleto ";	
					$sql_criterio = " INNER JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores v ON v.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  LEFT JOIN scv_ciudades ciu ON ciu.codpai = c.codpai AND ciu.codest = c.codest AND ciu.codciu = c.codciu
									  WHERE c.codemp = '".$this->ls_codemp."' 
									  AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$propiedades['nombre_cliente']."%')
					                  AND c.codcliente ".$this->postgres_ilike."LIKE('%".$propiedades['codcliente']."%')	
									  AND c.tipperrif ".$this->postgres_ilike."LIKE('%".$propiedades['tipperrif']."%')
									  AND c.numpririf ".$this->postgres_ilike."LIKE('%".$propiedades['numpririf']."%')
									  AND c.numterrif ".$this->postgres_ilike."LIKE('%".$propiedades['numterrif']."%')
									  ".$criterio.													  							  
									  " ORDER BY ".$columna;							 
									  
					break;
						 											   
			  case "validar_update":
					$sql_criterio = " WHERE codemp = '".$this->ls_codemp."' 
									  AND  id_cliente!='".$dato['id_vend']."' 
									  AND  codcliente='".$propiedades['codcliente']."' "; 
					break;
						
		}
							   
		$query_rs = "SELECT ".$campos." FROM cxc_clientes c ".$sql_criterio;	
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'consulta_clientes';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $this->io_conexiones->conexion($query_rs,$param,$msj);
	}

	function extraerdatos_cliente($propiedades=array()){
				
				$propiedades['criterio'] = 'por_id';
				$datos = $this->consulta_clientes($propiedades);
				
				if(!$datos['cantidad']){
					 $mensaje = 'No existe el cliente ! ';
					 $this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					 return false;
				}
				
				
			    $datos['fila']['combo_zonas'] = $this->combo_zonas($datos['fila']);
			    $datos['fila']['combo_tipos'] = $this->combo_tipos_cliente($datos['fila']);			
				$datos['fila']['fecregcliente'] = $this->io_conexiones->formatea_fecha_normal($datos['fila']['fecregcliente']);	
				$datos['fila']['limitecred'] = number_format($datos['fila']['limitecred'],2,",",".");
				$datos['fila']['diascred'] = number_format($datos['fila']['diascred'],2,",",".");
				$datos['fila']['descglob'] = number_format($datos['fila']['descglob'],2,",",".");
				$datos['fila']['rif_completo'] = $datos['fila']['tipperrif'].'-'. $datos['fila']['numpririf'].'-'.$datos['fila']['numterrif'];
				$datos['fila']['tipos_descuento'] = $this->buscar_descuentoscliente($datos['fila']);
									
				return $datos['fila'];
	
	}

	function insertar_cliente($datos=array()){
	
					if(!$datos['codcliente'] or !$datos['tipperrif'] or
					   !$datos['numpririf'] or $datos['numterrif']=='' or
					   $datos['id_tipo_cliente']=='' or !$datos['nombre_cliente'] or 
					   !$datos['dircliente'])
					{					
						//echo $datos['codcliente'].','.$datos['tipperrif'].','.$datos['numpririf'].','.$datos['numterrif'].','.$datos['id_tipo_cliente'].','.$datos['nombre_cliente'].','.$datos['dircliente'].','.$datos['sc_cuenta'];
						$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					 
					$datos['nombre_cliente']=str_replace('reemplazo_xandx','&',$datos['nombre_cliente']);
					$datos['cliente_abvr']=str_replace('reemplazo_xandx','&',$datos['cliente_abvr']);
					$datos['nombre_cliente']=str_replace('reemplazo_xmasx','+',$datos['nombre_cliente']);
					$datos['cliente_abvr']=str_replace('reemplazo_xmasx','+',$datos['cliente_abvr']);
					$datos['nombre_cliente']=addslashes($datos['nombre_cliente']);
					$datos['cliente_abvr']=addslashes($datos['cliente_abvr']); 
										 
					 $datos['numpririf'] = str_pad($datos['numpririf'],8,'0',STR_PAD_LEFT);
					 $datos['codcliente'] = str_pad($datos['codcliente'],15,'0',STR_PAD_LEFT);
					 
					  
					 if(!$datos['limitecred']){$datos['limitecred']=0;}
					 if(!$datos['diascred']){$datos['diascred']=0;}
					 if(!$datos['descglob']){$datos['descglob']=0;}
					 $datos['id_vend']	= $datos['id_vend']?$datos['id_vend']:0;
					 $datos['id_zona']	= $datos['id_zona']?$datos['id_zona']:0;
					 $datos['id_clasif_cliente'] = $datos['id_clasif_cliente']?$datos['id_clasif_cliente']:0;	
					 
					 $param['codsis'] = 'CXC';
					 $param['seccion'] = 'CONFIG';
					 $param['entry'] = 'CODIGO_CLIENTE_AUTONUMERICO';
					 $this->AutoNumerico = $this->select_config($param);					 
  					 if($this->AutoNumerico){$this->GenerarCodigoCliente(); $datos['codcliente'] = $this->codcliente;}
					 		 
					 $opcionesx = $datos;
					 $opcionesx['criterio'] = 'por_codigo';					 
					 $resultadox = $this->consulta_clientes($opcionesx);					 		 
					 if($resultadox['cantidad']){
						 $mensaje = 'El código de Cliente ya existe! ';
						 $this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						 return false;			 				
					 
					 }
					 
					 $opcionesx = $datos;
					 $opcionesx['criterio'] = 'por_rif';					 
					 $resultadox = $this->consulta_clientes($opcionesx);					 		 
					 if($resultadox['cantidad']){
						 $mensaje = 'El rif ya existe para otro cliente! ';
						 $this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						 return false;			 				
					 
					 }
					 
					$datos['fecregcliente'] = $datos['fecregcliente']?$datos['fecregcliente']:date("d/m/Y");				
					$datos['limitecred'] = $this->formato_numerico_us($datos['limitecred']);
					$datos['diascred'] = $this->formato_numerico_us($datos['diascred']);
					$datos['descglob'] = $this->formato_numerico_us($datos['descglob']);
					
					$param['codsis'] = 'CXC';
					$param['seccion'] = 'CONFIG'; 					 
					if(!$datos['sc_cuenta']){
						$param['entry'] = 'CUENTA_CONTABLE_CLIENTES'; 
						$datos['sc_cuenta'] = $this->select_config($param);
						if(!$datos['sc_cuenta']){
							$mensaje = 'No se ha configurado ninguna cuenta contable por defecto para los clientes ';
							$this->io_conexiones->mensajes_ajax($mensaje,'error');
							return false;
						}
					}
					
					$datos['codpai'] = $datos['codpai']?:'---';
					$datos['codest'] = $datos['codest']?:'---';
					$datos['codmun'] = $datos['codmun']?:'---';
					$datos['codciu'] = $datos['codciu']?:'---';
					$datos['codpar'] = $datos['codpar']?:'---';
					$datos['id_zona'] = $datos['id_zona']?:0;
					$datos['id_vend'] = $datos['id_vend']?:0;
					$datos['id_clasif_cliente'] = $datos['id_clasif_cliente']?:0;	
									 
					 $query_rs = " LOCK TABLE cxc_clientes IN ACCESS EXCLUSIVE MODE; ";
					 $query_rs .= " SELECT setval('cxc_clientes_id_cliente_seq', max(id_cliente)) FROM cxc_clientes; ";
					 $query_rs .= "INSERT INTO cxc_clientes(
											    codemp,
												codcliente,
												tipperrif,
												numpririf,
												numterrif,
												nitcli,
												id_tipo_cliente,
												nombre_cliente,
												cliente_abvr,
												id_zona,
												id_vend,
												id_clasif_cliente,
												dircliente,
												direntrega,
												codpai,
												codest,
												codmun,
												codpar,
												codciu,
												codpostal,
												faxcliente,
												telcliente,
												emailcliente,
												webcliente,
												observcliente,
												sc_cuenta,
												estclient,
												limitecred,
												diascred,
												descglob,												
												cedularesp,
												nombreresp,
												cargoresp,
												emailresp,
												fecregcliente,
												fecreg,
												usureg,
												horareg
										) 
										 VALUES ('".$this->ls_codemp."','".$datos['codcliente']."','".$datos['tipperrif']
										        ."','".$datos['numpririf']."','".$datos['numterrif']."','".$datos['nitcli']
												."','".$datos['id_tipo_cliente']."','".$datos['nombre_cliente']."','".$datos['cliente_abvr']."','".$datos['id_zona']
												."','".$datos['id_vend']."','".$datos['id_clasif_cliente']."','".$datos['dircliente']."','".$datos['direntrega']
												."','".$datos['codpai']."','".$datos['codest']."','".$datos['codmun']."','".$datos['codpar']."','".$datos['codciu']."','".$datos['codpostal']
												."','".$datos['faxcliente']."','".$datos['telcliente']."','".$datos['emailcliente']."','".$datos['webcliente']
												."','".$datos['observcliente']."','".$datos['sc_cuenta']."','".$datos['estclient']."','".$datos['limitecred']
												."','".$datos['diascred']."','".$datos['descglob']
												."','".$datos['cedularesp']."','".$datos['nombreresp']."','".$datos['cargoresp']."','".$datos['emailresp']
												."','".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente'])
												."','".date("Y-m-d")."','".$_SESSION["la_logusr"]."','".date("H:i")."') ";
			
					
					$metodo = 'insertar_cliente';
					$opcionesx['ajax'] = '1';
					$opcionesx['imprimir'] = '1';
					$msj = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;									
					$id_insertado=$this->io_conexiones->conexion($query_rs,$opcionesx,$msj,'insert');
														
					if(!$id_insertado){					
						$mensaje = 'El registro no fué insertado.(No hay id_insert) ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;				
					}
					
					$datos['id_cliente'] = $id_insertado;					
					$respuesta = $this->procesamiento_lotes($datos);					
					if($respuesta===false){return false;}					
					
					$resp = $this->InsertarBenefCliente($datos);					
					if($resp===false){return false;}	
										
					$mensaje = "La operación se realizó exitosamente <b>Idº transacción:</b> ".$id_insertado;					
				    $this->io_conexiones->mensajes_ajax($mensaje);										
					return $id_insertado;	
			
		}
		
		
		function ExisteBenefCliente($datos=array()){
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//	     Function: ConsultarBenefCliente
			//         Access: public  
			//      Argumento: $datos
			//	      Returns: Retorna un Booleano
			//	  Description: unción que se encarga de consultar si el cliente existe en la tabla de beneficiarios
			//	   Creado Por: Lic. Edgar A. Quintero
			// Fecha Creación: 06/02/2014							Fecha Última Modificación :
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			
			$ced_bene = $datos['tipperrif'].$datos['numpririf'].$datos['numterrif'];
			
			$ls_sql="SELECT *
					  FROM rpc_beneficiario
					 WHERE ced_bene='".$ced_bene."' ";				 
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$metodo = 'ConsultarBenefCliente';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_mensajes->message($mensaje);
				return false;				
			}
			
			if($rs_data->RecordCount()){return 'si';}
			
			return 'no';
					
		}
		
		function InsertarBenefCliente($datos=array()){
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//	     Function: InsertarBenefCliente
			//         Access: public  
			//      Argumento: $datos
			//	      Returns: Retorna un Booleano
			//	  Description: Función que se encarga de insertar el cliente en la tabla de beneficiarios
			//	   Creado Por: Lic. Edgar A. Quintero
			// Fecha Creación: 06/02/2014							Fecha Última Modificación :
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			
		    $resp = $this->ExisteBenefCliente($datos);
			if($resp===false){return false;} 
			if($resp=='si'){
				$resp = $this->ModificarBenefCliente($datos);
				if($resp===false){return false;} 
				return true;
			} 			
											
			$ls_sql="   LOCK TABLE rpc_beneficiario IN ACCESS EXCLUSIVE MODE;
						INSERT INTO rpc_beneficiario (   codemp, ced_bene, codpai, codest, codmun, 
														  codpar, codtipcta, rifben, nombene, apebene, dirbene, 
														  telbene, celbene, email, sc_cuenta, codbansig, codban, ctaban, 
														  foto, fecregben, nacben, numpasben, tipconben, 
														  tipcuebanben, sc_cuentarecdoc,cliente) 
						  SELECT  codemp, tipperrif||numpririf||numterrif, codpai, codest, codmun, 
								codpar, 's1', tipperrif||'-'||numpririf||'-'||numterrif, nombre_cliente, '', dircliente, 
								telcliente, '', emailcliente, sc_cuenta, '', '---', '', 
								NULL, fecreg, tipperrif, '', 'O', NULL, '','1'
						  FROM cxc_clientes
						 WHERE id_cliente='".$datos['id_cliente']."'";
					 
					 				 
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$metodo = 'InsertarBenefCliente';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_mensajes->message($mensaje);
				return false;				
			}
						
			return true;
					
		}
		
		function modificar_cliente($datos=array()){
					
					$datos['nombre_cliente']=str_replace('reemplazo_xandx','&',$datos['nombre_cliente']);
					$datos['cliente_abvr']=str_replace('reemplazo_xandx','&',$datos['cliente_abvr']);
					$datos['nombre_cliente']=str_replace('reemplazo_xmasx','+',$datos['nombre_cliente']);
					$datos['cliente_abvr']=str_replace('reemplazo_xmasx','+',$datos['cliente_abvr']);
					$datos['nombre_cliente']=addslashes($datos['nombre_cliente']);
					$datos['cliente_abvr']=addslashes($datos['cliente_abvr']); 
					 
					if(!$datos['id_cliente'] or !$datos['codcliente'] or !$datos['tipperrif'] or
					   !$datos['numpririf'] or $datos['numterrif']=='' or
					   $datos['id_tipo_cliente']=='' or !$datos['nombre_cliente'] or 
					   !$datos['dircliente'])
					{					
						//echo $datos['id_cliente'].','.$datos['codcliente'].','.$datos['tipperrif'].','.$datos['numpririf'].','.$datos['numterrif'].','.$datos['id_tipo_cliente'].','.$datos['nombre_cliente'].','.$datos['dircliente'].','.$datos['sc_cuenta'];
						$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					if(!$datos['id_cliente']){					
						$mensaje = 'Falta el id del cliente. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;				
					}
					
					 $opcionesx = array();
					 $opcionesx['criterio'] = 'validar_update';
					 $opcionesx = $datos;					 
					 $resultadox = $this->consulta_clientes($opcionesx);
					
					if(!$resultadox['cantidad']){
						$mensaje = 'El código ya esta siendo usado para otro cliente. <br><b>id:</b> '.$datos['id_cliente'];
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;					
					}
					$datos['codpai'] = $datos['codpai']?:'---';
					$datos['codest'] = $datos['codest']?:'---';
					$datos['codmun'] = $datos['codmun']?:'---';
					$datos['codciu'] = $datos['codciu']?:'---';
					$datos['codpar'] = $datos['codpar']?:'---';
					 $datos['numpririf'] = str_pad($datos['numpririf'],8,'0',STR_PAD_LEFT);
					 //$datos['codcliente'] = str_pad($datos['codcliente'],15,'0',STR_PAD_LEFT);
					 if(!$datos['limitecred']){$datos['limitecred']=0;}
					 if(!$datos['diascred']){$datos['diascred']=0;}
					 if(!$datos['descglob']){$datos['descglob']=0;}
					 $datos['limitecred'] = $this->formato_numerico_us($datos['limitecred']);
					 $datos['diascred'] = $this->formato_numerico_us($datos['diascred']);
					 $datos['descglob'] = $this->formato_numerico_us($datos['descglob']);
					 $datos['id_vend']	= $datos['id_vend']?$datos['id_vend']:0;
					 $datos['id_clasif_cliente'] = $datos['id_clasif_cliente']?$datos['id_clasif_cliente']:0;	
					
					
					$param['codsis'] = 'CXC';
					$param['seccion'] = 'CONFIG'; 					 
					if(!$datos['sc_cuenta']){
						$param['entry'] = 'CUENTA_CONTABLE_CLIENTES'; 
						$datos['sc_cuenta'] = $this->select_config($param);
						if(!$datos['sc_cuenta']){
							$mensaje = 'No se ha configurado ninguna cuenta contable por defecto para los clientes ';
							$this->io_conexiones->mensajes_ajax($mensaje,'error');
							return false;
						}
					}
					
					$datos['id_zona'] = $datos['id_zona']?:0;
					$datos['id_vend'] = $datos['id_vend']?:0;
					$datos['id_clasif_cliente'] = $datos['id_clasif_cliente']?:0;	
					
					
					
					$query_rs = " LOCK TABLE cxc_clientes IN ACCESS EXCLUSIVE MODE; ";
					$query_rs .= "UPDATE cxc_clientes
									  SET   codcliente ='".$datos['codcliente']."',		
											tipperrif ='".$datos['tipperrif']."',		
											numpririf ='".$datos['numpririf']."',		
											numterrif ='".$datos['numterrif']."',		
											nitcli ='".$datos['nitcli']."',
											id_tipo_cliente ='".$datos['id_tipo_cliente']."',
											nombre_cliente ='".$datos['nombre_cliente']."',
											cliente_abvr ='".$datos['cliente_abvr']."',
											id_zona ='".$datos['id_zona']."',
											id_vend ='".$datos['id_vend']."',
											id_clasif_cliente ='".$datos['id_clasif_cliente']."',
											dircliente ='".$datos['dircliente']."',
											direntrega ='".$datos['direntrega']."',
											codpai ='".$datos['codpai']."',
											codest ='".$datos['codest']."',
											codmun ='".$datos['codmun']."',
											codpar ='".$datos['codpar']."',
											codciu ='".$datos['codciu']."',
											codpostal ='".$datos['codpostal']."',
											faxcliente ='".$datos['faxcliente']."',
											telcliente ='".$datos['telcliente']."',
											emailcliente ='".$datos['emailcliente']."',
											webcliente ='".$datos['webcliente']."',
											observcliente ='".$datos['observcliente']."',
											sc_cuenta ='".$datos['sc_cuenta']."',
											estclient ='".$datos['estclient']."',
											limitecred ='".$datos['limitecred']."',
											diascred ='".$datos['diascred']."',
											descglob ='".$datos['descglob']."',											
											cedularesp ='".$datos['cedularesp']."',
											nombreresp ='".$datos['nombreresp']."',
											cargoresp ='".$datos['cargoresp']."',
											emailresp ='".$datos['emailresp']."',
											fecregcliente ='".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente'])."',
											fecmod ='".date("Y-m-d")."',
											usumod ='".$_SESSION["la_logusr"]."',
											horamod ='".date("H:i")."'								 							 					
							     WHERE id_cliente='".$datos['id_cliente']."'";
					
					
					
					$metodo = 'modificar_cliente';
					$opcionesx['ajax'] = '1';
					$opcionesx['imprimir'] = '1';
					$msj = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;	
					//echo $query_rs;								
					$resul=$this->io_conexiones->conexion($query_rs,$opcionesx,$msj,'update');			
					
					if($resul===false){
						$mensaje = 'Error de conexión con base de datos';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');			
						return false;												
							
					}
								
					$respuesta = $this->procesamiento_lotes($datos);					
					if($respuesta===false){return false;}		
					
					$resp = $this->ModificarBenefCliente($datos);					
					if($resp===false){return false;}
												
					$mensaje = 'El documento fué modificado exitosamente.';
					$this->io_conexiones->mensajes_ajax($mensaje);
					
					return;	
		
		}
		
		
		function ModificarBenefCliente($datos=array()){
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//	     Function: ModificarBenefCliente
			//         Access: public  
			//      Argumento: $datos
			//	      Returns: Retorna un Booleano
			//	  Description: Función que se encarga de modificar el cliente en la tabla de beneficiarios
			//	   Creado Por: Lic. Edgar A. Quintero
			// Fecha Creación: 06/02/2014							Fecha Última Modificación :
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			
		    $resp = $this->ExisteBenefCliente($datos);
			if($resp===false){return false;} 
			if($resp=='no'){
				$resp=$this->InsertarBenefCliente($datos);
				if($resp===false){return false;} 
				return true;
			} 			
			
			$datos['codpai'] = $datos['codpai']?$datos['codpai']:'---';
			$datos['codest'] = $datos['codest']?$datos['codest']:'---';
			$datos['codmun'] = $datos['codmun']?$datos['codmun']:'---';
			$datos['codpar'] = $datos['codpar']?$datos['codpar']:'---';
										
			$ls_sql="UPDATE rpc_beneficiario SET  codpai='".$datos['codpai']."', 
												  codest='".$datos['codest']."', 
												  codmun='".$datos['codmun']."', 
												  codpar='".$datos['codpar']."',											  
												  rifben='".$datos['tipperrif'].'-'.$datos['numpririf'].'-'.$datos['numterrif']."', 
												  nombene='".$datos['nombre_cliente']."', 
												  apebene='', 
												  dirbene='".$datos['dircliente']."', 
												  telbene='".$datos['telcliente']."', 												  
												  email='".$datos['emailcliente']."', 
												  sc_cuenta='".$datos['sc_cuenta']."',												  
												  nacben='".$datos['tipperrif']."',											  
												  cliente='1'
					 WHERE ced_bene='".$datos['tipperrif'].$datos['numpririf'].$datos['numterrif']."'";
					 
					 				 
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$metodo = 'ModificarBenefCliente';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_mensajes->message($mensaje);
				return false;				
			}
						
			return true;
					
		}
		
		function eliminar_cliente($datos=array()){
		
		
					if(!$datos['id_cliente'])
					{					
						$mensaje = 'Faltan datos para poder realizar la operación de modificación. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					$opciones['id_cliente'] = $datos['id_cliente'];					
					$opciones['criterio']  = 'por_id';										
					$existe = $this->consulta_clientes($opciones); 					 
										
					if(!$existe['cantidad']){
						$mensaje = 'No existe ningun cliente con ese identificador. <br><b>id:</b> '.$opciones['id_cliente'];
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;					
					}
					
					$resultado = $this->eliminar_descuentocliente($opciones);
					if($resultado===false){return false;}
					
					$query_rs = " LOCK TABLE cxc_clientes IN ACCESS EXCLUSIVE MODE; ";														
					$query_rs .= sprintf(" DELETE FROM cxc_clientes
									      WHERE id_cliente='%s' ",
										$datos['id_cliente']
								);
					
					$this->rs_data=$this->io_sql->select($query_rs);			
					
					if($this->rs_data==false)
					{
						$metodo = 'eliminar_cliente';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}
					
					if($this->io_sql->conn->Affected_Rows()<1){
							$mensaje = 'ERROR: No se pudo eliminar el cliente !. No hay filas afectadas por la operación.';
							$this->io_conexiones->mensajes_ajax($mensaje);				
							return false;
					}					
					
					$query_rs = " SELECT setval('cxc_clientes_id_cliente_seq', max(id_cliente)) FROM cxc_clientes; ";
					$this->rs_data=$this->io_sql->select($query_rs);			
					
					if($this->rs_data==false){						
						$metodo = 'eliminar_cliente';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
					}
				
					return true;
		
		}

		function procesamiento_lotes($opciones=array()){
				
					//SE INSERTAN LOS DESCUENTOS QUE TIENE EL CLIENTE
					if($opciones['id_desc']){										
						$respuesta = $this->procesar_descuentos($opciones);
						if($respuesta===false){							    											
							return false;						
						}							
					}
					else{
							$resp = $this->eliminar_descuentocliente($opciones);
							if($resp===false){return false;}
					
					}
												
					return true;
		
		}
		
		function procesar_descuentos($opciones=array()){
				
				$idx = explode(',',$opciones['id_desc']);
				
				$resp = $this->eliminar_descuentocliente($opciones);
				if($resp===false){return false;}
															
				for($i = 0; $i < sizeof($idx); $i++){
					$datos['id_desc']	= $idx[$i];
					$datos['id_cliente'] = $opciones['id_cliente'];
					$this->insertar_descuentocliente($datos);				
				}		
		
		}
		
		function consulta_descuentocliente($propiedades=array()){	
					
			switch($propiedades['criterio']){
												  
				  case "por_cliente":
						$sql_criterio = " WHERE id_cliente='".$propiedades['id_cliente']."' ";   
						break;			   
				 case "por_descuento":
						$sql_criterio = " WHERE id_desc='".$propiedades['id_desc']."' ";   
						break;										
			}			
								   
			$query_rs = "SELECT * FROM cxc_descuentos_clientes ".$sql_criterio;
			$clase = get_class($this);
			$metodo = 'consulta_descuentocliente';
			$param['arreglo'] = 'arreglo';
			$param['ajax'] = '1';
			$param['imprimir'] = '1';	
			$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
			return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
		}
		
		function insertar_descuentocliente($opciones=array()){
						
					if(!$opciones['id_desc'] or !$opciones['id_cliente'])
					{					
						echo 'ERROR: Faltan datos para insertar la información de descuento. <br>';
						return false;
					}
					 												
					$query_rs = "INSERT INTO cxc_descuentos_clientes(id_desc, id_cliente) VALUES ('".$opciones['id_desc']."','".$opciones['id_cliente']."');";		
					
					$this->rs_data=$this->io_sql->select($query_rs);			
				
					if($this->rs_data==false)
					{						
						$metodo = 'insertar_descuentocliente';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}	
					return true;							
		}
		

		
		function eliminar_descuentocliente($opciones=array()){
		
					
					$query_rs = "DELETE FROM cxc_descuentos_clientes WHERE id_cliente ='".$opciones['id_cliente']."'";				
					$this->rs_data=$this->io_sql->select($query_rs);			
				
					if($this->rs_data==false)
					{						
						$metodo = 'eliminar_datos_descuentos';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}
							
					return true;	
		
		}
		
		function buscar_descuentoscliente($opciones=array()){		
				  
				$query_rs = " SELECT * FROM cxc_descuentos_clientes dc 	  
							  INNER JOIN cxc_descuentos d ON d.id_desc = dc.id_desc
							  WHERE id_cliente='".$opciones['id_cliente']."'";
							  
												
				$this->rs_data=$this->io_sql->select($query_rs);
			
				if($this->rs_data==false)
				{						
					$metodo = 'buscar_descuentoscliente';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
						
				$datos['nomdesc'] = '';
				$datos['coddesc'] = '';
				$datos['id_desc'] = '';
				
				if(!$this->rs_data->RecordCount()){			
					return false;
				}
				
								
				if($this->rs_data->RecordCount()==1){			
					$datos['id_desc'] = $this->rs_data->fields['id_desc'];
					$datos['coddesc'] = $this->rs_data->fields['coddesc'];
					$datos['nomdesc'] = $this->rs_data->fields['nomdesc'].' ('.$this->rs_data->fields['coddesc'].')';
					return $datos;
				}
				
				while(!$this->rs_data->EOF){
							
					if($datos['id_desc']!='')
					{
						$datos['id_desc'] .= ','.$this->rs_data->fields['id_desc'];
						$datos['nomdesc'] .= "\n".$this->rs_data->fields['nomdesc'].' ('.$this->rs_data->fields['coddesc'].')';
					}
					else{
							$datos['id_desc']=$this->rs_data->fields['id_desc']; 
							$datos['nomdesc'] = $this->rs_data->fields['nomdesc'].' ('.$this->rs_data->fields['coddesc'].')';
					}
				
					$this->rs_data->MoveNext();
				}
				
				return $datos;	
		
		}
		
		
	function consulta_condpago($opciones=array()){	
		$opciones['criterio']=$opciones['criterio']?$opciones['criterio']:'por_listado';
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' AND id_condpago='".$opciones['id_condpago']."'";
					break;							  
			  case "por_condicion":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND  desccondpago ".$this->postgres_ilike."LIKE('%".$opciones['desccondpago']."%')  ";   
					break;
			 case "por_codigo":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND codcondpago  ".$this->postgres_ilike."LIKE('%".$opciones['codcondpago']."%')  ";   
					break;
			   case "por_codigo":
					$sql_criterio = " WHERE codcondpago='".$opciones['codcondpago']."' AND codemp='".$this->ls_codemp."'";    
					break;
			  case "valida_update":
					$sql_criterio = " WHERE codcondpago='".$opciones['codcondpago']."' AND codemp='".$this->ls_codemp."' AND id_condpago!='".$opciones['id_condpago']."' ";   
					break;				   
			  case "por_listado":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND desccondpago ".$this->postgres_ilike."LIKE('%".$opciones['desccondpago']."%')
									  AND codcondpago  ".$this->postgres_ilike."LIKE('%".$opciones['codcondpago']."%')  
									  ORDER BY codcondpago";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_condiciones_pago ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_condpago';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	
	function combo_condpago($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmb_condpago';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['id_condpago']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['desccondpago'];  $id_carga = $opciones['id_condpago'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_condpago();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				do { 				
					$combo .= '<option value="'.$resultado['fila']["id_condpago"].'">'.$resultado['fila']["desccondpago"].'</option>';								
				} while ($resultado['fila'] = $obj_sql->fetch_row($resultado['rs'])); 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function insertar_condpago($datos=array()){
				
				if(!$datos['codcondpago'] or !$datos['desccondpago'] or !$datos['operacion'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_condpago($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				$datos['diascred'] = $datos['diascred']?$datos['diascred']:0;							
				$ls_sql = "INSERT INTO cxc_condiciones_pago(codemp, codcondpago, desccondpago, operacion,diascred)
						   VALUES ('".$this->ls_codemp."', '".$datos['codcondpago']."', '".$datos['desccondpago']."', '".$datos['operacion']."', '".$datos['diascred']."'); ";
				
				$metodo = 'insertar_condpago';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'La condición de pago ha sido agregada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function modificar_condpago($datos=array()){				
				
				if(!$datos['id_condpago'] or !$datos['codcondpago'] or !$datos['desccondpago'] or !$datos['operacion'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_condpago($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				$datos['diascred'] = $datos['diascred']?$datos['diascred']:0;		
				$ls_sql = "UPDATE cxc_condiciones_pago
     					   SET codcondpago='".$datos['codcondpago']."',
						       desccondpago='".$datos['desccondpago']."', 
							   operacion='".$datos['operacion']."',
							   diascred='".$datos['diascred']."' 
						   WHERE id_condpago='".$datos['id_condpago']."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_condpago';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'La condición de pago ha sido modificada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function eliminar_condpago($datos){
				
				if(!$datos['id_condpago'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Eliminación. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_condpago';
				$resp = $this->consulta_facturas($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar una clasificación que esta siendo usada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
							
				$ls_sql = "DELETE FROM cxc_condiciones_pago WHERE id_condpago='".$datos['id_condpago']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_condpago';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Condiciones de Pago';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	
	function consulta_transporte($opciones=array()){	
		
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' AND id_transp='".$opciones['id_transp']."'";
					break;							  
			  case "por_desc":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND  desctransp ".$this->postgres_ilike."LIKE('%".$opciones['desctransp']."%')  ";   
					break;
			  case "por_codigo":
					$sql_criterio = " WHERE codtransp='".$opciones['codtransp']."' AND codemp='".$this->ls_codemp."'";    
					break;
			  case "valida_update":
					$sql_criterio = " WHERE codtransp='".$opciones['codtransp']."' AND codemp='".$this->ls_codemp."' AND id_transp!='".$opciones['id_transp']."' ";   
					break;			   
			  case "por_listado":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND desctransp ".$this->postgres_ilike."LIKE('%".$opciones['desctransp']."%')
									  AND codtransp  ".$this->postgres_ilike."LIKE('%".$opciones['codtransp']."%')  
									  ORDER BY codtransp";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_transporte ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_transporte';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	function combo_transporte($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmb_transporte';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['id_transp']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['desctransp'];  $id_carga = $opciones['id_transp'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_transporte();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				do { 				
					$combo .= '<option value="'.$resultado['fila']["id_transp"].'">'.$resultado['fila']["desctransp"].'</option>';								
				} while ($resultado['fila'] = $obj_sql->fetch_row($resultado['rs'])); 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function insertar_transporte($datos=array()){
				
				if(!$datos['codtransp'] or !$datos['desctransp'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_transporte($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
											
				$ls_sql = "INSERT INTO cxc_transporte(codemp, codtransp, desctransp)
						   VALUES ('".$this->ls_codemp."', '".$datos['codtransp']."', '".$datos['desctransp']."'); ";
				
				$metodo = 'insertar_transporte';
				$msjerror = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;				
				$param['ajax'] = 1;
				$param['imprimir'] = '1';
				$nuevo_id = $this->io_conexiones->conexion($ls_sql,$param,$msjerror,'insert','');							
				
				if($nuevo_id==false){return false;}
				
				$mensaje = 'El transporte ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function modificar_transporte($datos=array()){				
				
				if(!$datos['id_transp'] or !$datos['codtransp'] or !$datos['desctransp'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'valida_update';
				$resp = $this->consulta_transporte($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
						
				$ls_sql = "UPDATE cxc_transporte
     					   SET codtransp='".$datos['codtransp']."', desctransp='".$datos['desctransp']."' 
						   WHERE id_transp='".$datos['id_transp']." '";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_transp';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El transporte ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function eliminar_transporte($datos){
				
				if(!$datos['id_transp'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Eliminación. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_transp';
				$resp = $this->consulta_facturas($param);
				if($resp['cantidad']){
						$mensaje = '<b>ERROR:</b><br> No se puede eliminar un transporte que esta siendo usado en una factura! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
							
				$ls_sql = "DELETE FROM cxc_transporte WHERE id_transp='".$datos['id_transp']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_transporte';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Transportes';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	function InfoMonedaPorDefecto($datos=array()){
			
			$param['codsis'] = 'CXC';
		    $param['seccion'] = 'CONFIG';
		    $param['entry'] = 'MONEDA_X_DEFECTO';
		    $this->codmondef = $this->select_config($param);
			
			if(!$this->codmondef){
					$mensaje = "No se ha definido moneda por defecto !";
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
			}
			
			$datos['criterio'] = "por_codigo";
			$datos['codmon'] = $this->codmondef;
			$resp = $this->consulta_monedas($datos);
			if($resp===false){return false;}
			
			if(!$resp['rs']->RecordCount()){
					$mensaje = "No se econtró la información de la moneda por defecto !";
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
			}
			
			$this->tascamdef = $resp['rs']->fields['tascam'];
			$this->abrmondef = $resp['rs']->fields['abrmon'];
			
			return true;
	
	}
	
	function consulta_monedas($opciones=array()){	
		
		$query_rs = "";
		$sql_criterio = "";
		$opciones['criterio'] = $opciones['criterio']?$opciones['criterio']:'por_listado';
				
		switch($opciones['criterio']){
			   case "por_codigo":
					$query_rs =     " SELECT DISTINCT ON (dm.codmon) dm.codmon, dm.fecha, dm.tascam1, denmon, abrmon,dm.tascam1 as tascam
									  FROM sigesp_dt_moneda dm
									  INNER JOIN sigesp_moneda m ON m.codmon = dm.codmon
									  WHERE dm.codmon='".$opciones['codmon']."'
									  ORDER BY dm.codmon,dm.fecha DESC ";
					break;
					 
			  case "por_listado":
					$query_rs =     " SELECT DISTINCT ON (dm.codmon) dm.codmon, dm.fecha, dm.tascam1, denmon, abrmon,dm.tascam1 as tascam
									  FROM sigesp_dt_moneda dm
									  INNER JOIN sigesp_moneda m ON m.codmon = dm.codmon
									  ORDER BY dm.codmon,dm.fecha DESC ";
					break;			
		}
								   
		$query_rs = $query_rs.$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_monedas';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	function combo_monedas($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmb_monedas';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['codmon']){$carga = '- Seleccione -'; $id_carga = '';}
				else{$carga = $opciones['denmon'];  $id_carga = $opciones['codmon'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_monedas();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				do {
				 				
					if($resultado['fila']['abrmon']=='E'){$resultado['fila']['abrmon']='&#x20AC';}
					//if($resultado['fila']['abrmon']=='E'){$resultado['fila']['abrmon']='€';}				
					$combo .= '<option value="'.$resultado['fila']["codmon"].'">'.$resultado['fila']["denmon"].' ('.$resultado['fila']['abrmon'].')'.'</option>';								
				} while ($resultado['fila'] = $obj_sql->fetch_row($resultado['rs'])); 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function consulta_estfactura($opciones=array()){	
		
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' AND id_estfact='".$opciones['id_estfact']."'";
					break;							  
			  case "por_desc":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND  descestfact ".$this->postgres_ilike."LIKE('%".$opciones['descestfact']."%')  ";   
					break;
			 case "por_codigo":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND codestfact  ".$this->postgres_ilike."LIKE('%".$opciones['codestfact']."%')  ";   
					break;				   
			  case "por_listado":
					$sql_criterio = " WHERE  codemp = '".$this->ls_codemp."' 
					                  AND descestfact ".$this->postgres_ilike."LIKE('%".$opciones['descestfact']."%')
									  AND codestfact  ".$this->postgres_ilike."LIKE('%".$opciones['codestfact']."%')  
									  ORDER BY codestfact";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_estatus_factura ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_estfactura';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	function combo_estfactura($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmb_estfact';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['id_estfact']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['descestfact'];  $id_carga = $opciones['id_estfact'];}
				
				global $obj_sql;
				
				$resultado = $this->consulta_estfactura();
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				do {					
					$combo .= '<option value="'.$resultado['fila']["id_estfact"].'">'.$resultado['fila']["descestfact"].'</option>';								
				} while ($resultado['fila'] = $obj_sql->fetch_row($resultado['rs'])); 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	
	function consulta_articulos($opciones=array()){	
		
		$criteriosql="";
		$campos = ' * ';
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  a.codemp = '".$this->ls_codemp."' AND a.codart='".$opciones['coddetalle']."'";
					break;							  
			  case "por_desc":
					$sql_criterio = " WHERE  a.codemp = '".$this->ls_codemp."' 
					                  AND  a.denart ".$this->postgres_ilike."LIKE('%".$opciones['denart']."%')  ";   
					break;
			 case "por_codigo":
					$sql_criterio = " WHERE  a.codemp = '".$this->ls_codemp."' 
					                  AND a.codart  ".$this->postgres_ilike."LIKE('%".$opciones['coddetalle']."%')  ";   
					break;				   
			  case "por_listado":
					
					$creditos =  ', ( 
					                  SELECT SUM(porcar) 
									  FROM sigesp_cargos sc 
									  INNER JOIN siv_cargosarticulo ca ON ( ca.codcar = sc.codcar AND ca.codemp = sc.codemp AND ca.codart = a.codart )
									 ) AS porcentaje_iva '; 
					
					$campos = "a.*, a.codart, a.denart, aa.codalm, nomfisalm, a.codart, a.codart AS coddetalle, al.codalm AS codalm, u.codunimed AS codunimed, denunimed, COALESCE(existencia,0) AS existencia ".$creditos;			
					             				   
					if($opciones['codtipart']){$criteriosql .= " AND a.codtipart = '".$opciones['codtipart']."' ";}
					
					$sql_criterio = "  LEFT JOIN siv_tipoarticulo ta ON ta.codtipart=a.codtipart
									   LEFT JOIN scg_cuentas cc ON cc.sc_cuenta = a.sc_cuenta
									   LEFT JOIN siv_unidadmedida u ON u.codunimed = a.codunimed
									   LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp
									   INNER JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = a.codemp	
									   INNER JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp									  						   
									   WHERE  a.codemp = '".$this->ls_codemp."' 
					                   AND a.denart ".$this->postgres_ilike."LIKE('%".$opciones['denart']."%')
									   AND a.codart  ".$this->postgres_ilike."LIKE('%".$opciones['coddetalle']."%') 
									   ".$criteriosql." 
									   ORDER BY denart LIMIT 100";
					break;			
		}
								   
		$query_rs = "SELECT ".$campos." FROM siv_articulo a ".$sql_criterio;
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'consulta_articulos';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	function consulta_resumen_detalles_fact($opciones=array()){	
		
		$campos = ' * ';
		if(!$opciones['id_fact']){$opciones['id_fact']=0;}
		if(!$opciones['criterio']){$opciones['criterio'] = "por_detalle";}
		
		$datos = $opciones;
		$criterio="";
		
		if($opciones['codmon']){$criterio = $criterio." AND f.codmon = '".$opciones['codmon']."' ";}
		if($opciones['codser']){$criterio = $criterio." AND s.codser = '".$opciones['codser']."' AND d.id_tipodetalle = 'SERVI' ";}
		if($opciones['codart']){$criterio = $criterio." AND a.codart = '".$opciones['codart']."' AND d.id_tipodetalle = 'ARTIC' ";}
		if($opciones['codconfac']){$criterio = $criterio." AND c.codconfac = '".$opciones['codconfac']."' AND d.id_tipodetalle = 'CONCE' ";}
		if($opciones['soc_tiposervicio']){$criterio = $criterio." AND s.soc_tiposervicio = '".$opciones['codconfac']."' AND d.id_tipodetalle = 'SERVI' ";}
		if($opciones['cobrado']=='0' or $opciones['cobrado']=='1'){$criterio = $criterio." AND f.cobrado = '".$opciones['cobrado']."' ";}
		if($opciones['tipopecont']){$criterio = $criterio." AND f.tipopecont = '".$opciones['tipopecont']."' ";}
		
		if($datos['codcliente']){$criterio = $criterio." AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
		if($datos['nombre_cliente']){$criterio = $criterio." AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
		if($datos['numpririf']){$criterio = $criterio." AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
		if($datos['clasif_cliente']){$criterio = $criterio." AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
		if($datos['sc_cuenta']){$criterio = $criterio." AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
		if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['tipperrif']){$criterio = $criterio." AND c.tipperrif = '".$datos['tipperrif']."' ";}
		if($datos['codsuc']){$criterio = $criterio." AND f.codsuc = '".$datos['codsuc']."' ";}
		if($datos['codcaj']){$criterio = $criterio." AND f.codcaj = '".$datos['codcaj']."' ";}
		if($datos['id_tipo_cliente']){$criterio = $criterio." AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
		if($datos['id_zona']){$criterio = $criterio." AND c.id_zona = '".$datos['id_zona']."' ";}
		if($datos['id_vend']){$criterio = $criterio." AND c.id_vend = '".$datos['id_vend']."' ";}
		if($datos['id_cliente']){$criterio = $criterio." AND f.id_cliente = '".$datos['id_cliente']."' ";}
		if($datos['estclient']){$criterio = $criterio." AND c.estclient = '".$datos['estclient']."' ";}			
		if($datos['nombreresp']){$criterio = $criterio." AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
		if($datos['nombre_pais']){$criterio = $criterio." AND despai ".$this->postgres_ilike."LIKE('%".$datos['nombre_pais']."%') ";}
		if($datos['entidad_federal']){$criterio = $criterio." AND desest ".$this->postgres_ilike."LIKE('%".$datos['entidad_federal']."%') ";}
		if($datos['municipio']){$criterio = $criterio." AND denmun ".$this->postgres_ilike."LIKE('%".$datos['municipio']."%') ";}
		if($datos['parroquia']){$criterio = $criterio." AND denpar ".$this->postgres_ilike."LIKE('%".$datos['parroquia']."%') ";}
		if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['fecfact_d']){if($datos['fecfact_h'] == ''){$datos['fecfact_h'] = $datos['fecfact_d'];}$criterio = $criterio." AND f.fecfact BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_h'])."'  ";}
		if($datos['id_transp']){$criterio = $criterio." AND f.id_transp = '".$datos['id_transp']."' ";}
		if($datos['codmon']){$criterio = $criterio." AND f.codmon = '".$datos['codmon']."' ";}
		if($datos['id_estfact']){$criterio = $criterio." AND f.id_estfact = '".$datos['id_estfact']."' ";}
		if($datos['id_condpago']){$criterio = $criterio." AND f.id_condpago = '".$datos['id_condpago']."' ";}
		if($datos['numfact']){$criterio = $criterio." AND f.numfact = '".$datos['numfact']."' ";}
		if($datos['codfact']){$criterio = $criterio." AND f.codfact ".$this->postgres_ilike."LIKE('%".$datos['codfact']."%') ";}	
		if($datos['nomvend']){$criterio = $criterio." AND v.nomvend ".$this->postgres_ilike."LIKE('%".$datos['nomvend']."%') ";}			
		if($datos['numcont']){$criterio = $criterio." AND f.numcont ".$this->postgres_ilike."LIKE('%".$datos['numcont']."%') ";}
		if($datos['id_giros']){$criterio = $criterio." AND g.id_giros = '".$datos['id_giros']."' ";}		
		if($datos['cobrado']=='0' or $datos['cobrado']=='1'){$criterio = $criterio." AND f.cobrado = '".$datos['cobrado']."' ";}	

		
		$ls_sql = " 							
					    SELECT CASE WHEN d.id_tipodetalle = 'SERVI' THEN s.denser 
									WHEN d.id_tipodetalle = 'ARTIC' THEN a.denart
									WHEN d.id_tipodetalle = 'CONCE' THEN c.denconfac
									ELSE '' 
									END AS dendetalle,
									d.id_tipodetalle,
									d.coddetalle,d.codunimed,
									f.codmon, f.tascam,
									denmon,abrmon,
									sum(d.precio_detalle*cantidad_detalle) as subtot_detalle,
									d.porciva,
									sum(d.iva_detalle) as iva_detalle,
									sum(d.neto_detalle) as neto_detalle,
									sum(cantidad_detalle) AS cantidad_detalle,
									(sum(d.precio_detalle*cantidad_detalle) + sum(d.iva_detalle)) as neto					
						FROM cxc_detalle d
						LEFT JOIN cxc_factura f ON f.id_fact = d.id_fact 
									   AND f.codproceso = d.codproceso
						LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
									AND f.codemp = a.codemp 
										AND d.id_tipodetalle = 'ARTIC' 
						LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
											 AND d.id_tipodetalle = 'SERVI'
						LEFT JOIN cxc_conceptofac c ON c.codconfac=d.coddetalle 
											   AND d.id_tipodetalle = 'CONCE' 
						LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
						LEFT JOIN siv_unidadmedida u ON u.codunimed = d.codunimed 
						LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp 
						LEFT JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = a.codemp AND d.codalm = aa.codalm 
						LEFT JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp										 
						LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
													AND suc.codsuc = f.codsuc
						LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
									   AND caj.codsuc = f.codsuc
									   AND caj.codcaj = f.codcaj
						LEFT JOIN cxc_clientes cl ON cl.id_cliente = f.id_cliente									  
						LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
						LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
						LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
						LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
						LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
						LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = cl.id_tipo_cliente
						LEFT JOIN cxc_zonas z ON z.id_zona = cl.id_zona
						LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = cl.id_clasif_cliente
						LEFT JOIN cxc_vendedores vc ON vc.id_vend = cl.id_vend
						LEFT JOIN scg_cuentas cu ON cu.codemp = cl.codemp AND cu.sc_cuenta = cl.sc_cuenta AND status='C'
						LEFT JOIN sigesp_pais pai ON pai.codpai = cl.codpai
						LEFT JOIN sigesp_estados e ON e.codpai = cl.codpai AND e.codest = cl.codest 
						LEFT JOIN sigesp_municipio m ON m.codpai = cl.codpai AND m.codest = cl.codest AND m.codmun = cl.codmun
						LEFT JOIN sigesp_parroquia pa ON pa.codpai = cl.codpai AND pa.codest = cl.codest AND pa.codmun = cl.codmun AND pa.codpar = cl.codpar
						WHERE d.codproceso='FACTURA' 
						  AND f.id_estfact != '7'
							".$criterio."
						GROUP BY d.coddetalle,d.id_tipodetalle,s.denser,a.denart,c.denconfac,d.coddetalle,d.codunimed,d.porciva,f.codmon, f.tascam,denmon,abrmon
				";
		
		$rs_data=$this->io_sql->select($ls_sql);			
		//echo $ls_sql.'<br><br>';
		if($rs_data==false){					
			$metodo = 'consulta_resumen_detalles_fact';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;					
		}
		
		return $rs_data;
		
	}
	
	
	function consulta_detalles_fact($opciones=array()){	
	
		$campos = ' * ';
		if(!$opciones['id_fact']){$opciones['id_fact']=0;}
		if(!$opciones['criterio']){$opciones['criterio'] = "por_detalle";}
		
		$datos = $opciones;
		
		switch($opciones['criterio']){
			
			case "por_cant_articulos":
					$campos = ' id_tipodetalle,coddetalle ';
					$sql_criterio = " WHERE d.id_fact='".$opciones['id_fact']."' 
					                    AND  id_tipodetalle='ARTIC' ";   
					break;
				  
			 case "renglon":
					$sql_criterio = " WHERE  a.codemp = '".$this->ls_codemp."' 
					                  AND d.id_fact='".$opciones['id_fact']."' AND  renglon='".$opciones['renglon']."' ";   
					break;
					
			 case "almacenes":
			        $campos = ' SELECT DISTINCT codalm ';
					$sql_criterio = " WHERE  a.codemp = '".$this->ls_codemp."' 
					                  AND d.id_fact='".$opciones['id_fact']."'  ";   
					break;
			 				   
			  case "por_detalle":
					$campos = "    CASE WHEN d.id_tipodetalle = 'SERVI' THEN s.denser 
										WHEN d.id_tipodetalle = 'ARTIC' THEN a.denart
										WHEN d.id_tipodetalle = 'CONCE' THEN c.denconfac
										ELSE ''
								   END AS dendetalle,
								   d.*
								  , nomfisalm, denunimed, f.numfact, f.fecfact, a.spi_cuenta, s.spg_cuenta,comentario, c.denconfac, c.scg_cuenta as scg_cuenta_conc ";
					
					$sql_criterio = "    LEFT JOIN cxc_factura f ON f.id_fact = d.id_fact 
																AND f.codproceso = d.codproceso
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND f.codemp = a.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN cxc_conceptofac c ON c.codconfac=d.coddetalle 
										                            AND d.id_tipodetalle = 'CONCE' 
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
										 LEFT JOIN siv_unidadmedida u ON u.codunimed = d.codunimed 
										 LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp 
										 LEFT JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = a.codemp AND d.codalm = aa.codalm 
										 LEFT JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp 
										WHERE d.id_fact='".$opciones['id_fact']."'
										AND d.codproceso='FACTURA' 
										ORDER BY renglon; ";
					break;
			
			case "por_detalle_doc":
					$campos = "  
					       			CASE WHEN d.id_tipodetalle = 'SERVI' THEN s.denser 
										WHEN d.id_tipodetalle = 'ARTIC' THEN a.denart 
										WHEN d.id_tipodetalle = 'CONCE' THEN c.denconfac 
										ELSE '' END AS dendetalle, 
										d.id_fact, d.id_tipodetalle, d.codproceso, d.renglon, d.coddetalle, d.codunimed, 
									d.codalm, 
									d.cantidad_detalle AS cantidad_orig, 
									d.precio_detalle, 
									d.porcdesc_detalle, 
									d.desc_detalle, 
									d.porciva, 
									d.iva_detalle AS iva_orig, 
									d.neto_detalle AS neto_orig, 
									d.otros_detalle, 
									d.coduniadm, 
									d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5, d.estcla, 
									d.codfuefin, d.comentario, 
										nomfisalm, denunimed, 
										f.numfact, f.fecfact, a.spi_cuenta, 
										s.spg_cuenta,comentario, c.denconfac, c.scg_cuenta as scg_cuenta_conc,
									(
										SELECT COALESCE(SUM(dd.cantidad_detdoc),0) 
										  FROM cxc_dt_documento dd 
										 WHERE dd.id_fact = d.id_fact
										   AND dd.renglon = d.renglon
										   AND dd.coddetalle = d.coddetalle		       
										) AS cantidad_dev,
										(
										SELECT COALESCE(SUM(dd.iva_detdoc),0) 
										  FROM cxc_dt_documento dd 
										 WHERE dd.id_fact = d.id_fact
										   AND dd.renglon = d.renglon
										   AND dd.coddetalle = d.coddetalle		       
										) AS iva_dev,
										(
										SELECT COALESCE(SUM(dd.neto_detdoc),0) 
										  FROM cxc_dt_documento dd 
										 WHERE dd.id_fact = d.id_fact
										   AND dd.renglon = d.renglon
										   AND dd.coddetalle = d.coddetalle		       
										) AS neto_dev,
								   (
										SELECT d.cantidad_detalle - COALESCE(SUM(dd.cantidad_detdoc),0) 
										  FROM cxc_dt_documento dd 
										 WHERE dd.id_fact = d.id_fact
										   AND dd.renglon = d.renglon
										   AND dd.coddetalle = d.coddetalle		       
										) AS cantidad_detalle,
										(
										SELECT d.iva_detalle - COALESCE(SUM(dd.iva_detdoc),0) 
										  FROM cxc_dt_documento dd 
										 WHERE dd.id_fact = d.id_fact
										   AND dd.renglon = d.renglon
										   AND dd.coddetalle = d.coddetalle		       
										) AS iva_detalle,
										(
										SELECT d.neto_detalle - COALESCE(SUM(dd.neto_detdoc),0) 
										  FROM cxc_dt_documento dd 
										 WHERE dd.id_fact = d.id_fact
										   AND dd.renglon = d.renglon
										   AND dd.coddetalle = d.coddetalle		       
										) AS neto_detalle          
						      ";
					
					$sql_criterio = "    LEFT JOIN cxc_factura f ON f.id_fact = d.id_fact 
																AND f.codproceso = d.codproceso
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND f.codemp = a.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN cxc_conceptofac c ON c.codconfac=d.coddetalle 
										                            AND d.id_tipodetalle = 'CONCE' 
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
										 LEFT JOIN siv_unidadmedida u ON u.codunimed = d.codunimed 
										 LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp 
										 LEFT JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = a.codemp AND d.codalm = aa.codalm 
										 LEFT JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp 
										WHERE d.id_fact='".$opciones['id_fact']."'
										AND d.codproceso='FACTURA' 
										ORDER BY renglon; ";
					break;
			
			case "por_listado":
					if($opciones['codmon']){$criterio = $criterio." AND f.codmon = '".$opciones['codmon']."' ";}
					if($opciones['codser']){$criterio = $criterio." AND s.codser = '".$opciones['codser']."' AND d.id_tipodetalle = 'SERVI' ";}
					if($opciones['codart']){$criterio = $criterio." AND a.codart = '".$opciones['codart']."' AND d.id_tipodetalle = 'ARTIC' ";}
					if($opciones['codconfac']){$criterio = $criterio." AND c.codconfac = '".$opciones['codconfac']."' AND d.id_tipodetalle = 'CONCE' ";}
					if($opciones['soc_tiposervicio']){$criterio = $criterio." AND s.soc_tiposervicio = '".$opciones['codconfac']."' AND d.id_tipodetalle = 'SERVI' ";}
					if($opciones['cobrado']=='0' or $opciones['cobrado']=='1'){$criterio = $criterio." AND f.cobrado = '".$opciones['cobrado']."' ";}
					if($opciones['tipopecont']){$criterio = $criterio." AND f.tipopecont = '".$opciones['tipopecont']."' ";}
					
					if($datos['codcliente']){$criterio = $criterio." AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
					if($datos['nombre_cliente']){$criterio = $criterio." AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
					if($datos['numpririf']){$criterio = $criterio." AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
					if($datos['clasif_cliente']){$criterio = $criterio." AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
					if($datos['sc_cuenta']){$criterio = $criterio." AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
					if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
					if($datos['tipperrif']){$criterio = $criterio." AND c.tipperrif = '".$datos['tipperrif']."' ";}
					if($datos['codsuc']){$criterio = $criterio." AND f.codsuc = '".$datos['codsuc']."' ";}
					if($datos['codcaj']){$criterio = $criterio." AND f.codcaj = '".$datos['codcaj']."' ";}
					if($datos['id_tipo_cliente']){$criterio = $criterio." AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
					if($datos['id_zona']){$criterio = $criterio." AND c.id_zona = '".$datos['id_zona']."' ";}
					if($datos['id_vend']){$criterio = $criterio." AND c.id_vend = '".$datos['id_vend']."' ";}
					if($datos['id_cliente']){$criterio = $criterio." AND f.id_cliente = '".$datos['id_cliente']."' ";}
					if($datos['estclient']){$criterio = $criterio." AND c.estclient = '".$datos['estclient']."' ";}			
					if($datos['nombreresp']){$criterio = $criterio." AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
					if($datos['nombre_pais']){$criterio = $criterio." AND despai ".$this->postgres_ilike."LIKE('%".$datos['nombre_pais']."%') ";}
					if($datos['entidad_federal']){$criterio = $criterio." AND desest ".$this->postgres_ilike."LIKE('%".$datos['entidad_federal']."%') ";}
					if($datos['municipio']){$criterio = $criterio." AND denmun ".$this->postgres_ilike."LIKE('%".$datos['municipio']."%') ";}
					if($datos['parroquia']){$criterio = $criterio." AND denpar ".$this->postgres_ilike."LIKE('%".$datos['parroquia']."%') ";}
					if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
					if($datos['fecfact_d']){if($datos['fecfact_h'] == ''){$datos['fecfact_h'] = $datos['fecfact_d'];}$criterio = $criterio." AND f.fecfact BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_h'])."'  ";}
					if($datos['id_transp']){$criterio = $criterio." AND f.id_transp = '".$datos['id_transp']."' ";}
					if($datos['codmon']){$criterio = $criterio." AND f.codmon = '".$datos['codmon']."' ";}
					if($datos['id_estfact']){$criterio = $criterio." AND f.id_estfact = '".$datos['id_estfact']."' ";}
					if($datos['id_condpago']){$criterio = $criterio." AND f.id_condpago = '".$datos['id_condpago']."' ";}
					if($datos['numfact']){$criterio = $criterio." AND f.numfact = '".$datos['numfact']."' ";}
					if($datos['codfact']){$criterio = $criterio." AND f.codfact ".$this->postgres_ilike."LIKE('%".$datos['codfact']."%') ";}	
					if($datos['nomvend']){$criterio = $criterio." AND v.nomvend ".$this->postgres_ilike."LIKE('%".$datos['nomvend']."%') ";}			
					if($datos['numcont']){$criterio = $criterio." AND f.numcont ".$this->postgres_ilike."LIKE('%".$datos['numcont']."%') ";}
					if($datos['id_giros']){$criterio = $criterio." AND g.id_giros = '".$datos['id_giros']."' ";}		
					if($datos['cobrado']=='0' or $datos['cobrado']=='1'){$criterio = $criterio." AND f.cobrado = '".$datos['cobrado']."' ";}	
					
					
					$campos = "    CASE WHEN d.id_tipodetalle = 'SERVI' THEN s.denser 
										WHEN d.id_tipodetalle = 'ARTIC' THEN a.denart
										WHEN d.id_tipodetalle = 'CONCE' THEN c.denconfac
										ELSE ''
								   END AS dendetalle,
								   d.*
								  , nomfisalm, denunimed, f.numfact, f.fecfact, a.spi_cuenta, s.spg_cuenta,comentario, c.denconfac, c.scg_cuenta as scg_cuenta_conc,
								    f.*, cl.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago,cp.diascred as diascredito, descestfact,cp.operacion as opespi,
					                suc.nomsuc,suc.sucmatriz,suc.sigsuc,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj ";
					
					$sql_criterio = "    LEFT JOIN cxc_factura f ON f.id_fact = d.id_fact 
																AND f.codproceso = d.codproceso
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND f.codemp = a.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN cxc_conceptofac c ON c.codconfac=d.coddetalle 
										                            AND d.id_tipodetalle = 'CONCE' 
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
										 LEFT JOIN siv_unidadmedida u ON u.codunimed = d.codunimed 
										 LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp 
										 LEFT JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = a.codemp AND d.codalm = aa.codalm 
										 LEFT JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp										 
										 LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
										  LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
																 AND caj.codsuc = f.codsuc
																 AND caj.codcaj = f.codcaj
										  LEFT JOIN cxc_clientes cl ON cl.id_cliente = f.id_cliente									  
										  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
										  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
										  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
										  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
										  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
										  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = cl.id_tipo_cliente
										  LEFT JOIN cxc_zonas z ON z.id_zona = cl.id_zona
										  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = cl.id_clasif_cliente
										  LEFT JOIN cxc_vendedores vc ON vc.id_vend = cl.id_vend
										  LEFT JOIN scg_cuentas cu ON cu.codemp = cl.codemp AND cu.sc_cuenta = cl.sc_cuenta AND status='C'
										  LEFT JOIN sigesp_pais pai ON pai.codpai = cl.codpai
										  LEFT JOIN sigesp_estados e ON e.codpai = cl.codpai AND e.codest = cl.codest 
										  LEFT JOIN sigesp_municipio m ON m.codpai = cl.codpai AND m.codest = cl.codest AND m.codmun = cl.codmun
										  LEFT JOIN sigesp_parroquia pa ON pa.codpai = cl.codpai AND pa.codest = cl.codest AND pa.codmun = cl.codmun AND pa.codpar = cl.codpar

										 
										WHERE d.codproceso='FACTURA' 
										".$criterio."
										ORDER BY d.coddetalle ";
					break;
			
			case "por_detalle_contable":
					$campos = "	 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
								      WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta 
									  WHEN id_tipodetalle='CONCE' THEN scgc.scg_cuenta    
							     ELSE ''
								 END AS sc_cuenta,								
								 sum(precio_detalle*cantidad_detalle) AS monto								 
								  ";
					
					$sql_criterio = "    INNER JOIN cxc_factura f ON f.id_fact = d.id_fact
																 AND f.codproceso = d.codproceso 
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND f.codemp = a.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = a.spi_cuenta										                          
										 LEFT JOIN spi_cuentas_estructuras cea ON spia.codemp = cea.codemp
										                                       AND spia.spi_cuenta = cea.spi_cuenta
																			   AND d.estcla = cea.estcla																   
																			   AND d.codestpro1 = cea.codestpro1
																			   AND d.codestpro2 = cea.codestpro2
																			   AND d.codestpro3 = cea.codestpro3
																			   AND d.codestpro4 = cea.codestpro4
																			   AND d.codestpro5 = cea.codestpro5
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = s.spg_cuenta										                         
										 LEFT JOIN spi_cuentas_estructuras ces ON spis.codemp = ces.codemp
										                                      AND spis.spi_cuenta = ces.spi_cuenta 
																			  AND d.estcla = ces.estcla																  
																			  AND d.codestpro1 = ces.codestpro1
																			  AND d.codestpro2 = ces.codestpro2
																			  AND d.codestpro3 = ces.codestpro3
																			  AND d.codestpro4 = ces.codestpro4
																			  AND d.codestpro5 = ces.codestpro5
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser
										 LEFT JOIN cxc_conceptofac scgc ON scgc.codconfac=d.coddetalle 
										                               AND d.id_tipodetalle = 'CONCE' 										
										 WHERE d.id_fact='".$opciones['id_fact']."'
										 AND d.codproceso='FACTURA' 
										 GROUP BY 1
										 ORDER BY 1; ";
					break;
			case "por_detalle_spi":
					$campos = "	 CASE WHEN id_tipodetalle='ARTIC' THEN a.spi_cuenta
								      WHEN id_tipodetalle='SERVI' THEN s.spg_cuenta     
							     ELSE ''
								 END AS spi_cuenta,
								 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
								      WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta     
							     ELSE ''
								 END AS sc_cuenta,
								 d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
								 sum(precio_detalle*cantidad_detalle) AS monto								 
								  ";
					
					$sql_criterio = "    INNER JOIN cxc_factura f ON f.id_fact = d.id_fact
																 AND f.codproceso = d.codproceso 
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND f.codemp = a.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = a.spi_cuenta										                          
										 LEFT JOIN spi_cuentas_estructuras cea ON spia.codemp = cea.codemp
										                                       AND spia.spi_cuenta = cea.spi_cuenta
																			   AND d.estcla = cea.estcla																   


																			   AND d.codestpro1 = cea.codestpro1
																			   AND d.codestpro2 = cea.codestpro2
																			   AND d.codestpro3 = cea.codestpro3
																			   AND d.codestpro4 = cea.codestpro4
																			   AND d.codestpro5 = cea.codestpro5
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = s.spg_cuenta										                         
										 LEFT JOIN spi_cuentas_estructuras ces ON spis.codemp = ces.codemp
										                                      AND spis.spi_cuenta = ces.spi_cuenta 
																			  AND d.estcla = ces.estcla																  
																			  AND d.codestpro1 = ces.codestpro1
																			  AND d.codestpro2 = ces.codestpro2
																			  AND d.codestpro3 = ces.codestpro3
																			  AND d.codestpro4 = ces.codestpro4
																			  AND d.codestpro5 = ces.codestpro5
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
										 WHERE d.id_fact='".$opciones['id_fact']."'
										 AND d.codproceso='FACTURA'
										 AND d.id_tipodetalle!='CONCE' 
										 GROUP BY 1,2,3,4,5,6,7,8
										 ORDER BY 1; ";
					break;
			
			case "por_detalle_contable_iva":
					$campos = "	 CASE WHEN id_tipodetalle='ARTIC' THEN ac.spg_cuenta
								      WHEN id_tipodetalle='SERVI' THEN sc.spg_cuenta     
							     ELSE ''
								 END AS spg_cuenta,
								 CASE WHEN id_tipodetalle='ARTIC' THEN spga.sc_cuenta
								      WHEN id_tipodetalle='SERVI' THEN spgs.sc_cuenta     
							     ELSE ''
								 END AS sc_cuenta,
								 d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
								 sum(iva_detalle) AS monto								 
								  ";
					
					$sql_criterio = "    INNER JOIN cxc_factura f ON f.id_fact = d.id_fact 
					    										 AND f.codproceso = d.codproceso
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND f.codemp = a.codemp 
																 AND d.id_tipodetalle = 'ARTIC'	
										 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
										 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
										 LEFT JOIN spg_cuentas spga ON spga.spg_cuenta = ac.spg_cuenta
										                           AND spga.estcla = d.estcla																   
																   AND spga.codestpro1 = d.codestpro1
																   AND spga.codestpro2 = d.codestpro2
																   AND spga.codestpro3 = d.codestpro3
																   AND spga.codestpro4 = d.codestpro4
																   AND spga.codestpro5 = d.codestpro5
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'										
			  							 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
										 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
										 LEFT JOIN spg_cuentas spgs ON spgs.spg_cuenta = sc.spg_cuenta
										                           AND spgs.estcla = d.estcla																   
																   AND spgs.codestpro1 = d.codestpro1
																   AND spgs.codestpro2 = d.codestpro2
																   AND spgs.codestpro3 = d.codestpro3
																   AND spgs.codestpro4 = d.codestpro4
																   AND spgs.codestpro5 = d.codestpro5							
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
										 WHERE d.id_fact='".$opciones['id_fact']."'
										 AND d.codproceso='FACTURA' 
										 GROUP BY 1,2,3,4,5,6,7,8
										 ORDER BY 1; ";
					break;
			
			case "por_detalle_inv":
					$campos = "    sum(cantidad_detalle) AS cantidad_detalle,
								   d.codalm,
								   MAX(d.id_fact) AS id_fact, 
								   MAX(d.id_tipodetalle) AS id_tipodetalle, 
								   MAX(d.codproceso) AS codproceso, 
								   MAX(coddetalle) AS coddetalle, 
								   MAX(d.codunimed) AS codunimed, 								       
								   MAX(precio_detalle) AS precio_detalle, 
								   MAX(f.numfact) AS numfact, 
								   MAX(f.fecfact) AS fecfact ";
					
					$sql_criterio = "    LEFT JOIN cxc_factura f ON f.id_fact = d.id_fact
																AND f.codproceso = d.codproceso 
										 WHERE d.id_fact='".$opciones['id_fact']."'
										 AND d.codproceso='FACTURA'
										 AND id_tipodetalle='ARTIC' 
										 GROUP BY coddetalle, d.codalm
										 ORDER BY coddetalle; ";
					break;						
		}
		
			   
		$query_rs = "SELECT ".$campos." FROM cxc_detalle d ".$sql_criterio;
		//echo $query_rs.'<br><br><br>'; exit();			
		
		$clase = get_class($this);
		$metodo = 'consulta_detalles_fact';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;	
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
					
		return $respuesta;
	}	
	
	
	function consulta_facturas($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
		//print_r($propiedades);
		$joinadd='';
		$datos = $propiedades;
		$columna = $datos['orden'];
		if($datos['orden']==""){$columna='nombre_cliente';}
		if($datos['codcliente']){$criterio = $criterio." AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
		if($datos['nombre_cliente']){$criterio = $criterio." AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
		if($datos['numpririf']){$criterio = $criterio." AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
		if($datos['clasif_cliente']){$criterio = $criterio." AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
		if($datos['sc_cuenta']){$criterio = $criterio." AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
		if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['tipperrif']){$criterio = $criterio." AND c.tipperrif = '".$datos['tipperrif']."' ";}
		if($datos['codsuc']){$criterio = $criterio." AND f.codsuc = '".$datos['codsuc']."' ";}
		if($datos['codcaj']){$criterio = $criterio." AND f.codcaj = '".$datos['codcaj']."' ";}
		if($datos['id_tipo_cliente']){$criterio = $criterio." AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
		if($datos['id_zona']){$criterio = $criterio." AND c.id_zona = '".$datos['id_zona']."' ";}
		if($datos['id_vend']){$criterio = $criterio." AND c.id_vend = '".$datos['id_vend']."' ";}
		if($datos['id_cliente']){$criterio = $criterio." AND f.id_cliente = '".$datos['id_cliente']."' ";}
		if($datos['estclient']){$criterio = $criterio." AND c.estclient = '".$datos['estclient']."' ";}			
		if($datos['nombreresp']){$criterio = $criterio." AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
		if($datos['nombre_pais']){$criterio = $criterio." AND despai ".$this->postgres_ilike."LIKE('%".$datos['nombre_pais']."%') ";}
		if($datos['entidad_federal']){$criterio = $criterio." AND desest ".$this->postgres_ilike."LIKE('%".$datos['entidad_federal']."%') ";}
		if($datos['municipio']){$criterio = $criterio." AND denmun ".$this->postgres_ilike."LIKE('%".$datos['municipio']."%') ";}
		if($datos['parroquia']){$criterio = $criterio." AND denpar ".$this->postgres_ilike."LIKE('%".$datos['parroquia']."%') ";}
		if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['fecfact_d']){if($datos['fecfact_h'] == ''){$datos['fecfact_h'] = $datos['fecfact_d'];}$criterio = $criterio." AND f.fecfact BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_h'])."'  ";}
		if($datos['id_transp']){$criterio = $criterio." AND f.id_transp = '".$datos['id_transp']."' ";}
		if($datos['codmon']){$criterio = $criterio." AND f.codmon = '".$datos['codmon']."' ";}
		if($datos['id_estfact']){$criterio = $criterio." AND f.id_estfact = '".$datos['id_estfact']."' ";}
	   	if($datos['id_condpago']){$criterio = $criterio." AND f.id_condpago = '".$datos['id_condpago']."' ";}
		if($datos['numfact']){$criterio = $criterio." AND f.numfact = '".$datos['numfact']."' ";}
		if($datos['codfact']){$criterio = $criterio." AND f.codfact ".$this->postgres_ilike."LIKE('%".$datos['codfact']."%') ";}	
		if($datos['nomvend']){$criterio = $criterio." AND v.nomvend ".$this->postgres_ilike."LIKE('%".$datos['nomvend']."%') ";}			
		if($datos['numcont']){$criterio = $criterio." AND f.numcont ".$this->postgres_ilike."LIKE('%".$datos['numcont']."%') ";}
		if($datos['id_giros']){$criterio = $criterio." AND g.id_giros = '".$datos['id_giros']."' ";}		
		if($datos['cobrado']=='0' or $datos['cobrado']=='1'){$criterio = $criterio." AND f.cobrado = '".$datos['cobrado']."' ";}		
		if($datos['tipopecont']){$criterio = $criterio." AND f.tipopecont = '".$datos['tipopecont']."' ";}		
		if($datos['stagiros']){$criterio = $criterio." AND g.stagiros = '".$datos['stagiros']."' ";}
		if($propiedades['criterio']=="por_listado_anulacion"){$criterio .= " AND anulado='0' "; $propiedades['criterio']="por_listado";}
		if($propiedades['criterio']=="por_listado_reverso_anulacion"){$criterio .= " AND anulado='1' "; $propiedades['criterio']="por_listado";}
		
		if($datos['fecregcliente_d']){
			if($datos['fecregcliente_h'] == ''){$datos['fecregcliente_h'] = $datos['fecregcliente_d'];}
			$criterio = $criterio." AND c.fecregcliente BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_h'])."'  ";
		 }	
			 
		if($datos['fecinigiros_d']){
			if($datos['fecinigiros_h'] == ''){$datos['fecinigiros_h'] = $datos['fecinigiros_d'];}
			$criterio = $criterio." AND g.fecinigiros BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecinigiros_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecinigiros_h'])."'  ";
		}
		
		if($datos['total']){
						
					if(!$datos['criterio_monto']){$datos['criterio_monto']='igual';}
					switch($datos['criterio_monto']){
							case 'igual':
							       $criterio = $criterio." AND f.total = '".$datos['total']."' ";
								   break;							
							case 'mayor':
							       $criterio = $criterio." AND f.total > '".$datos['total']."' ";
								   break;
							case 'menor':
							       $criterio = $criterio." AND f.total < '".$datos['total']."' ";
								   break;					
					}
					
		}
			 	 
		$campos = ' * ';
		if(!$propiedades['id_fact']){$propiedades['id_fact']=0;}
		
		$this->codproceso = $this->codproceso?$this->codproceso:'FACTURA';
		
		switch($propiedades['criterio']){
				  
			  case "por_id":
			        $campos = " f.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, 
					            descestfact, desest,denmun,denpar,cp.operacion as opespi,cp.diascred as diascredito,
								suc.nomsuc,suc.sucmatriz,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj,suc.sigsuc,
								
								c.id_cliente, c.codemp, c.codcliente, c.tipperrif, c.numpririf, c.numterrif, 
							    c.nitcli, c.id_tipo_cliente, c.nombre_cliente, c.cliente_abvr, c.id_zona, 
							    c.id_clasif_cliente, c.dircliente, c.direntrega, c.codpai, c.codest, 
							    c.codmun, c.codpar, c.codciu, c.codpostal, c.faxcliente, c.telcliente, c.emailcliente, 
							    c.webcliente, c.observcliente, c.estclient, c.limitecred, 
							    c.diascred, c.descglob, c.cedularesp, c.nombreresp, c.cargoresp, c.emailresp,
								
								c.sc_cuenta as scg_cliente,
								(
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'NC'
									   AND anulado_doc = '0'	       
								) AS total_cre,
								(
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'ND'
									   AND anulado_doc = '0'	       
								) AS total_deb,
								(
									  f.total 
									  -
									  ( SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0'
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS total_act,
								(
									  f.subtot 
									  -
									  ( SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS subtot_act,
								(
									  f.iva 
									  -
									  ( SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS iva_act
							   ";
					$sql_criterio = " LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
									  LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
									                         AND caj.codsuc = f.codsuc
									                         AND caj.codcaj = f.codcaj
					                  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente									  
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE f.codemp = '".$this->ls_codemp."' 
									    AND f.codproceso='".$this->codproceso."' 
									    AND f.id_fact='".$propiedades['id_fact']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.numfact ".$this->postgres_ilike."LIKE('%".$propiedades['numfact']."%') AND f.codproceso='".$this->codproceso."'  ";   
					break;
			  case "por_control":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.numcont='".$propiedades['numcont']."'  AND f.codproceso='".$this->codproceso."' ";   
					break;
			    case "por_id_solo":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_fact='".$propiedades['id_fact']."' AND f.codproceso='".$this->codproceso."' ";   
					break;
			   case "por_condpago":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_condpago='".$propiedades['id_condpago']."' AND f.codproceso='".$this->codproceso."'  ";   
					break;
			   case "por_transp":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_transp='".$propiedades['id_transp']."' AND f.codproceso='".$this->codproceso."'  ";   
					break;
			  case "por_vend":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_vend='".$propiedades['id_vend']."' AND f.codproceso='".$this->codproceso."'  ";   
					break;
			  case "por_ultimo_num":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  AND f.codproceso='".$this->codproceso."'  ORDER BY f.numfact DESC LIMIT 1 ";   
					break;
			  case "por_ultimo_num_sucursal":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  AND f.codsuc='".$this->codsuc."'  AND f.codproceso='".$this->codproceso."'  ORDER BY f.numfact DESC LIMIT 1 ";   
					break;
			  case "por_ultimo_num_caja":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
					                    AND f.codsuc='".$this->codsuc."' 
										AND f.codcaj='".$this->codcaj."' 
										AND f.codproceso='".$this->codproceso."'  
								    ORDER BY f.numfact DESC LIMIT 1 ";   
					break;
			  case "por_num":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
					                    AND f.codproceso='".$this->codproceso."' 
										AND f.numfact='".$propiedades['numfact']."' 
									  ORDER BY f.numfact DESC LIMIT 1 ";   
					break;
			  case "por_num_sucursal":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
					                    AND f.codsuc='".$this->codsuc."'  
										AND f.codproceso='".$this->codproceso."'
										AND f.numfact='".$propiedades['numfact']."'  
									  ORDER BY f.numfact DESC LIMIT 1 ";   
					break;
			  case "por_num_caja":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
					                    AND f.codsuc='".$this->codsuc."' 
										AND f.codcaj='".$this->codcaj."' 
										AND f.codproceso='".$this->codproceso."'
										AND f.numfact='".$propiedades['numfact']."'  
								    ORDER BY f.numfact DESC LIMIT 1 ";   
					break;		
			  case "validar_numero":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' 
									  AND  f.id_fact!='".$dato['id_fact']."' 
									  AND (f.numfact='".$propiedades['numfact']."' OR f.numcont='".$propiedades['numcont']."')  AND f.codproceso='".$this->codproceso."' "; 
					break;
			case "validar_update":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' 
									  AND f.codproceso='".$this->codproceso."' 
									  AND f.numfact='".$propiedades['numfact']."' 
									  AND f.codfact='".$propiedades['codfact']."' 
									  AND f.id_fact!='".$propiedades['id_fact']."'";   
					break;				   
			 			 
			  case "por_listado":	

  
			  		if($datos['codart']){
							$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='ARTIC'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codart']."' 
																	  ) ";
					}
					
					if($datos['codser']){
							$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='SERVI'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codser']."' 
																	  ) ";
					}
					
					if($datos['codconfac']){
							$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='CONCE'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codconfac']."' 
																	  ) ";
					}
					
					if($datos['estcxc'] == 'VENCIDO'){
						$criterio .= " AND (cp.diascred - (now()::date - f.fecfact)::integer)::integer < 0
									   AND f.id_estfact!=4
									   AND f.tipopecont='DEV'
									   AND cp.operacion='DEV' ";
					}
					
					if($datos['estcxc'] == 'VIGENTE'){
						$criterio .= " AND (cp.diascred - (now()::date - f.fecfact)::integer)::integer >= 0
									   AND f.id_estfact!=4
									   AND f.tipopecont='DEV'
									   AND cp.operacion='DEV' ";
					}
					
					if($datos['estcxc'] == 'CERRADO'){
						$criterio .= " AND f.id_estfact=4
						               AND f.tipopecont='DEV'
									   AND cp.operacion='DEV' ";
					}
					
					if($datos['omitcer']){
						$criterio .= " AND f.id_estfact!=4
						               AND f.tipopecont='DEV'
									   AND cp.operacion='DEV' ";
					}
					
					$campos = " f.*, c.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, cp.diascred as diascredito, 
					            descestfact,cp.operacion as opespi,
					            suc.nomsuc,suc.sucmatriz,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj,suc.sigsuc,
								(now()::date - f.fecfact) as diasemifact, 
								cp.diascred as diascredfact, 
							    (CASE WHEN (cp.diascred - (now()::date - f.fecfact)::integer)::integer<0 AND f.id_estfact!=4 AND cp.operacion='DEV'  
									   THEN abs((cp.diascred - (now()::date - f.fecfact)::integer)::integer)
								 ELSE 0
								 END) as diasvencfact,
								 (
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'NC'
									   AND anulado_doc = '0'	       
								) AS total_cre,
								(
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'ND'
									   AND anulado_doc = '0'	       
								) AS total_deb,
								(
									  f.total 
									  -
									  ( SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0'
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS total_act,
								(
									  f.subtot 
									  -
									  ( SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS subtot_act,
								(
									  f.iva 
									  -
									  ( SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS iva_act
							 ";
					$sql_criterio =   $joinadd."
									  LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
									  LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
									                         AND caj.codsuc = f.codsuc
									                         AND caj.codcaj = f.codcaj
									  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE f.codemp = '".$this->ls_codemp."'
									    AND f.codproceso='".$this->codproceso."' 
									    AND f.descripfact ".$this->postgres_ilike."LIKE('%".$propiedades['descripfact']."%')	
									    AND f.comentadifact ".$this->postgres_ilike."LIKE('%".$propiedades['comentadifact']."%')	
									  ".$criterio."							  								 
									  ORDER BY f.numfact ";
					break;	
			 
			 case "por_listado_cxc":	

  
			  		if($datos['codart']){
							$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='ARTIC'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codart']."' 
																	  ) ";
					}
					
					if($datos['codser']){
							$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='SERVI'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codser']."' 
																	  ) ";
					}
					
					if($datos['codconfac']){
							$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='CONCE'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codconfac']."' 
																	  ) ";
					}
					
					if($datos['estcxc'] == 'VENCIDO'){
						$criterio .= " AND (cp.diascred - (now()::date - f.fecfact)::integer)::integer < 0
									   AND f.id_estfact!=4 ";
					}
					
					if($datos['estcxc'] == 'VIGENTE'){
						$criterio .= " AND (cp.diascred - (now()::date - f.fecfact)::integer)::integer >= 0
									   AND f.id_estfact!=4 ";
					}
					
					if($datos['estcxc'] == 'CERRADO'){
						$criterio .= " AND f.id_estfact=4 ";
					}
					
					if($datos['omitcer']){
						$criterio .= " AND f.id_estfact!=4 ";
					}
					
					
					$campos = " f.*, c.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, 
					            cp.diascred as diascredito, descestfact,cp.operacion as opespi,
					            suc.nomsuc,suc.sucmatriz,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj,suc.sigsuc,
							   (now()::date - f.fecfact) as diasemifact, 
								cp.diascred as diascredfact, 
							   (CASE WHEN (cp.diascred - (now()::date - f.fecfact)::integer)::integer<0 AND f.id_estfact!=4 AND cp.operacion='DEV'  
							               THEN abs((cp.diascred - (now()::date - f.fecfact)::integer)::integer)
									 ELSE 0
									 END) as diasvencfact ";
					$sql_criterio =   $joinadd."
									  LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
									  LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
									                         AND caj.codsuc = f.codsuc
									                         AND caj.codcaj = f.codcaj
									  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE f.codemp = '".$this->ls_codemp."'
									    AND f.codproceso='".$this->codproceso."' 
									    AND f.descripfact ".$this->postgres_ilike."LIKE('%".$propiedades['descripfact']."%')	
									    AND f.comentadifact ".$this->postgres_ilike."LIKE('%".$propiedades['comentadifact']."%')
										AND f.tipopecont='DEV'
										AND cp.operacion='DEV'	
									  ".$criterio."							  								 
									  ORDER BY f.numfact ";
					break;	
			 
			 case "por_listado_giros":		
					$campos = ' f.*, c.*, g.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, descestfact,cp.operacion as opespi,
					            suc.nomsuc,suc.sucmatriz,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj,suc.sigsuc,cp.diascred as diascredito ';
					$sql_criterio = " INNER JOIN cxc_giros g ON g.id_fact = f.id_fact
									  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE f.codemp = '".$this->ls_codemp."'
									      AND f.codproceso='".$this->codproceso."' 
									  AND f.descripfact ".$this->postgres_ilike."LIKE('%".$propiedades['descripfact']."%')	
									  AND f.comentadifact ".$this->postgres_ilike."LIKE('%".$propiedades['comentadifact']."%')	
									  ".$criterio."							  								 
									  ORDER BY f.numfact ";
					break;				   
						
		}		
							   
		$query_rs = "SELECT  ".$campos."  FROM cxc_factura f ".$sql_criterio;
		//echo $query_rs.'<br><br><br>';
		$clase = get_class($this);
		$metodo = 'consulta_facturas';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);		
		return $respuesta;
	}
	
	
	function extraerdatos_factura($datos=array()){
	
					$propiedades['criterio'] = "por_id";
					$propiedades['id_fact'] = $datos['id_fact'];
					$datosfact = $this->consulta_facturas($propiedades);	
					if($datosfact===false){return false;}
							
					if(!$datosfact['cantidad']){
						$mensaje = 'No hay facturas con ese id. <br><b>id:</b> '.$datos['id_fact'];
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;					
					}
					
					$this->DatosFact = $datosfact['fila'];
					$this->codsucfact = $this->DatosFact['codsuc'];
					$this->id_fact=$this->DatosFact['id_fact'];
					$this->numfact=$this->DatosFact['numfact'];
					$this->fecfact=$this->DatosFact['fecfact'];
					$this->numcont=$this->DatosFact['numcont'];
					$this->codfact=$this->DatosFact['codfact'];
					$this->total = $this->DatosFact['total'];
					$this->numorddes = $this->DatosFact['numorddes'];
					$this->nummov = $this->DatosFact['nummov'];
					$this->codunieje = $this->DatosFact['codunieje'];
					$this->MontoNoGrav = $this->DatosFact['subtot']-$this->DatosFact['baseimp'];
					$this->operacion = $this->DatosFact['tipopecont'];
					$this->tipopecont = $this->DatosFact['tipopecont'];
					$this->AnoFact = substr($this->DatosFact['fecfact'],0,4);
					$datosfact['fila'] = $this->FormatDatosFactPresent($datosfact['fila']);
															
					return $datosfact;
	
	}
	
	function FormatDatosFactPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
														
					$datos['fecfact']=$this->io_conexiones->formatea_fecha_normal($datos['fecfact']);
					$datos['fecvenc']=$this->io_conexiones->formatea_fecha_normal($datos['fecvenc']);
					$datos['porcdesc'] = number_format($datos['porcdesc'],2,',','.');
					$datos['montodesc'] = number_format($datos['montodesc']/$this->TasaCambio,2,',','.');
					$datos['saldo'] = number_format($datos['saldo']/$this->TasaCambio,2,',','.');
					$datos['moncob'] = number_format($datos['moncob']/$this->TasaCambio,2,',','.');
					$datos['subtot'] = number_format($datos['subtot']/$this->TasaCambio,2,',','.');
					$datos['iva'] = number_format($datos['iva']/$this->TasaCambio,2,',','.');
					$datos['otros'] = number_format($datos['otros']/$this->TasaCambio,2,',','.');
					$datos['total'] = number_format($datos['total']/$this->TasaCambio,2,',','.');
					$datos['baseimp'] = number_format($datos['baseimp']/$this->TasaCambio,2,',','.');
					$datos['rif_completo'] = $datos['tipperrif'].'-'. $datos['numpririf'].'-'.$datos['numterrif'];
					$datos['rif'] = $datos['tipperrif'].$datos['numpririf'].$datos['numterrif'];
					$datos['numfact'] = str_pad($datos['numfact'],$this->digitosfact,'0',STR_PAD_LEFT);
					$datos['tascam'] = number_format($datos['tascam'],2,',','.');
					
					$datos['infocaj'] = '('.$datos['codcaj'].') - '.$datos['nomcaj'];
					$datos['infosuc'] = '('.$datos['codsuc'].') - '.$datos['nomsuc'];
										
					return $datos;	
	}
	
	function formato_numero_fact($numerofact){
		   return str_pad($numerofact,$this->digitosfact,'0',STR_PAD_LEFT);	
	}
	
	function formatear_datos_fact($datos=array()){
				
				//$datos['numcont'] = str_pad($datos['numcont'],25,'0',STR_PAD_LEFT);
				//if(!$datos['id_moneda']){$datos['id_moneda']=1;}
				
				$param['codsis'] = 'CXC';
			    $param['seccion'] = 'CONFIG';
			    $param['entry'] = 'CANTIDAD_DIGITOS_CODFACT';
			    $this->digcodfact = $this->select_config($param);
				
				$param['codsis'] = 'CXC';
			    $param['seccion'] = 'CONFIG';
			    $param['entry'] = 'CODIGO_FACTURA_AUTONUMERICO';
			    $this->codautonum = $this->select_config($param);
				
				
				
			    if(!$datos['id_transp']){$datos['diascred']=0;}
			    if(!$datos['id_condpago']){$datos['descglob']=1;}				
				
				if(!$datos['fecfact']){$datos['fecfact']=date('Y/m/d');}
				else{$datos['fecfact']=$this->io_conexiones->formatea_fecha_bd($datos['fecfact']);}
				
				if(!$datos['fecvenc']){$datos['fecvenc']=date('Y/m/d');}
				else{$datos['fecvenc']=$this->io_conexiones->formatea_fecha_bd($datos['fecvenc']);}
				
				if(!$datos['porcdesc']){$datos['porcdesc']=0;}
				if(!$datos['montodesc']){$datos['montodesc']=0;}
				if(!$datos['saldo']){$datos['saldo']=0;}
				if(!$datos['otros']){$datos['otros']=0;}
				
				$this->AnoFact = substr($datos['fecfact'],0,4);
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}
				
				$datos['porcdesc'] = $this->formato_numerico_us($datos['porcdesc']);
				$datos['montodesc'] = $this->formato_numerico_us($datos['montodesc'])*$this->TasaCambio;
				$datos['saldo'] = $this->formato_numerico_us($datos['saldo'])*$this->TasaCambio;
				$datos['subtot'] = $this->formato_numerico_us($datos['subtot'])*$this->TasaCambio;
				$datos['iva'] = $this->formato_numerico_us($datos['iva'])*$this->TasaCambio;
				$datos['otros'] = $this->formato_numerico_us($datos['otros'])*$this->TasaCambio;
				$datos['total'] = $this->formato_numerico_us($datos['total'])*$this->TasaCambio;
				$datos['baseimp'] = $this->formato_numerico_us($datos['baseimp'])*$this->TasaCambio;
				//$datos['numfact'] = $this->formato_numero_fact($datos['numfact']);
								
				if($this->codautonum or !$datos['codfact']){$datos['codfact'] = str_pad($datos['numfact'],$this->digcodfact,'0',STR_PAD_LEFT);}
				
				return $datos;
	}
	
	
	function  ValidaFechaFact($datos=array()){				
				
				$metodo='ValidaFechaFact';
				if(!$datos['numfact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar la fecha de la factura. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				switch($this->TipConsecFac){			 
					case 'U':
						$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
											AND f.codproceso='".$this->codproceso."' 
											AND f.numfact='".$datos['numfact']."' ";
						
						$sql_criterio2 = "  AND codemp = '".$this->ls_codemp."'											
											AND codproceso='".$this->codproceso."' ";
						break;
						
					case 'S':
						$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
											AND f.codsuc='".$this->codsuc."'  
											AND f.codproceso='".$this->codproceso."'
											AND f.numfact='".$datos['numfact']."' ";
											
						$sql_criterio2 = "  AND codemp = '".$this->ls_codemp."'  
											AND codsuc='".$this->codsuc."'
											AND codproceso='".$this->codproceso."' ";
						break;
						
					case 'C':
						$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
											AND f.codsuc='".$this->codsuc."' 
											AND f.codcaj='".$this->codcaj."' 
											AND f.codproceso='".$this->codproceso."'
											AND f.numfact='".$datos['numfact']."' ";
											
						$sql_criterio2 = "  AND codemp = '".$this->ls_codemp."'  
											AND codsuc='".$this->codsuc."' 
											AND codcaj='".$this->codcaj."' 
											AND codproceso='".$this->codproceso."' ";
						break;			 
				 }
				
				$ls_sql = " SELECT f.numfact,to_char(f.fecfact, 'DD/MM/YYYY') as fecfact, 
								   (SELECT numfact FROM cxc_factura WHERE numfact=(f.numfact+1) ".$sql_criterio2." ) AS numfact_sig,
								   to_char((SELECT fecfact FROM cxc_factura WHERE numfact=(f.numfact+1) ".$sql_criterio2." ), 'DD/MM/YYYY') AS fecfact_sig,
								   (SELECT numfact FROM cxc_factura WHERE numfact=(f.numfact-1) ".$sql_criterio2." ) AS numfact_ant,
								   to_char((SELECT fecfact FROM cxc_factura WHERE numfact=(f.numfact-1) ".$sql_criterio2." ), 'DD/MM/YYYY') AS fecfact_ant,
							       (SELECT count(*) FROM cxc_factura WHERE numfact<f.numfact and fecfact>f.fecfact ".$sql_criterio2." ) AS facantfecpost,
       							   (SELECT count(*) FROM cxc_factura WHERE numfact>f.numfact and fecfact<f.fecfact ".$sql_criterio2." ) AS facpostfecant
							FROM cxc_factura f
						  ".$sql_criterio;
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
						
				if($this->rs_data==false){
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				$datosFact = $this->rs_data->fields;
				
				if($datosFact['fecfact_sig']){
					$compara_sig = $this->io_conexiones->ComparaFechas($datosFact['fecfact'],$datosFact['fecfact_sig']);
					if($compara_sig<0){
						$mensaje = 'La fecha de la factura no puede ser posterior que la fecha de la siguiente ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
				}
							
				if($datosFact['fecfact_ant']){
					$compara_sig = $this->io_conexiones->ComparaFechas($datosFact['fecfact_ant'],$datosFact['fecfact']);
					if($compara_sig<0){
						$mensaje = 'La fecha de la factura no puede ser menor que la de la factura precedente';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
				}
				
				if($datosFact['facantfecpost']){
					$mensaje = 'Existen números de facturas anteriores con fecha posterior a la de la actual !';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if($datosFact['facpostfecant']){
					$mensaje = 'Existen números de facturas posteriores con fecha anterior a la de la actual !';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				return true;	
	}
	
	function generar_numero_fact($datos=array()){			
			 
			 if(!$this->codsuc or !$this->codcaj){					
				$mensaje = 'Faltan datos para poder generar el numero de factura. ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			 }
			 
			 $param['codsis'] = 'CXC';
			 $param['seccion'] = 'CONFIG';
			 $param['entry'] = 'TIPO_CONSECUTIVO_FACTURACIÓN';
			 $this->TipConsecFac = $this->select_config($param);
			 if(!$this->TipConsecFac){$this->TipConsecFac='S';}
			 
			 $param['codsis'] = 'CXC';
			 $param['seccion'] = 'CONFIG';
			 $param['entry'] = 'NUMERACION_POR_SUCURSAL';
			 $this->num_x_suc = $this->select_config($param);
			 if(!$this->num_x_suc){$this->num_x_suc=1;}
			
			 $opciones['codcaj'] = $this->codcaj;
			 $opciones['codsuc'] = $this->codsuc;
			 			 
			 if($this->TipConsecFac=='C'){	
				 $opciones['criterio']='por_codigo';				 
				 $resp = $this->consulta_caja($opciones);
				 if($resp===false){return false;}
				 if($resp['rs']->RecordCount()){$this->inicio_numerofact=$resp['rs']->fields['nrofacinicaj'];}
			 }
			 
			 if($this->TipConsecFac=='S'){	
				 $opciones['criterio']='por_codigo';
				 
				 $resp = $this->consulta_sucursal($opciones);
				 if($resp===false){return false;}
				 if($resp['rs']->RecordCount()){$this->inicio_numerofact=$resp['rs']->fields['nrocontinisuc'];}
			 }			 	 
			
			 switch($this->TipConsecFac){			 
			 	case 'U':
					$opciones['criterio'] = 'por_ultimo_num';
					break;
					
				case 'S':
				    $opciones['criterio'] = 'por_ultimo_num_sucursal';
					break;
					
				case 'C':
					$opciones['criterio'] = 'por_ultimo_num_caja';
					break;			 
			 }
			 
			 //CON PERMISOS DE ADMINISTRADOR DEL FORMULARIO SE PUEDE COLOCAR EL NÚMERO DE FACTURA MANUAL
			 if($this->la_permisos['administrador'] and $datos['numfact']){
			 	
				$opciones['numfact'] = $datos['numfact'];
				switch($this->TipConsecFac){			 
					case 'U':
						$opciones['criterio'] = 'por_num';
						break;
						
					case 'S':
						$opciones['criterio'] = 'por_num_sucursal';
						break;
						
					case 'C':
						$opciones['criterio'] = 'por_num_caja';
						break;			 
				 }
				 
				 $rs = $this->consulta_facturas($opciones);
			 	 if($rs===false){return false;}	
				 
				 if($rs['rs']->RecordCount()){
				 	$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El número de factura ya existe ! 				           			    
						       <br><b>METODO:</b> generar_numero_fact ';
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
				 }
				 
				 return $datos['numfact'];
			 }
			 //echo $this->inicio_numerofact.'<br>';		 				 
			 $resultado = $this->consulta_facturas($opciones);
			 if($respuesta===false){return false;}					 		 
			 if(!$resultado['rs']->RecordCount()){return $this->inicio_numerofact;}
			 $datos['numfact'] = $resultado['fila']['numfact'] + 1;	
			 
			 return $datos['numfact'];		
	}
	
	function MonedaPorDefecto($datos=array()){
		
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';
			$param['entry'] = 'MONEDA_X_DEFECTO';
			$this->CodMonDef = $this->select_config($param);
						
			if(!$this->CodMonDef){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Debe configurar una moneda por defecto ! 				           			    
					<br><b>METODO:</b> ConversionMoneda ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$param['criterio']='por_codigo';
			$param['codmon']=$this->CodMonDef;
			$rsmon = $this->consulta_monedas($param);
			if($rsmon===false){return false;}
			
			if(!$rsmon['rs']->RecordCount()){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron los datos de la moneda por defecto ! 				           			    
					<br><b>METODO:</b> ConversionMoneda ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$this->DatosMonedaDef = $rsmon['rs']->fields;
			
			return true;
	
	}
	
	function ConversionMoneda($datos=array()){
			
			$this->TasaCambio=1;
			$this->MonedaExtranjera=0;
			
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';
			$param['entry'] = 'MONEDA_X_DEFECTO';
			$this->CodMonDef = $this->select_config($param);
			
			
			if(!$this->CodMonDef){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Debe configurar una moneda por defecto ! 				           			    
					<br><b>METODO:</b> ConversionMoneda ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$param['criterio']='por_codigo';
			$param['codmon']=$this->CodMonDef;
			$rsmon = $this->consulta_monedas($param);
			if($rsmon===false){return false;}
			
			if(!$rsmon['rs']->RecordCount()){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron los datos de la moneda por defecto ! 				           			    
					<br><b>METODO:</b> ConversionMoneda ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			
			$this->AbrMonDef = $rsmon['rs']->fields['abrmon'];
			if($this->AbrMonDef=='E'){$this->AbrMonDef='€';}
			
			if(!$datos['codmon']){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Debe seleccionar la moneda del documento ! 				           			    
					<br><b>METODO:</b> ConversionMoneda ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			if($this->CodMonDef!=$datos['codmon']){	
					
					if(!$datos['tascam']){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La moneda escogida no tiene tasa de cambio ! 				           			    
							<br><b>METODO:</b> ConversionMoneda ';
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;
					}
					$this->MonedaExtranjera=1;				
					$this->TasaCambio = $datos['tascam'];			
			}
			
			return true;
	}
	
	function insertar_factura($datos=array()){
					//print_r($datos);
					if(!$datos['id_cliente'] or !$datos['codsuc'] or !$datos['codcaj'])
					{					
						$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					$this->codsuc = $datos['codsuc'];
					$this->codcaj = $datos['codcaj'];
					$this->codtipmov='REGFAC';
					$this->cxchist = $datos['cxchist']?$datos['cxchist']:0;
					
					
					$datos['numfact'] = $this->generar_numero_fact($datos);
					if($datos['numfact']===false){return false;}
							
					
					$datos = $this->formatear_datos_fact($datos);
					if(datos===false){return false;}
										
										
					$this->estcla = ($datos['estcla'] and $this->estpreing)?$datos['estcla']:'-';
					$this->codestpro1 = ($datos['codestpro1'] and $this->estpreing)?$datos['codestpro1']:'-------------------------';
					$this->codestpro2 = ($datos['codestpro2'] and $this->estpreing)?$datos['codestpro2']:'-------------------------';
					$this->codestpro3 = ($datos['codestpro3'] and $this->estpreing)?$datos['codestpro3']:'-------------------------';
					$this->codestpro4 = ($datos['codestpro4'] and $this->estpreing)?$datos['codestpro4']:'-------------------------';
					$this->codestpro5 = ($datos['codestpro5'] and $this->estpreing)?$datos['codestpro5']:'-------------------------';
				    $this->codunieje =  ($datos['codunieje'] and $this->estpreing)?$datos['codunieje']:'----------'; 
					$this->tipopecont = $datos['tipopecont'];
					$this->devengado = 1;
					$this->cobrado = $this->tipopecont=='DC'?1:0;
					$datos['id_vend'] = $datos['id_vend']?$datos['id_vend']:0;					
					//SEGURIDAD DE LA SUCURSAL
					$this->codintper = $datos['codsuc'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
					
					//SEGURIDAD DE LA CAJA
					$this->codintper = $datos['codsuc'].' - '.$datos['codcaj'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Caja"); return false;}
										
					$datos['tiptal'] = "FAC";
					$resp = $this->ValidaNroControl($datos);
					if($resp===false){return false;}
																					
					$query_rs = "  LOCK TABLE cxc_factura IN ACCESS EXCLUSIVE MODE;
					                SELECT reset_sequencia('cxc_factura','id_fact');
					                INSERT INTO cxc_factura(
											    codemp,
												numfact,
												codproceso,   
												numcont,
												codfact,
												id_cliente,
												id_transp,												
												id_estfact,
												id_condpago,
												id_vend,
												codmon,
												tascam, 
												tipopecont,
												codsuc,
												codcaj,
												fecfact,
												fecvenc,
												porcdesc,
												montodesc,
												saldo,
												subtot,
												iva,
												otros,
												total,
												baseimp,
												descripfact,
												comentadifact,
												codunieje, 
												codestpro1, 
       											codestpro2, 
												codestpro3, 
												codestpro4, 
												codestpro5, 
												estcla,
												devengado,
												cobrado,
												cxchist,
												fecreg,
												usureg,
												horareg
										) 
										 VALUES ('".$this->ls_codemp."','".$datos['numfact']."','FACTURA','".$datos['numcont']."','".$datos['codfact']."','".$datos['id_cliente']."','".
										            $datos['id_transp']."','".$datos['id_estfact']."','".$datos['id_condpago']."','".$datos['id_vend']."','".$datos['codmon']."','".
													$datos['tascam']."','".$datos['tipopecont']."','".$datos['codsuc']."','".$datos['codcaj']."','".$datos['fecfact']."','".$datos['fecvenc']."','".
												    $datos['porcdesc']."','".$datos['montodesc']."','".$datos['saldo']."','".$datos['subtot']."','".$datos['iva']."','".
													$datos['otros']."','".$datos['total']."','".$datos['baseimp']."','".$datos['descripfact']."','".$datos['comentadifact']."','".
													$this->codunieje."','".
													$this->codestpro1."','".
													$this->codestpro2."','".
													$this->codestpro3."','".
													$this->codestpro4."','".
													$this->codestpro5."','".
													$this->estcla."','".	
													$this->devengado."','".	
													$this->cobrado."','".
													$this->cxchist."','".													
													date("Y-m-d")."','".$_SESSION["la_logusr"]."','".date("H:i")."'); ";								
			
					//echo $query_rs;
					$metodo = 'insertar_factura';
					$opcionesx['ajax'] = '1';
					$opcionesx['imprimir'] = '1';
					$msj = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;									
					$id_insertado=$this->io_conexiones->conexion($query_rs,$opcionesx,$msj,'insert');
														
					if(!$id_insertado){					
						$mensaje = 'El registro no fué insertado.(No hay id_insert) ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;				
					}
					
					if(!$this->cxchist){					
						$validafecha=$this->ValidaFechaFact($datos);
						if($validafecha===false){return false;}
					}
					
					$datos['id_fact'] = $id_insertado;	
					$this->id_fact = $id_insertado;
					$this->codfact = $datos['codfact'];
					$this->total = 	$datos['total'];								
					$respuesta = $this->procesamiento_lotes_fact($datos);					
					if($respuesta===false){return false;}
					
					$this->codfact = $id_insertado;
					$this->numfact = $datos['numfact'];
					$this->numcont = $datos['numcont'];
					$this->codfact = $datos['codfact'];	
					$this->MontoNoGrav =$datos['subtot']-$datos['baseimp'];
					$this->fecfact = $datos['fecfact'];
					$this->tipdoc = 'FACT';	
					$this->id_doc = $this->id_fact;
										
					$resp = $this->ProcEnlaceCotPedFact($datos);
					if($resp===false){return false;}
						
					$datos['id_fact'] = $this->id_fact;					
					$datos['criterio'] = 'por_cant_articulos';			
					$detalles = $this->consulta_detalles_fact($datos);					
					
					if($detalles['rs']->RecordCount() and !$this->cxchist){					
						$this->tipo_mov = 'FACT';						
						$resp = $this->actualizar_movimiento_inv($datos);
						if($resp===false){return false;}	
					}				
					
					$resp = $this->InsertarCargosFactura($datos);
					if($resp===false){return false;}
										
					$resp = $this->GenerarMovVenta($datos);
					if($resp===false){return false;}
										
					$resp=$this->ProcContabilidadFact($datos);
					if($resp===false){return false;}					
										
					if($datos['tipopecont']=='DC'){						
						$resp=$this->ProcIngresoCajaFactDC($datos);
						if($resp===false){return false;}
					}					
					
					$mensaje = "La operación se realizó exitosamente <b>Idº transacción:</b> ".$id_insertado;					
				    $this->io_conexiones->mensajes_ajax($mensaje);
					
					return true;	
			
		}
		
		
		function actualizar_movimiento_inv($opciones=array()){
				
				switch($this->tipo_mov){				
						case 'FACT':
								$datos['nomsol'] = 'Despacho';
								$this->nomsol = 'Despacho';
								$datos['fecmov'] = $opciones['fecfact'];
								$this->fecmov = $opciones['fecfact'];
								$respuesta = $this->InsertDespacho($opciones);
								if($respuesta===false){return false;}													
								break;	
								
						case 'REVFACT':
								$datos['nomsol'] = 'Reverso';
								$this->nomsol = 'Reverso';
								$datos['fecmov'] = $opciones['fecfact'];
								$this->fecmov = $opciones['fecfact'];								
								$respuesta = $this->ReversarDespacho($opciones);
								if($respuesta===false){return false;}								
								break;		
						
						case 'ANUFACT':
								$datos['nomsol'] = 'Reverso';
								$this->nomsol = 'Reverso';
								$datos['fecmov'] = $opciones['fecfact'];
								$this->fecmov = $opciones['fecfact'];
								$respuesta = $this->ReversarDespacho($opciones);
								if($respuesta===false){return false;}								
								break;
								
						case 'REVANUFACT':
								$datos['nomsol'] = 'Despacho';
								$this->nomsol = 'Despacho';
								$datos['fecmov'] = $opciones['fecfact'];
								$this->fecmov = $opciones['fecfact'];
								$respuesta = $this->InsertDespacho($opciones);
								if($respuesta===false){return false;}														
								break;
								
						case 'NOTCRE':
								$datos['nomsol'] = 'Recepción';
								$this->nomsol = 'Recepción';
								$datos['fecmov'] = $opciones['fecdoc'];
								$this->fecmov = $opciones['fecdoc'];
								$respuesta = $this->ProcesarRecepcion($opciones);
								if($respuesta===false){return false;}
								break;
								
						case 'REVCRE':
								$datos['nomsol'] = 'Reverso Recepción';
								$this->nomsol = 'Reverso Recepción';
								$datos['fecmov'] = $opciones['fecdoc'];
								$this->fecmov = $opciones['fecdoc'];
								$respuesta = $this->ReversarRecepcion($opciones);
								if($respuesta===false){return false;}
								return true;						
								break;					
				}			
				
				$resp=$this->insertar_movimiento_inv($datos);
				if($resp===false){return false;}				
				$respuesta = $this->procesar_dt_movimiento_inv($datos);
				if($respuesta===false){return false;}				
				
				return true;
		
		}
		
		function insertar_movimiento_inv($opciones=array()){
								
				if(!$this->tipdoc or !$this->id_doc)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo o el id del documento. 				           			    
								<br><b>METODO:</b> insertar_movimiento_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
					
				$emp="";
				$empresa="";
				$tabla="siv_movimiento";
				$columna="nummov";
				$this->nummov=$this->fun->uf_generar_codigo($emp,$empresa,$tabla,$columna);				
				if(!$this->nummov){$this->io_conexiones->mensajes_ajax('No se pudo generar el número de Movimiento de Inventario !'); return false;}
								
				$ls_sql="INSERT INTO siv_movimiento (nummov, fecmov, nomsol, tipdoc, id_doc, modprocede, codusu)".
						" VALUES ('".$this->nummov."','".
						             $opciones['fecmov']."','".
									 $opciones['nomsol']."','".
									 $this->tipdoc."','".
									 $this->id_doc."',
									 'CXC','".
									 $_SESSION["la_logusr"]."')";
				//echo $ls_sql.'<br>';	
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false)
				{
					$metodo = 'insertar_movimiento_inv';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				return true;
		
		}
		
		function ProcesarRecepcion($datos=array()){
			
			if(!$this->tipdoc or !$this->id_doc){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo o el id del documento. 				           			    
							<br><b>METODO:</b> ProcesarRecepcion ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
				
			$datos['criterio'] = 'por_almacen';			
			$detalles = $this->consulta_detalles_doc($datos);		
			if(!$detalles['cantidad']){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron almacenes en el detalle del documento: '.$this->numdoc.' 				           			    
								<br><b>METODO:</b> ProcesarRecepcion ';					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;		
			}
			
			$resp = $this->extraerdatos_documento($datos);
		    if($resp===false){return false;}
			
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';
			$param['entry'] = 'CODIGO_PROV_ORGEMP';
			$this->CodOrgEmp = $this->select_config($param);
					
			if(!$this->CodOrgEmp){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código de proveedor por defecto para esta empresa u organismo. 
							<br> Configure el Código por Defecto para esta  empresa u organismo. 				           			    
							<br><b>METODO:</b> ProcesarRecepcion ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			foreach($detalles['rs'] as $fila){
				$fila['fecdoc']=$datos['fecdoc'];
				$this->codalm=$fila['codalm'];
				$resp=$this->InsertRecepcion($fila);
				if($resp===false){return false;}				
			}				
			
			return true;
	
	}
		
	function InsertRecepcion($datos=array()){
				
			if(!$this->numdocumento or !$this->codalm or !$datos['codalm'] or !$datos['fecdoc'] or !$this->CodOrgEmp){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder insertar la recepción. 				           			    
							<br><b>METODO:</b> InsertRecepcion ';
				$this->io_conexiones->mensajes_ajax($mensaje);		
				//echo $this->numdoc.' - '.$this->codalm.' - '.$this->CodOrgEmp.'<br>';
				//print_r($datos);															
				return false;
			}
			
			if(!$this->numfact){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de la factura para generar la recepción de artículo de almacén. 				           			    
							<br><b>METODO:</b> InsertRecepcion ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			if(!$this->tipdoc or !$this->id_doc){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo o el id del documento. 				           			    
							<br><b>METODO:</b> InsertRecepcion ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$emp="";
			$empresa=$this->ls_codemp;		
			$tabla="siv_recepcion";
			$columna="numconrec";
			$this->numconrec=$this->fun->uf_generar_codigo($emp,$empresa,$tabla,$columna);
			if(!$this->numconrec){return false;}
						
			$datos['obsrec']='RECEPCIÓN POR DEVOLUCIÓN (NOTA DE CRÉDITO) DE RENGLON DE FACTURA '.$this->numfact.' PARA EL ALMACÉN: '.$this->codalm;
			$datos['cod_pro'] = $this->CodOrgEmp;
			
			if(!$this->CodOrgEmp){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código de proveedor por defecto para esta empresa u organismo. 
				            <br> Configure el Código por Defecto para esta  empresa u organismo. 				           			    
							<br><b>METODO:</b> InsertRecepcion ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
						
			$ls_sql="INSERT INTO siv_recepcion (codemp,numordcom,numconrec,tipdoc,id_doc,modprocede,cod_pro,codalm,fecrec,obsrec,codusu,estpro,estrec,estrevrec,estapr)
						  VALUES ('".$this->ls_codemp."','".
									 $this->numdocumento."','".
									 $this->numconrec."','".
									 $this->tipdoc."','".
									 $this->id_doc."',
									 'CXC','".
									 $this->CodOrgEmp."','".
									 $this->codalm."','".
									 $datos['fecdoc']."','".
									 $datos['obsrec']."','".
									 $_SESSION["la_logusr"]."',
									 '2',
									 '1',
									 '1',
									 '0')";
			//echo $ls_sql.'<br>';
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){			
				$metodo = 'InsertRecepcion';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;			
			}
			
			
			$datos['criterio'] = 'por_detalle_inv';	
			$datos['id_doc'] = $this->id_doc;		
			$detalles = $this->consulta_detalles_doc($datos);		
			if(!$detalles['rs']->RecordCount()){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron detalles de artículos la factura. 				           			    
								<br><b>METODO:</b> InsertRecepcion ';					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;		
			}
			
			$i=1;
			
			foreach($detalles['rs'] as $fila){
					
					if(!$this->numdocumento){					
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de la factura para poder insertar el artículo en la recepción. 				           			    
									<br><b>METODO:</b> InsertRecepcion ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					if(!$this->numconrec){					
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número cosecutivo para poder insertar el artículo en la recepción. 				           			    
									<br><b>METODO:</b> InsertRecepcion ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					if(!$fila['coddetalle']){					
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el el código para poder insertar el artículo en la recepción. 				           			    
									<br><b>METODO:</b> InsertRecepcion ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					if(!$fila['cantidad_detdoc']){					
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La cantidad del artículo no puede ser 0. 				           			    
									<br><b>METODO:</b> InsertRecepcion ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					$fila['unidad']=$datos['unidad']?$datos['unidad']:'D';	
					$fila['penart']=0;
					$fila['monsubart']=$fila['cantidad_detdoc']*$fila['precio_detdoc'];
					$fila['monsubart']=number_format($fila['monsubart'],2,'.','');
					$ls_sql="INSERT INTO siv_dt_recepcion (codemp,numordcom,numconrec,codart,unidad,canart,penart,preuniart,monsubart,montotart,orden,canoriart)
							 VALUES ('".$this->ls_codemp."','".
										$this->numdocumento."','".
										$this->numconrec."','".
										$fila['coddetalle']."','".
										$fila['unidad']."','".
										$fila['cantidad_detdoc']."','".
										$fila['penart']."','".
										$fila['precio_detdoc']."','".
										$fila['monsubart']."','".
										$fila['monsubart']."','".
										$i."','".
										$fila['cantidad_detdoc']."')"; 
					
					//echo $ls_sql.'<br>';
					$rs_data=$this->io_sql->select($ls_sql);
					if($rs_data==false){				
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
						if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
						else{$this->io_mensajes->message($mensaje);}
						return false;
					}
					$i++;						
			}
						
			return true;	
	}
		
	function ReversarRecepcion($datos=array()){
		//echo "ok-".$this->id_doc.'---->'.$this->tipdoc;
		if(!$this->id_doc or !$this->tipdoc)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder reversar la recepción del documento. 				           			    
						<br><b>METODO:</b> ReversarRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		$metodo = 'ReversarRecepcion';
		
		$ls_sql=" SELECT * FROM siv_recepcion
		           WHERE id_doc='".$this->id_doc."' 
				     AND tipdoc='".$this->tipdoc."' 
					 AND modprocede='CXC';
			    ";
		
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		if(!$rs_data->RecordCount())
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron los datos de la recepción de almacén. 				           			    
						<br><b>METODO:</b> ReversarRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		if($rs_data->fields['estapr']){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La recepción de almacen producto de la devolución ya fué aprobada y procesada. 				           			    
						<br> Reverse la recepción para poder eliminar la nota de crédito.
						<br><b>METODO:</b> ReversarRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		if(!$rs_data->fields['numordcom'] or !$rs_data->fields['numconrec']){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder reversar el detalle de la recepción de los artículos. 				           			    
						<br><b>METODO:</b> ReversarRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		foreach($rs_data as $fila){	
			$ls_sql="  DELETE FROM  siv_dt_recepcion
					   WHERE codemp='".$this->codemp."' 
						 AND numordcom='".$fila['numordcom']."'
						 AND numconrec='".$fila['numconrec']."';
						 
					   DELETE FROM  siv_recepcion
					   WHERE id_doc='".$this->id_doc."'
					     AND numordcom='".$fila['numordcom']."'
						 AND numconrec='".$fila['numconrec']."'
						 AND codemp='".$this->codemp."' 
						 AND tipdoc='".$this->tipdoc."' 
						 AND modprocede='CXC';
					";
		
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
		}
		return true;
	}
		
	function InsertarCargosFactura($opciones=array()){				
								
				$ls_sql="  INSERT INTO cxc_dt_cargos( codemp, id_fact, codproceso,
			   										  codcar, formula, porcar, monbasimp,monimp, montot,
												      scg_cuenta, spi_cuenta, codestpro1, codestpro2, 
												      codestpro3, codestpro4, codestpro5, estcla)            
							SELECT  '".$this->ls_codemp."', ".$this->id_fact.", 'FACTURA',
									codcar, formula, porcar, monbasimp,monimp, montot,
									scg_cuenta, spi_cuenta, codestpro1, codestpro2, 
									codestpro3, codestpro4, codestpro5, estcla
							FROM (
									SELECT
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.spicta
											  WHEN id_tipodetalle='SERVI' THEN sc.spicta     
										 ELSE ''
										 END AS spi_cuenta,
										 
										 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
											  WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta     
										 ELSE ''
										 END AS scg_cuenta,
							
										CASE WHEN id_tipodetalle='ARTIC' THEN ac.codcar
											  WHEN id_tipodetalle='SERVI' THEN sc.codcar     
										 ELSE ''
										 END AS codcar,
							
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.porcar
											  WHEN id_tipodetalle='SERVI' THEN sc.porcar     
										 ELSE 0
										 END AS porcar,
										 
										 d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.formula
											  WHEN id_tipodetalle='SERVI' THEN sc.formula     
										 ELSE ''
										 END AS formula,
										 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM((precio_detalle*cantidad_detalle)*ac.porcar/100)
											  WHEN id_tipodetalle='SERVI' THEN  SUM((precio_detalle*cantidad_detalle)*sc.porcar/100) 
										 ELSE 0
										 END AS monimp, sum(precio_detalle*cantidad_detalle) as monbasimp,
										 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM((precio_detalle*cantidad_detalle)*ac.porcar/100) + sum((precio_detalle*cantidad_detalle))
											  WHEN id_tipodetalle='SERVI' THEN  SUM((precio_detalle*cantidad_detalle)*sc.porcar/100) + sum((precio_detalle*cantidad_detalle)) 
										 ELSE 0
										 END AS montot
									 FROM cxc_detalle d 
									INNER JOIN cxc_factura f ON f.id_fact = d.id_fact 
												AND f.codproceso = d.codproceso
									 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
												 AND f.codemp = a.codemp 
												AND d.id_tipodetalle = 'ARTIC'	
									 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
									 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
									 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = ac.spicta
									 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
												  AND d.id_tipodetalle = 'SERVI'										
									 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
									 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
									 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = sc.spicta					
									 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
									 WHERE d.id_fact='".$this->id_fact."'
									 AND d.codproceso='FACTURA' 
									 AND iva_detalle>0
									 GROUP BY 3,1,2,4,5,6,7,8,9,10,id_tipodetalle,ac.formula,sc.formula
									 ORDER BY 1
							) INFOCARGOS  
							ORDER BY 3 ";
					
				$rs_data=$this->io_sql->select($ls_sql);
				
				if($rs_data==false)
				{
					$metodo = 'InsertarCargosFactura';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				return true;
		
		}
	
	function InsertarCargosDocumento($opciones=array()){				
				
				if(!$this->codproceso or !$this->id_fact or !$this->id_doc or !$this->codtipdoc){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder insertar los cargos del documento. 				           			    
							    <br><b>METODO:</b> InsertarCargosDocumento ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
										
				$ls_sql="             
							SELECT  '".$this->ls_codemp."', id_doc, ".$this->id_fact.", '".$this->codproceso."',
									codcar, formula, porcar, monbasimp,monimp, montot,
									scg_cuenta, spi_cuenta, codestpro1, codestpro2, 
									codestpro3, codestpro4, codestpro5, estcla
							FROM (
									SELECT 
									    CASE WHEN id_tipodetalle='ARTIC' THEN ac.codcar
											 WHEN id_tipodetalle='SERVI' THEN sc.codcar
											 WHEN id_tipodetalle='CONNC' THEN ccar.codcar     
										 ELSE ''
										 END AS codcar,
										 
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.spicta
											  WHEN id_tipodetalle='SERVI' THEN sc.spicta
											  WHEN id_tipodetalle='CONNC' THEN ccar.spicta     
										 ELSE ''
										 END AS spi_cuenta,
										 
										 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
											  WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta 
											  WHEN id_tipodetalle='CONNC' THEN spic.sc_cuenta    
										 ELSE ''
										 END AS scg_cuenta,									
										 
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.porcar
											  WHEN id_tipodetalle='SERVI' THEN sc.porcar
											  WHEN id_tipodetalle='CONNC' THEN ccar.porcar     
										 ELSE 0
										 END AS porcar,
										 
										 MAX(d.estcla) AS estcla, 
										 MAX(d.codestpro1) AS codestpro1, 
										 MAX(d.codestpro2) AS codestpro2,
										 MAX(d.codestpro3) AS codestpro3, 
										 MAX(d.codestpro4) AS codestpro4, 
										 MAX(d.codestpro5) AS codestpro5,
										 MAX(doc.id_doc) AS id_doc,
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.formula
											  WHEN id_tipodetalle='SERVI' THEN sc.formula
											  WHEN id_tipodetalle='CONNC' THEN ccar.formula     
										 ELSE ''
										 END AS formula,										 
										 sum((precio_detdoc*cantidad_detdoc)) as monbasimp,										 
										 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM((precio_detdoc*cantidad_detdoc)*ac.porcar/100)
											  WHEN id_tipodetalle='SERVI' THEN  SUM((precio_detdoc*cantidad_detdoc)*sc.porcar/100)
											  WHEN id_tipodetalle='CONNC' THEN  SUM((precio_detdoc*cantidad_detdoc)*ccar.porcar/100) 
										 ELSE 0
										 END AS monimp,		
										 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM((precio_detdoc*cantidad_detdoc)*ac.porcar/100) + sum((precio_detdoc*cantidad_detdoc))
											  WHEN id_tipodetalle='SERVI' THEN  SUM((precio_detdoc*cantidad_detdoc)*sc.porcar/100) + sum((precio_detdoc*cantidad_detdoc))
											  WHEN id_tipodetalle='CONNC' THEN  SUM((precio_detdoc*cantidad_detdoc)*ccar.porcar/100) + sum((precio_detdoc*cantidad_detdoc)) 
										 ELSE 0
										 END AS montot
										 
									 FROM cxc_dt_documento d 
									 INNER JOIN cxc_documento doc ON doc.id_doc = d.id_doc												             
									 INNER JOIN cxc_factura f ON f.id_fact = doc.id_fact											             
									 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
															 AND a.codemp = d.codemp 
															 AND d.id_tipodetalle = 'ARTIC'	
									 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
									 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
									 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = ac.spicta
									 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
														  AND d.id_tipodetalle = 'SERVI'										
									 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
									 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
									 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = sc.spicta					
									 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser
									 
									 LEFT JOIN sep_conceptos c ON c.codconsep=d.coddetalle 
														      AND d.id_tipodetalle = 'CONNC'										
									 LEFT JOIN sep_conceptocargos cc ON cc.codconsep = c.codconsep AND tipconcep='NC'		
									 LEFT JOIN sigesp_cargos ccar ON ccar.codcar = cc.codcar AND ccar.codemp = cc.codemp	
									 LEFT JOIN spi_cuentas spic ON spic.spi_cuenta = ccar.spicta
									  										
									 WHERE d.id_fact='".$this->id_fact."'
									 AND d.id_doc='".$this->id_doc."'
									 AND d.codtipdoc='".$this->codtipdoc."' 
									 AND d.iva_detdoc>0
									 GROUP BY 1,2,3,4,12,d.id_tipodetalle 
									 ORDER BY 1
							) INFOCARGOS 													 
							ORDER BY 4 ";
					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){
					$metodo = 'InsertarCargosDocumento';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					
					$this->io_mensajes->message($mensaje);
					return false;					
				}
				
				foreach($rs_data as $fila){
					
					$ls_sql="SELECT * 
					          FROM cxc_dt_cargos 
					         WHERE id_fact='".$this->id_fact."' 
							   AND codcar='".$fila['codcar']."'
							   AND id_doc='".$this->id_doc."'
							   AND codemp='".$this->ls_codemp."'
							   AND codproceso='".$this->codproceso."'";
					
					$rs=$this->io_sql->select($ls_sql);
					if($rs==false){
						$metodo = 'InsertarCargosDocumento';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
						
						$this->io_mensajes->message($mensaje);
						return false;						
					}
					
					$ls_sql="INSERT INTO cxc_dt_cargos( codemp, id_doc, id_fact, codproceso,
													    codcar, formula, porcar, monbasimp,monimp, montot,
													    scg_cuenta, spi_cuenta, codestpro1, codestpro2, 
													    codestpro3, codestpro4, codestpro5, estcla)
							 VALUES ('".$this->ls_codemp."','".
						             $this->id_doc."','".
						             $this->id_fact."','".
									 $this->codproceso."','".
									 $fila['codcar']."','".
									 $fila['formula']."','".
								     $fila['porcar']."','".
									 $fila['monbasimp']."','".
									 $fila['monimp']."','".
									 $fila['montot']."','".
									 $fila['scg_cuenta']."','".
									 $fila['spi_cuenta']."','".									 
									 $fila['codestpro1']."','".
									 $fila['codestpro2']."','".
									 $fila['codestpro3']."','".
									 $fila['codestpro4']."','".
									 $fila['codestpro5']."','".
									 $fila['estcla']."')";
					
					if($rs->RecordCount()){
						$ls_sql="UPDATE cxc_dt_cargos 
						            SET monbasimp=monbasimp+".$fila['monbasimp'].",
									    monimp=monimp+".$fila['monimp'].",
										montot=montot+".$fila['montot']." 
								 WHERE id_fact='".$this->id_fact."' 
								   AND codcar='".$fila['codcar']."'
								   AND id_doc='".$this->id_doc."'
								   AND codemp='".$this->ls_codemp."'
								   AND codproceso='".$this->codproceso."'";
					}
					
					$rsInsert=$this->io_sql->select($ls_sql);
					if($rsInsert==false){
						$metodo = 'InsertarCargosDocumento';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
						
						$this->io_mensajes->message($mensaje);
						return false;						
					}
				}
				
				return true;
		
	}
	
	
			
	function actualizar_movimiento_fact($opciones=array()){
				
				if($opciones['nomsol']=='Reverso'){return true;}
				
				if(!$this->nummov)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el número de movimiento de inventario en la factura. 				           			    
							    <br><b>Número de Movimiento:</b>: '.$this->nummov.'
								<br><b>METODO:</b> actualizar_existencia_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql= "UPDATE cxc_factura 
						  SET nummov = '".$this->nummov."' 
						  WHERE codemp='".$this->ls_codemp."' 
						  AND codproceso='FACTURA' 
						  AND id_fact='".$this->id_fact."'; ";
				
				$rs_data=$this->io_sql->select($ls_sql);			
				
				if($rs_data==false)
				{
					
					$metodo = 'actualizar_movimiento_fact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = '<b>ERROR:</b> No se pudo actualizar el número de movimiento en la factura. <br> Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				return true;		
		}
		
		function actualizar_movimiento_doc($opciones=array()){
				
					
				if(!$this->nummov or !$this->id_doc or !$this->id_fact)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el número de movimiento de inventario del documento asociado a la factura. 				           			    
							    <br><b>Número de Movimiento:</b>: '.$this->nummov.'
								<br><b>METODO:</b> actualizar_movimiento_doc ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
      			$ls_sql= "UPDATE cxc_documento 
						  SET nummov_doc = '".$this->nummov."' 
						  WHERE codemp='".$this->ls_codemp."' 
						  AND codtipdoc='".$this->tipo_mov."' 
						  AND id_doc='".$this->id_doc."'
						  AND id_fact='".$this->id_fact."'; ";
				
				$rs_data=$this->io_sql->select($ls_sql);			
				
				if($rs_data==false)
				{
					
					$metodo = 'actualizar_movimiento_doc';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = '<b>ERROR:</b> No se pudo actualizar el número de movimiento en el documento. <br> Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				return true;		
		}
		
		function ActualizarDespachoFact($opciones=array()){
				
				if(!$this->numorddes)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el número de despacho de inventario en la factura. 				           			    
							    <br><b>Número de Movimiento:</b>: '.$this->nummov.'
								<br><b>METODO:</b> ActualizarDespachoFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql= "UPDATE cxc_factura 
						  SET numorddes = '".$this->numorddes."' 
						  WHERE codemp='".$this->ls_codemp."' 
						    AND codproceso='FACTURA' 
						    AND id_fact='".$this->id_fact."'; ";
				
				$rs_data=$this->io_sql->select($ls_sql);			
				
				if($rs_data==false)
				{
					
					$metodo = 'ActualizarDespachoFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = '<b>ERROR:</b> No se pudo actualizar el número de DEspacho en la factura. <br> Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				return true;		
		}
		
		function procesar_dt_movimiento_inv($opciones=array()){
				
				if(!$this->tipdoc or !$this->id_doc)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo o el id del documento. 				           			    
								<br><b>METODO:</b> procesar_dt_movimiento_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				if(!$this->tipo_mov)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo de movimiento. 				           			    
								<br><b>METODO:</b> procesar_dt_movimiento_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				if($this->tipo_mov=='NOTCRE' or $this->tipo_mov=='NOTDEB'){
					$datos = $opciones;
					$datos['id_doc'] = $this->id_doc;					
					$datos['criterio'] = 'por_detalle_inv';			
					$detalles = $this->consulta_detalles_doc($datos);					
				}
				else{
					$datos = $opciones;
					$datos['id_fact'] = $this->id_fact;					
					$datos['criterio'] = 'por_detalle_inv';			
					$detalles = $this->consulta_detalles_fact($datos);				
				}
				
				if(!$detalles['cantidad']){return true;}
				
				foreach ($detalles['rs'] as $fila) {
					if($fila['id_tipodetalle']=='ARTIC'){
						
						switch($this->tipo_mov){
							case 'FACT':
								$fila['operacion'] = 'FAC';
								$fila['opeinv'] = 'SAL';
								$this->numdoc=$this->codfact; 				
								$this->numdocori=$this->numorddes; 
								$this->promov='DES';				
								break;	
								
							case 'REVFACT':
								$fila['operacion'] = 'RFA';
								$fila['opeinv'] = 'ENT';
								$this->numdoc=$this->numorddes; 				
								$this->numdocori=$this->codfact; 
								$this->promov='RCP';						
								break;	
								
							case 'ANUFACT':
								$fila['operacion'] = 'AFA';
								$fila['opeinv'] = 'ENT';
								$this->numdoc=$this->numorddes; 				
								$this->numdocori=$this->codfact;
								$this->promov='RCP'; 						
								break;
								
							case 'REVANUFACT':
								$fila['operacion'] = 'RAF';
								$fila['opeinv'] = 'SAL';
								$this->numdoc=$this->codfact; 				
								$this->numdocori=$this->numorddes;
								$this->promov='DES'; 				
								break;
								
							case 'NOTCRE':
								$fila['operacion'] = 'DEV';
								$fila['opeinv'] = 'ENT';
								$this->numdoc=$this->numdoc; 				
								$this->numdocori=$this->numfact; 
								$this->promov='RCP';				
								break;					
						}
						
						$resp=$this->actualizar_existencia_inv($fila);
						if($resp===false){return false;}
						
						$resp=$this->insertar_dt_movimiento_inv($fila);
						if($resp===false){return false;}
					}					
				}
						
				return true;
		
		}
		
		function actualizar_existencia_inv($opciones=array()){
				
				
				if(!$opciones['coddetalle'] or !$opciones['codalm'] or !$opciones['operacion'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar la existencia de inventario. 				           			    
							    <br><b>coddetalle:</b>: '.$opciones['coddetalle'].'
								<br><b>codalm:</b>: '.$opciones['codalm'].'
								<br><b>operacion:</b>: '.$opciones['operacion'].'
								<br><b>METODO:</b> actualizar_existencia_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				if(!$this->nummov){$this->io_conexiones->mensajes_ajax('<b>ERROR:</b> No se puede actualizar la existencia. <br> No hay número de Movimiento de Inventario !'); return false;}
				if(!$this->fecmov){$this->io_conexiones->mensajes_ajax('<b>ERROR:</b> No se puede actualizar la existencia. <br> No hay fecha de Movimiento de Inventario !'); return false;}

				$resp = $this->ValidarExistenciaAlmacen($opciones);
				if($resp===false){return false;}
				
				// LA OPERACIÓN PUEDE SER FAC (FACTURACIÓN)  Ó DEV (DEVOLUCIÓN)				
				switch($opciones['operacion']){
							case 'DEV':
							        $signo = '+'; $opciones['opeinv']='ENT';
									break;
							case 'ANU':
									$signo = '+'; $opciones['opeinv']='ENT';
									break;
							case 'FAC':
							        $signo = '-'; $opciones['opeinv']='SAL';
									break;
							case 'RFA':
									$signo = '+'; $opciones['opeinv']='ENT';
									break;		
							case 'AFA':
									$signo = '+'; $opciones['opeinv']='ENT';
									break;	
							case 'RAF':
							        $signo = '-'; $opciones['opeinv']='SAL';
									break;						
							case 'ELIMDET':
							        $signo = '+';
									break;			
				}
											
				$ls_sql= "UPDATE siv_articulo 
				          SET exiart = (exiart ".$signo." '".$opciones['cantidad_detalle']."') 
						  WHERE codemp='".$this->ls_codemp."' 
						  AND codart='".$opciones['coddetalle']."'; ";
				//echo $ls_sql.'<br>';
				$rs_data=$this->io_sql->select($ls_sql);			
				
				if($rs_data==false)
				{
					
					$metodo = 'actualizar_existencia_inv';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = '<b>ERROR:</b> No se pudo actualizar la existencia del artículo. <br> Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$ls_sql =   " UPDATE siv_articuloalmacen 
							  SET existencia = (existencia ".$signo." '".$opciones['cantidad_detalle']."') 
							  WHERE codemp='".$this->ls_codemp."'
							  AND codart='".$opciones['coddetalle']."'
							  AND codalm='".$opciones['codalm']."' ";
				//echo $ls_sql.'<br>';
				$rs_data=$this->io_sql->select($ls_sql);			
				
				if($rs_data==false)
				{
					
					$metodo = 'actualizar_existencia_inv';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = '<b>ERROR:</b> No se pudo actualizar la existencia del artículo. <br> Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
											
				return true;
		
		}
		
		function insertar_dt_movimiento_inv($opciones=array()){
				
				if(!$opciones['coddetalle'] or !$opciones['codalm'] or !$opciones['operacion'] or !$opciones['opeinv'] or !$this->numdoc or !$this->numdocori)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar la existencia de inventario. 				           			    
							    <br><b>coddetalle:</b>: '.$opciones['coddetalle'].'
								<br><b>codalm:</b>: '.$opciones['codalm'].'
								<br><b>operacion:</b>: '.$opciones['operacion'].'
								<br><b>numdoc:</b>: '.$this->numdoc.'
								<br><b>numdocori:</b>: '.$this->numdocori.'
								<br><b>METODO:</b> insertar_dt_movimiento_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				if(!$this->nummov)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de movimiento. 				           			    
							    <br><b>Número de Movimiento:</b>: '.$this->nummov.'
								<br><b>METODO:</b> insertar_dt_movimiento_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
												
				$ls_sql="INSERT INTO siv_dt_movimiento (codemp, nummov, fecmov, codart, codalm, opeinv, codprodoc, numdoc, canart, cosart, promov, numdocori, candesart, fecdesart)".
						" VALUES ('".$this->ls_codemp."','".
						             $this->nummov."','".
						             $opciones['fecfact']."','".
									 $opciones['coddetalle']."','".
									 $opciones['codalm']."','".
									 $opciones['opeinv']."','".
								     $opciones['operacion']."','".
									 $this->numdoc."','".
									 $opciones['cantidad_detalle']."','".
									 $opciones['precio_detalle']."',
									 '".$this->promov."','".
									 $this->numdocori."','".
									 $opciones['cantidad_detalle']."','".
									 $opciones['fecfact']."')";
				//echo $ls_sql.'<br><br>';
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false)
				{
					
					$metodo = 'insertar_dt_movimiento_inv';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
		
		}
		
		function consulta_movimiento(){
								
				switch($opciones['criterio']){
						  
					 case "por_numero":
							$sql_criterio = " WHERE  m.nummov = '".$opciones['nummov']."' ";   
							break;				   
					 
				}
				
				$query_rs = "SELECT  *  FROM siv_movimiento m ".$sql_criterio;
				//echo $query_rs.'<br>';
				$clase = get_class($this);
				$metodo = 'consulta_movimiento';
				$param['arreglo'] = 'arreglo';
				$param['ajax'] = '1';
				$param['imprimir'] = '1';	
				$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
				$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
				return $respuesta;
		
		}	

		function eliminar_movimiento_inv($opciones=array()){
				
				if(!$this->nummov or !$this->fecmov)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el movimiento de inventario. 				           			    
							    <br><b>Número de Movimiento:</b>: '.$this->nummov.'
								<br><b>Fecha de Movimiento:</b>: '.$this->fecmov.'
								<br><b>METODO:</b> eliminar_movimiento_inv ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
																
				$ls_sql="DELETE FROM siv_movimiento WHERE nummov='".$this->nummov."' AND fecmov='".$this->fecmov."' ";
					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false)
				{
					
					$metodo = 'eliminar_movimiento_inv';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				return true;
		
		}
		
		function eliminar_dt_movimiento_inv($opciones=array()){				
				
				$query_rs = "DELETE FROM siv_dt_movimiento WHERE nummov='".$this->nummov."' 
				                                             AND fecmov='".$this->fecmov."' 
															 AND codemp='".$this->ls_codemp."'; ";				
				$this->rs_data=$this->io_sql->select($query_rs);
				if($this->rs_data==false)
				{						
					$metodo = 'eliminar_dt_movimiento_inv';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				return true;
		
		}
		
		function ValidarExistenciaAlmacen($datos=array()){
				
				if(!$datos['coddetalle'] or !$datos['codalm'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar la existencia de inventario en almacen. 				           			    
							    <br><b>coddetalle:</b>: '.$opciones['coddetalle'].'
								<br><b>codalm:</b>: '.$opciones['codalm'].'
								<br><b>METODO:</b> ValidarExistenciaAlmacen ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql="  SELECT existencia 
				             FROM siv_articuloalmacen 
				            WHERE codemp='".$this->ls_codemp."' 
						      AND codart='".$datos['coddetalle']."'
							  AND codalm='".$datos['codalm']."'
						";
		
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){
					$metodo = 'ValidarExistenciaAlmacen';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
				}
				
				
				switch($datos['operacion']){							        
					case 'FAC':
						   if(!$rs_data->RecordCount()){
								$mensaje="No existe el artículo ".$datos['coddetalle']." para el almacen ".$datos['codalm'];		
								$this->io_conexiones->mensajes_ajax($mensaje);
								return false;
							}
							
							$subtotexi = $rs_data->fields['existencia'] - $datos['cantidad_detalle'];
							
							if($subtotexi<0){
									$mensaje="No hay existencia suficiente del artículo ".$datos['coddetalle']." en el almacen ".$datos['codalm'].
											 "<br> <b>Existencia Actual:</b> ".$rs_data->fields['existencia'];		
									$this->io_conexiones->mensajes_ajax($mensaje);
									return false;
							}
							break;
					case 'DEV':
					case 'ANU':
					case 'RFA':
					case 'ELIMDET':
					        if(!$rs_data->RecordCount()){
								$ls_sql="  INSERT INTO siv_articuloalmacen(codemp, codart, codalm, existencia) 
												VALUES ('".$this->ls_codemp."', 
														'".$datos['coddetalle']."', 
														'".$datos['codalm']."', 
														'".$datos['cantidad_detalle']."');
										";
						
								$rs_data=$this->io_sql->select($ls_sql);
								if($rs_data==false){
									$metodo = 'ValidarExistenciaAlmacen';
									$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
									$this->io_conexiones->mensajes_ajax($mensaje);
									return false;
								}
							}
							break;			
				}
				
				return true;
		}
		
		
		function procesamiento_lotes_fact($opciones=array()){
				
					//SE INSERTAN EL DETALLE
					if($opciones['detalle_factura']){										
						$respuesta = $this->procesar_detalles_fact($opciones);
						if($respuesta===false){return false;}													
					}
					else{
							$resp = $this->eliminar_detalles($opciones);
							if($resp===false){return false;}
					
					}
												
					return true;
		
		}
		
		function procesar_detalles_fact($datos=array()){
				
				//$resp = $this->eliminar_detalles($datos);
				//if($resp===false){return false;}				
				
				//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
				$datos['detalle_factura'] = stripslashes($datos['detalle_factura']);
				$obj_json = $this->json->decode($datos['detalle_factura']);		
				
				//SE CREA UN ONJETO JSON POR CADA FILA. LOS CAMPOS SE ACCESAN CON EL FORMATO: $obj_json[numero_fila]->nombre_campo
				//SE RECORREN LAS FILAS DEL OBJETO JSON: $obj_json[0], $obj_json[1], $obj_json[2], etc.		
				try{
						foreach($obj_json as $detalle){						
								
								$datosdet['id_fact'] =  $datos['id_fact'];
								$datosdet['id_tipodetalle'] =  $detalle->id_tipodetalle;											
								$datosdet['renglon'] =  $detalle->renglon;
								$datosdet['coddetalle'] =  $detalle->coddetalle;
								$datosdet['codunimed'] =  $detalle->codunimed;
								$datosdet['codalm'] =  $detalle->codalm;
								$datosdet['cantidad_detalle'] =  $detalle->cantidad_detalle;
								$datosdet['precio_detalle'] =  $detalle->precio_detalle;
								$datosdet['porcdesc_detalle'] =  $detalle->porcdesc_detalle;
								$datosdet['desc_detalle'] =  $detalle->precio_detalle*($detalle->porcdesc_detalle/100);
								$datosdet['porciva'] =  $detalle->porciva;
								$datosdet['iva_detalle'] =  $detalle->iva_detalle;
								$datosdet['neto_detalle'] =  $detalle->neto_detalle;
								$datosdet['otros_detalle'] =  $detalle->otros_detalle;
								$datosdet['comentario'] =  $detalle->comentario;
								$datosdet['codproc'] =  $detalle->codproc;
								$datosdet['id_cotped'] =  $detalle->id_cotped;						
								$datosdet = $this->formatear_datos_detalle($datosdet);
								$resul = $this->insertar_detalle($datosdet);
								if($resul===false){return false;}
								
						}
				}
				catch(ErrorException $e){return false;}
				
				return true;
		
		}
		
		function formatear_datos_detalle($datos=array()){
				
				if(!$datos['codproceso']){$datos['codproceso']='FACTURA';}
				if(!$datos['id_tipodetalle']){$datos['id_tipodetalle']='ARTIC';}
				if(!$datos['otros_detalle']){$datos['otros_detalle']=0;}
				if(!$datos['codalm']){$datos['codalm']='000000';}				
				$datos['cantidad_detalle'] = $this->formato_numerico_us($datos['cantidad_detalle']);
				$datos['precio_detalle'] = $this->formato_numerico_us($datos['precio_detalle'])*$this->TasaCambio;
				$datos['porcdesc_detalle'] = $this->formato_numerico_us($datos['porcdesc_detalle']);				
				$datos['porciva'] = $this->formato_numerico_us($datos['porciva']);
				$datos['iva_detalle'] = $this->formato_numerico_us($datos['iva_detalle'])*$this->TasaCambio;
				$datos['neto_detalle'] = $this->formato_numerico_us($datos['neto_detalle'])*$this->TasaCambio;
				$datos['otros_detalle'] = $this->formato_numerico_us($datos['otros_detalle'])*$this->TasaCambio;
				$datos['codproc'] = $datos['codproc']?$datos['codproc']:'FAC';
				$datos['id_cotped'] = $datos['id_cotped']?$datos['id_cotped']:0;			
				return $datos;
		}
		
		function formatear_detalle_grilla($datos=array()){
				
				
				$datosDet = $datos;
				
				
				$datos['cantidad_detalle'] = number_format($datos['cantidad_detalle'],2,',','.');
				$datos['precio_detalle'] = number_format($datos['precio_detalle']/$this->TasaCambio,2,',','.');
				$datos['porcdesc_detalle'] = number_format($datos['porcdesc_detalle'],2,',','.');
				$datos['desc_detalle'] = number_format(($datos['porcdesc_detalle']/100)*($datos['precio_detalle']/$this->TasaCambio),2,',','.');			
				$datos['porciva'] = number_format($datos['porciva'],2,',','.');
				$datos['iva_detalle'] = number_format($datos['iva_detalle']/$this->TasaCambio,2,',','.');
				$datos['neto_detalle'] = number_format($datos['neto_detalle']/$this->TasaCambio,2,',','.');
				$datos['otros_detalle'] = number_format($datos['otros_detalle']/$this->TasaCambio,2,',','.');
				$datos['subtot_detalle'] = number_format($datos['subtot_detalle']/$this->TasaCambio,2,',','.');
					
				if($this->CargarFactDev){
					$datos['cantidad_new'] = $datos['cantidad_detalle'];
					$datos['precio_new'] = $datos['precio_detalle'];
					$datos['porcdesc_new'] = $datos['porcdesc_detalle'];
					$datos['desc_new'] = number_format(($datosDet['desc_detalle']/100)*($datosDet['precio_detalle']/$this->TasaCambio),2,',','.');
					$datos['porciva_new'] = $datos['porciva'];
					$datos['iva_new'] = $datos['iva_detalle'];
					$datos['neto_new'] = $datos['neto_detalle'];
					$datos['otros_new'] = $datos['otros_detalle'];	
				}	
					
				return $datos;
		}
		
		function formatear_detalle_grilla_doc($datos=array()){
				
				
				$datosDet = $datos;
				
				
				$datos['cantidad_detdoc'] = number_format($datos['cantidad_detdoc'],2,',','.');
				$datos['precio_detdoc'] = number_format($datos['precio_detdoc']/$this->TasaCambio,2,',','.');
				$datos['porcdesc_detdoc'] = number_format($datos['porcdesc_detdoc'],2,',','.');
				$datos['desc_detdoc'] = number_format(($datos['porcdesc_detdoc']/100)*($datos['precio_detdoc']/$this->TasaCambio),2,',','.');			
				$datos['porciva_detdoc'] = number_format($datos['porciva_detdoc'],2,',','.');
				$datos['iva_detdoc'] = number_format($datos['iva_detdoc']/$this->TasaCambio,2,',','.');
				$datos['neto_detdoc'] = number_format($datos['neto_detdoc']/$this->TasaCambio,2,',','.');
				$datos['otros_detdoc'] = number_format($datos['otros_detdoc']/$this->TasaCambio,2,',','.');
				$datos['subtot_detdoc'] = number_format($datos['subtot_detdoc']/$this->TasaCambio,2,',','.');
				
				if($this->CargarFactDev){
					$datos['cantidad_new'] = $datos['cantidad_detalle'];
					$datos['precio_new'] = $datos['precio_detalle'];
					$datos['porcdesc_new'] = $datos['porcdesc_detalle'];
					$datos['desc_new'] = number_format(($datosDet['desc_detalle']/100)*($datosDet['precio_detalle']/$this->TasaCambio),2,',','.');
					$datos['porciva_new'] = $datos['porciva'];
					$datos['iva_new'] = $datos['iva_detalle'];
					$datos['neto_new'] = $datos['neto_detalle'];
					$datos['otros_new'] = $datos['otros_detalle'];	
				}	
					
				return $datos;
		}
		
		function eliminar_detalles($opciones=array()){				   
					
					$param['id_fact'] = $this->id_fact;					
					$param['criterio'] = 'por_cant_articulos';			
					$detalles = $this->consulta_detalles_fact($param);					
					if($detalles['rs']->RecordCount()){	
						$this->tipo_mov = 'REVFACT';
						$resp=$this->actualizar_movimiento_inv($opciones);
						if($resp===false){return false;}
					}	
					
					$datos = $opciones;
					$datos['criterio'] = 'por_detalle';			
					$detalles = $this->consulta_detalles_fact($datos);
					
					if(!$detalles['cantidad']){return true;}
					
					foreach ($detalles['rs'] as $fila){
						
						$fila['operacion'] = 'ELIMDET';
						if(!$fila['id_tipodetalle']){
						    $mensaje=" ERROR: El detalle ".$fila['coddetalle']." no posee tipo ! ";
						    $this->io_conexiones->mensajes_ajax($mensaje);
							return false;
						}
						
						$query_rs = "DELETE FROM cxc_detalle WHERE id_fact='".$fila['id_fact']."' AND codproceso='".$fila['codproceso']."' AND renglon=".$fila['renglon'];				
						$this->rs_data=$this->io_sql->select($query_rs);
						if($this->rs_data==false)
						{						
							$metodo = 'eliminar_detalles';
							$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
							$this->io_conexiones->mensajes_ajax($mensaje);
							return false;
							
						}
						
					}
							
					return true;	
		
		}
		
		
		function insertar_detalle($datos=array()){
					
					if(!$datos['id_fact'] or !$datos['renglon'] or !$datos['coddetalle'] )
					{					
						//echo $datos['codcliente'].','.$datos['tipperrif'];
						$mensaje = 'Faltan datos para poder realizar la operación de inserción de detalle. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					$datos['codproc'] = $datos['codproc']?$datos['codproc']:'FAC';
					$datos['id_cotped'] = $datos['id_cotped']?$datos['id_cotped']:0;
													
					 $query_rs = sprintf("INSERT INTO cxc_detalle(
													id_fact,
													id_tipodetalle,
													codproceso,
													renglon,
													coddetalle,
													codunimed,
													codalm,
													cantidad_detalle,
													precio_detalle,
													porcdesc_detalle,
													desc_detalle,
													porciva,
													iva_detalle,
													neto_detalle,
													otros_detalle,
													coduniadm,
													estcla,
													codestpro1, 
													codestpro2, 
													codestpro3, 
													codestpro4, 
													codestpro5,
													comentario,
													codproc,
													id_cotped													
											) 
										 VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',
												 '%s','%s','%s','%s','%s','%s',
												 '%s','%s','%s','%s','%s','%s','%s','%s','%s')",
										 	$datos['id_fact'],
											$datos['id_tipodetalle'],
											$datos['codproceso'],
											$datos['renglon'],
											$datos['coddetalle'],
											$datos['codunimed'],
											$datos['codalm'],
											$datos['cantidad_detalle'],
											$datos['precio_detalle'],
											$datos['porcdesc_detalle'],
											$datos['desc_detalle'],
											$datos['porciva'],
											$datos['iva_detalle'],
											$datos['neto_detalle'],
											$datos['otros_detalle'],
											$this->codunieje,
											$this->estcla,
											$this->codestpro1,
											$this->codestpro2,
											$this->codestpro3,
											$this->codestpro4,
											$this->codestpro5,
											$datos['comentario'],
											$datos['codproc'],
											$datos['id_cotped']			
										);								
					//echo $query_rs.'<br>';
					$this->rs_data=$this->io_sql->select($query_rs);			
				
					if($this->rs_data==false)
					{						
						$metodo = 'insertar_detalle';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}	
					return true;	
			
		}
		
		
		function modificar_factura($datos=array()){
		
					 if(!$datos['id_fact'] or !$datos['id_cliente'] or !$datos['numfact'])
					 {					
						
						$mensaje = 'Faltan datos para poder realizar la operación de UPDATE. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					 }
					
					 $this->id_fact = $datos['id_fact'];
					 $this->tipo_mov = 'FACT';
					
					 $opciones = $datos;
					 $opciones['criterio'] = 'validar_update';					 
					 $resultado = $this->consulta_facturas($opciones);					
					 if($resultado['cantidad']){
						$mensaje = 'El código ya esta siendo usado en otra factura con el mismo número. <br><b>id:</b> '.$datos['id_fact'];
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;					
					 }
					 
					 $this->nummov = $datos['nummov'];	
					 $datos = $this->formatear_datos_fact($datos);
					 
					//SEGURIDAD DE LA SUCURSAL
					$this->codintper = $datos['codsuc'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
					
					//SEGURIDAD DE LA CAJA
					$this->codintper = $datos['codsuc'].' - '.$datos['codcaj'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Caja"); return false;}
					 
   				/*
					$query_rs = "      UPDATE cxc_factura
										  SET   numcont='".$datos['numcont']."',												
												id_cliente='".$datos['id_cliente']."',
												id_transp='".$datos['id_transp']."',
												codmon='".$datos['codmon']."',
												tascam='".$datos['tascam']."',
												codcaj='".$datos['codcaj']."',
												tipopecont='".$datos['tipopecont']."',
												id_estfact='".$datos['id_estfact']."',
												id_condpago='".$datos['id_condpago']."',
												id_vend='".$datos['id_vend']."',
												fecfact='".$datos['fecfact']."',
												fecvenc='".$datos['fecvenc']."',
												porcdesc='".$datos['porcdesc']."',
												montodesc='".$datos['montodesc']."',
												saldo='".$datos['saldo']."',
												subtot='".$datos['subtot']."',
												iva='".$datos['iva']."',
												otros='".$datos['otros']."',
												total='".$datos['total']."',
												descripfact='".$datos['descripfact']."',
												comentadifact='".$datos['comentadifact']."',												
												fecmod='".date("Y-m-d")."', 
												usumod='".$_SESSION["la_logusr"]."', 
												horamod='".date("H:i")."'			 							 					
							              WHERE id_fact='".$datos['id_fact']."'; ";
					*/
					
					$query_rs = "      UPDATE cxc_factura
										  SET   numcont='".$datos['numcont']."',												
												id_transp='".$datos['id_transp']."',
												id_vend='".$datos['id_vend']."',												
												fecvenc='".$datos['fecvenc']."',
												descripfact='".$datos['descripfact']."',
												comentadifact='".$datos['comentadifact']."',												
												fecmod='".date("Y-m-d")."', 
												usumod='".$_SESSION["la_logusr"]."', 
												horamod='".date("H:i")."'			 							 					
							              WHERE id_fact='".$datos['id_fact']."' AND codproceso='FACTURA' ; ";
					
					//echo $query_rs;
					$this->rs_data=$this->io_sql->select($query_rs);			
				
					if($this->rs_data===false)
					{						
						$metodo = 'modificar_factura';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
					}
					/*
					$this->codfact = $datos['codfact'];
					$respuesta = $this->procesamiento_lotes_fact($datos);
					if($respuesta===false){return false;}
									 	 					
					 if(!$this->nummov){
						 $resp = $this->actualizar_movimiento_inv($datos);
						 if($resp===false){return false;}
					 }
					*/																				
					$mensaje = 'El documento fué modificado exitosamente.';
					$this->io_conexiones->mensajes_ajax($mensaje);
					
					return true;	
		
		}
		
		function ValidarFactura($datos=array()){
				
				 if(!$this->numfact){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle contable de la factura. 				           			    
								<br><b>METODO:</b> InsertDetCont ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				 }	
				
				 $param['codsis'] = 'CXC';
				 $param['seccion'] = 'CONFIG';
				 $param['entry'] = 'TIPO_CONSECUTIVO_FACTURACIÓN';
				 $this->TipConsecFac = $this->select_config($param);
				 if(!$this->TipConsecFac){$this->TipConsecFac='S';}
				 				 			
				 switch($this->TipConsecFac){			 
					case 'U':
						$opciones['criterio'] = 'por_ultimo_num';
						break;
						
					case 'S':
						$opciones['criterio'] = 'por_ultimo_num_sucursal';
						break;
						
					case 'C':
						$opciones['criterio'] = 'por_ultimo_num_caja';
						break;			 
				 }	
				
				switch($tipo){
						case 'por_ultimo_num_sucursal':						    
							$ls_sql=" SELECT numfact::integer 
							            FROM cxc_factura 
									   WHERE codproceso='FACTURA' 
									     AND codsuc='".$this->codsuc."'  
									  ORDER BY numfact::integer DESC LIMIT 1";
							break;
						
						case 'por_ultimo_num_caja':						    
							$ls_sql=" SELECT numfact::integer 
							            FROM cxc_factura 
									   WHERE codproceso='FACTURA' 
									     AND codsuc='".$this->codsuc."'
										 AND codcaj='".$this->codcaj."'  
									  ORDER BY numfact::integer DESC LIMIT 1";
							break;
							
						case 'por_ultimo_num':
						    $ls_sql=" SELECT numfact::integer 
							            FROM cxc_factura 
									   WHERE codproceso='FACTURA'
									   ORDER BY numfact::integer DESC LIMIT 1";
							break;
				}
				
				$metodo = 'ValidarFactura';
				$ls_sql=" SELECT numfact::integer FROM cxc_factura WHERE codproceso='FACTURA' ORDER BY numfact::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> NO se encontraron registros de facturas. 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;						
				}
				
				if(($rs_data->fields['numfact'] > $this->numfact) and !$this->la_permisos['administrador']){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se pueden eliminar facturas con número intermedios 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;						
				}
								
				if($this->DatosFact['opespi']=='DEV'){
					$datos['criterio']='por_factura';
					$datos['id_doc']=$datos['id_fact'];
					$datos['tipdoc']='FACT';
					$rs = $this->ConsultaMovCobros($datos);
					if($rs===false){return false;}
					
					if($rs['rs']->RecordCount()){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se pueden eliminar la factura de cuenta por cobrar.
									<br>La factura ya posee movimientos de cobro 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;						
					}
				}
				
				return true;
								
		}
		
		function eliminar_factura($datos=array()){
		
					if(!$datos['id_fact'] or !$datos['numfact'])
					{					
						$mensaje = 'Faltan datos para poder realizar la operación de eliminación. <br> Falta Id.';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					$param['codsis'] = 'CXC';
					$param['seccion'] = 'CONFIG';
					$param['entry'] = 'VALIDA_NUMERO_CONTROL';
					$this->ValidaNroContTalonario = $this->select_config($param);
					
					$this->id_fact = $datos['id_fact'];
					$resp = $this->extraerdatos_factura($datos);
					if($resp===false){return false;}
					
					//SEGURIDAD DE LA SUCURSAL
					$this->codintper = $datos['codsuc'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
					
					//SEGURIDAD DE LA CAJA
					$this->codintper = $datos['codsuc'].' - '.$datos['codcaj'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Caja"); return false;}
					
					$this->id_fact = $datos['id_fact'];	
					$this->numfact = $datos['numfact'];						
					$this->nummov = $datos['nummov'];
					$this->fecmov = $datos['fecfact'];
					$this->codsuc = $datos['codsuc'];				
					$this->tipdoc = 'FACT';	
					$this->id_doc = $this->id_fact;
					
					$resp = $this->ValidarFactura($datos);
					if($resp===false){return false;}
					
					if($this->DatosFact['tipopecont']=='DC'){					
						$resp = $this->ProcElimIngresoDC($datos);
						if($resp===false){return false;}								
					}					
					
					$resp = $this->EliminaEnlaceCotPedFact($datos);
					if($resp===false){return false;}
														
					$resp = $this->eliminar_detalles($datos);
					if($resp===false){return false;}
					
					$this->codtipmov='REGFAC';
					$this->iddoc=$this->id_fact;
					$this->fecmov=$this->fecmov;
					$resp = $this->EliminarMovVenta();
					if($resp===false){return false;}
										
					// SI ES NO ES UNA FACTURA HISTORICA Y EL AÑO DE LA FACTURA ES IGUAL AL AÑO DEL PERIODO ACTUAL 
					// SE ELIMINA EL COMPROBANTE CONTABLE Y PRESUPUESTARIO					
					if(!$this->DatosFact['cxchist'] and ($this->AnoFact==$this->AnoPeriodoAct)){
						$resp = $this->EliminarCmpFact($datos);
						if($resp===false){return false;}
					}	
																							
					$query_rs = "   DELETE FROM cxc_dt_spg 
					                      WHERE id_doc='".$datos['id_fact']."'
										    AND tipdoc='FACT'
											AND procede='CXCFAC'; 
					                DELETE FROM cxc_dt_spi 
									      WHERE id_doc='".$datos['id_fact']."'
										    AND tipdoc='FACT'
											AND procede='CXCFAC';  
									DELETE FROM cxc_dt_scg 
									      WHERE id_doc='".$datos['id_fact']."'
										    AND tipdoc='FACT'
											AND procede='CXCFAC'; 
									DELETE FROM cxc_dt_cargos WHERE id_fact='".$datos['id_fact']."' 
									                            AND codemp='".$this->ls_codemp."'
					                                            AND codproceso='FACTURA' ;
									DELETE FROM cxc_factura WHERE id_fact='".$datos['id_fact']."';									
									SELECT reset_sequencia('cxc_factura','id_fact'); 
								";
					
					$this->rs_data=$this->io_sql->select($query_rs);			
				
					if($this->rs_data==false)
					{						
						
						$metodo = 'eliminar_factura';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}
					
					if($this->io_sql->conn->Affected_Rows()<1){		      
							$mensaje = 'ERROR: No se pudo eliminar la factura !. No hay filas afectadas por la operación.';
							$this->io_conexiones->mensajes_ajax($mensaje);				
							return false;
					}					
					
					if($this->ValidaNroContTalonario){					
						$datos['criterio'] = "DISPONIBLE";
						$datos['tiptal'] = 'FAC';
						$datos['nrocont'] = $datos['numcont'];						
						$resp = $this->ActualizarDtTalonario($datos);
						if($resp===false){return false;}			
					}	
						
					$mensaje = 'La factura ha sido eliminada. ';
					$this->io_conexiones->mensajes_ajax($mensaje);		
					
					return true;
		}
	
	function ProcElimIngresoDC($datos=array()){	
			
			if(!$datos['id_fact']){					
				$mensaje = 'Faltan datos para poder realizar la operación de eliminación de ingreso por facturación de contado. <br> Falta Id.';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			$query_rs = "  SELECT ing.codsuc,ing.codcaj,ing.nroing 
			                 FROM cxc_ingresos ing
							INNER JOIN cxc_dt_movcobro cob ON ing.codsuc = cob.codsuc 
														  AND ing.codcaj = cob.codcaj
														  AND ing.nroing = cob.nroing 
							WHERE cob.tipdoc = 'FACT'
							  AND cob.id_doc = '".$datos['id_fact']."' ORDER BY 1,2,3 DESC ";
					
			$rs_data=$this->io_sql->select($query_rs);			
		
			if($rs_data==false){
				$metodo = 'ProcElimIngresoDC';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
			}
			
			if(!$rs_data->RecordCount()){return true;}
			
			
			foreach($rs_data as $ingreso){			
				$ingreso['criterio']='por_numero';			
				$resp = $this->ConsultaIngresosCaja($ingreso);
				if($resp===false){return false;}
				if(!$resp['rs']->RecordCount()){continue;}
				$DatosIng = $resp['rs']->fields;
				$res = $this->EliminarMovIngreso($DatosIng);
				if($res===false){return false;}				
			}
			
			return true;
	}	
	
	function consulta_pagogiros($opciones=array()){	
		
		
			$campos = ' * ';
			switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  g.codemp = '".$this->ls_codemp."' AND g.id_giros='".$opciones['id_giros']."'";
					break;							  
			 
		}
								   
		$query_rs = "SELECT ".$campos." FROM cxc_giros g ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_pagogiros';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
		
	function insertar_pagogiros($datos=array()){
					
					if(!$datos['id_fact'] or !$datos['mongiros'] or
					   !$datos['numgiros'] or !$datos['fecinigiros'])
					{					
						
						$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					 
														 
					 $opcionesx = $datos;
					 $opcionesx['criterio'] = 'por_fact';					 
					 $resultadox = $this->consulta_pagogiros($opcionesx);					 		 
					 if($resultadox['cantidad']){						 
						
						 $mensaje = 'La factura ya posee un pago giros ! ';
						 $this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						 return false;			 				
					 
					 }
					
					 $this->girospag['numgirpag'] = 0;
										
					 $query_rs = sprintf("INSERT INTO cxc_giros(
													codemp,
													id_fact,
													monpagfact,
													pergiro,
													mongiros,
													numgiros,
													moncuogiros,
													tasagiros,
													percaptasa,
													tipointeres,
													moninteres,
													monintxgiro,
													fecinigiros,
													monamogiros,
													stagiros,
													obsrecgiros,
													obssusgiros,
													fecreg,
													usureg,
													horareg
										) 
										 VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',
												 '%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
										 	$this->ls_codemp,											
											$datos['id_fact'],
											$datos['monpagfact'],
											$datos['pergiro'],
											$datos['mongiros'],
											$datos['numgiros'],
											$datos['moncuogiros'],
											$datos['tasagiros'],
											$datos['percaptasa'],
											$datos['tipointeres'],
											$datos['moninteres'],
											$datos['monintxgiro'],
											$this->io_conexiones->formatea_fecha_bd($datos['fecinigiros']),
											$datos['monamogiros'],
											$datos['stagiros'],
											$datos['obsrecgiros'],
											$datos['obssusgiros'],									
											date("Y-m-d"),
											$_SESSION["la_logusr"],
											date("H:i")							
										);								
					
			
					$this->io_sql->begin_transaction();
					$metodo = 'insertar_pagogiros';
					$opcionesx['ajax'] = '1';
					$opcionesx['imprimir'] = '1';
					$msj = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;									
					$id_insertado=$this->io_conexiones->conexion($query_rs,$opcionesx,$msj,'insert');
														
					if(!$id_insertado){					
						$mensaje = 'El registro no fué insertado.(No hay id_insert) ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;				
					}
					
					$datos['id_giros'] = $id_insertado;					
					$respuesta = $this->generar_giros($datos);
					
					if($respuesta===false){	
							$this->io_sql->rollback();			    											
							return false;						
					}		
					$this->io_sql->commit();
					
					$mensaje = "La operación se realizó exitosamente <b>Idº transacción:</b> ".$id_insertado;					
				    $this->io_conexiones->mensajes_ajax($mensaje);										
					return $id_insertado;	 
			
		}
		
		function modificar_pagogiros($datos=array()){
		
				if(!$datos['id_giros'] or !$datos['id_fact'] or !$datos['mongiros'] or
				   !$datos['numgiros'] or !$datos['fecinigiros'])
				{					
					
					$mensaje = 'Faltan datos para poder realizar la operación de recalculo. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}	
				
				 $opcionesx = $datos;
				 $opcionesx['criterio'] = 'por_id';					 
				 $pagogiros_anterior = $this->consulta_pagogiros($opcionesx);					 		 
				 if(!$pagogiros_anterior['cantidad']){				
					 $mensaje = 'No existe el pago por giros ! ';
					 $this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					 return false;			 				
				 
				 }				
				
				 if($pagogiros_anterior['fila']['numgiros'] == $datos['numgirpennew'] and !$pagogiros_anterior['fila']['monamort']){
				 	 $mensaje = 'No hay cambios en los parámetros del giro ! ';
					 $this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					 return false;	
				 }
								
				$opt = $pagogiros_anterior['fila'];
				$opt['criterio']='pendientes';													
				$girospend = $this->consulta_cuotasgiros($opt);
				if($girospend===false){return false;}		
				
				$opt['criterio']='pagados';													
				$girospag = $this->consulta_cuotasgiros($opt);
				if($girospag===false){return false;}
				
				$opt = $datos;
				$opt['criterio']='por_ultimo_pagado';													
				$ultimogiropag = $this->consulta_cuotasgiros($opt);
				if($ultimogiropag===false){return false;}
				
				$this->girosanterior = $pagogiros_anterior['fila'];
				$this->girosnuevo = $datos;
				$this->girospend = $girospend['fila'];
				$this->girospag  =  $girospag['fila'];
				
				$this->girospag['mongirpag'] = ($this->girospag['mongirpag'])?$this->girospag['mongirpag']:0;
				$this->girospag['numgirpag'] = ($this->girospag['numgirpag'])?$this->girospag['numgirpag']:0;
				
				$this->ultimogiropag = $ultimogiropag['fila'];
									
				$ls_sql = " UPDATE cxc_giros
							SET pergiro='".$this->girosnuevo['pergiro']."', 							    
							    numgiros='".($this->girosnuevo['numgirpennew'] + $this->girospag['numgirpag'])."', 
							    moncuogiros='".$this->girosnuevo['moncuogiros']."', 
							    tasagiros='".$this->girosnuevo['tasagiros']."', 
							    percaptasa='".$this->girosnuevo['percaptasa']."', 
							    tipointeres='".$this->girosnuevo['tipointeres']."', 
							    moninteres='".$this->girosnuevo['moninteres']."', 
							    monintxgiro='".$this->girosnuevo['monintxgiro']."',							    
							    monamogiros=(monamogiros+'".$this->girosnuevo['monamort']."'), 
							    stagiros='".$this->girosnuevo['stagiros']."',						    
							    fecmod='".date("Y-m-d")."', 
							    usumod='".$_SESSION["la_logusr"]."', 
							    horamod='".date("H:i")."'
							 WHERE id_giros='".$this->girosnuevo['id_giros']."' AND codemp='".$this->ls_codemp."' ";
				
				$this->io_sql->begin_transaction();				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_pagogiros';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					$this->io_sql->rollback();	
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = '<b>ERROR:</b> No se pudo recalcular el pago por giros <br>Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);	
						$this->io_sql->rollback();				
						return false;
				}
				
				$datosreproc['anterior'] = $pagogiros_anterior['fila'];
				$datosreproc['nuevo'] = $datos;	
				
				$respuesta = $this->audit_reprocesar_giros($datosreproc);
				if($respuesta===false){$this->io_sql->rollback(); return false;}
				
				$respuesta = $this->reprocesar_cutasgiros($datos);			
				if($respuesta===false){$this->io_sql->rollback(); return false;}
												
				$this->io_sql->commit();
				
				$mensaje = 'Los giros fueron modificados con éxito ! ';
				$this->io_conexiones->mensajes_ajax($mensaje);		
				return true;	
		
		}
		
		
		function consulta_reprocgiros($opciones=array()){
		
			  $campos = ' * ';
			  switch($opciones['criterio']){
					  
				  case "por_giro":				 
						$sql_criterio = " WHERE  rg.codemp = '".$this->ls_codemp."' AND rg.tipo_reproc='".$opciones['tipo_reproc']."'  AND rg.id_giros='".$opciones['id_giros']."'";
						break;	
				  
				  case "por_ultimo_numero":
				        $campos = ' numreproc ';
						$sql_criterio = " WHERE  rg.codemp = '".$this->ls_codemp."' AND rg.tipo_reproc='".$opciones['tipo_reproc']."'  AND rg.id_giros='".$opciones['id_giros']."' ORDER BY numreproc DESC LIMIT 1";
						break;						  
				 	
			}
									   
			$query_rs = "SELECT ".$campos." FROM cxc_girosreproc rg ".$sql_criterio;
			
			$clase = get_class($this);
			$metodo = 'consulta_reprocgiros';
			$param['arreglo'] = 'arreglo';
			$param['ajax'] = '1';
			$param['imprimir'] = '1';	
			$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
			return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
		}	
		
		
		function audit_reprocesar_giros($datos=array()){
					
					if(!$this->girosanterior['id_giros'] or !$this->girosnuevo['tipo_reproc'])
					{
						$mensaje = 'Faltan datos para poder realizar la operación de inserción de auditoría de reprocesamiento. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}	
					
					
					$opt = $this->girosanterior;
					$opt['criterio']='pendientes';													
					$girospend = $this->consulta_cuotasgiros($opt);
					if($girospend===false){return false;}					
					$this->girosanterior['numgirpend'] = $girospend['fila']['numgirpend']; 
					$this->girosanterior['mongirpend'] = $girospend['fila']['mongirpend'];				
					
					$opt = $this->girosnuevo;
					$opt['criterio'] = 'por_ultimo_numero';
					$resp = $this->consulta_reprocgiros($opt);
					if($resp===false){return false;}
					
					$datos['numreproc']=(!$resp['fila']['numreproc'])?1:($resp['fila']['numreproc']+1);
										
				    $ls_sql = sprintf("INSERT INTO cxc_girosreproc(
											codemp, tipo_reproc, id_giros, numreproc, monamort, numgirpag,mongirpag, 
											numgirosant,mongirosant,numgirospenant, mongirospenant, monintant, 
											pergiroant, tasagirosant, percaptasaant,tipointeresant, 
											numgirosnuevo,mongirosnuevo,numgirospennuevo, mongirospennuevo, 
											monintnuevo,pergironuevo, tasagirosnuevo, percaptasanuevo, tipointeresnuevo, 
											observreproc,fecreproc, usureproc, horareproc
										) 
										 VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',
												 '%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',
												 '%s','%s','%s','%s','%s','%s','%s','%s','%s')",
											$this->ls_codemp,										
											$this->girosnuevo['tipo_reproc'],
											$this->girosanterior['id_giros'],
											$datos['numreproc'],
											$this->girosnuevo['monamort'],
											$this->girospag['numgirpag'],
											$this->girospag['mongirpag'],
											$this->girosanterior['numgiros'],
											$this->girosanterior['mongiros'],
											$this->girosanterior['numgirpend'],
											$this->girosanterior['mongirpend'],
											$this->girosanterior['moninteres'],
											$this->girosanterior['pergiro'],
											$this->girosanterior['tasagiros'],
											$this->girosanterior['percaptasa'],
											$this->girosanterior['tipointeres'],
											$this->girosnuevo['numgirpennew'] + $this->girospag['numgirpag'],
											$this->girosnuevo['mongiros'],
											$this->girosnuevo['numgirpennew'],
											$this->girosnuevo['moncuogiros']*$this->girosnuevo['numgirpennew'],
											$this->girosnuevo['moninteres'],
											$this->girosnuevo['pergiro'],
											$this->girosnuevo['tasagiros'],
											$this->girosnuevo['percaptasa'],
											$this->girosnuevo['tipointeres'],
											$this->girosnuevo['observreproc'],																											
											date("Y-m-d"),
											$_SESSION["la_logusr"],
											date("H:i")							
										);			
								
					$this->rs_data=$this->io_sql->select($ls_sql);	
					
					if($this->rs_data==false){					
						$metodo = 'audit_reprocesar_giros';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);						
						return false;					
					}	
					
					return true;
		
		}
		
		
		function generar_giros($datos=array()){
					
					$numinit = ($datos['numinit'])?$datos['numinit']:1;	
					$this->girospag['numgirpag'] = ($this->girospag['numgirpag'])?$this->girospag['numgirpag']:0;								
					$fecvengiro = $this->io_conexiones->formatea_fecha_bd($datos['fecinigiros']);
								
					for($i=$numinit;$i<=($datos['numgiros'] + $this->girospag['numgirpag']);$i++){
							
							$datos['numgiro'] = $i;
							$datos['fecvengiro'] = $fecvengiro;
							$resp = $this->insertar_giro($datos);
							if($resp===false){return false;}
							$fecvengiro = $this->obtener_fecgirosiguiente($datos);
					
					}//FIN FOR
		
		}//FIN generar_giros
		
		
		function obtener_fecgirosiguiente($datos=array()){
						    
							$fecvengiro = $datos['fecvengiro'];
							switch($datos['pergiro']){											
								case   '1': $fecha = strtotime($fecvengiro); $fecvengiro = date('Y-m-d',strtotime("+1 day",$fecha)); break;											
								case   '7': $fecha = strtotime($fecvengiro); $fecvengiro = date('Y-m-d',strtotime("+1 week",$fecha)); break;											
								case  '15': $fecha = strtotime($fecvengiro); $fecvengiro = date('Y-m-d',strtotime("+2 week",$fecha)); break;								
								case  '30': $fecha = strtotime($fecvengiro); $fecvengiro = date('Y-m-d',strtotime("+1 month",$fecha)); break;											
								case  '90': $fecha = strtotime($fecvengiro); $fecvengiro = date('Y-m-d',strtotime("+3 month",$fecha)); break;												
								case '180': $fecha = strtotime($fecvengiro); $fecvengiro = date('Y-m-d',strtotime("+6 month",$fecha)); break;												
								case '360': $fecha = strtotime($fecvengiro); $fecvengiro = date('Y-m-d',strtotime("+1 year",$fecha)); break;
							}//FIN SWITCH
							return $fecvengiro;
		
		}
		
		
		function consulta_cuotasgiros($opciones=array()){	
		
				$campos = ' * ';
				switch($opciones['criterio']){
						  
					 case "por_giro":
							$sql_criterio = "  INNER JOIN cxc_giros g ON g.id_giros = gc.id_giros
							                   WHERE  gc.codemp = '".$this->ls_codemp."' AND gc.numsusp='0' AND gc.id_giros='".$opciones['id_giros']."'  AND gc.numgiro='".$opciones['numgiro']."' ";
							break;
					case "por_ultimo":
							$sql_criterio = "   INNER JOIN cxc_giros g ON g.id_giros = gc.id_giros
												WHERE  gc.codemp = '".$this->ls_codemp."'  AND gc.numsusp='0' AND gc.id_giros='".$opciones['id_giros']."' ORDER BY gc.numgiro DESC LIMIT 1";
							break;					
					 case "por_ultimo_susp":
							$sql_criterio = " WHERE  gc.codemp = '".$this->ls_codemp."'  AND gc.numsusp>0 AND gc.id_giros='".$opciones['id_giros']."'   AND gc.numgiro='".$opciones['numgiro']."' ORDER BY gc.numsusp DESC LIMIT 1";
							break;	
					  case "pagados":
					        $campos = " sum(mongiro) AS mongirpag,count(*) AS numgirpag";
							$sql_criterio = " WHERE  gc.codemp = '".$this->ls_codemp."'  AND gc.numsusp='0' AND gc.id_giros='".$opciones['id_giros']."'  AND gc.estgiro='1' ";
							break;	
					  case "pendientes":
					         $campos = " sum(mongiro) AS mongirpend,count(*) AS numgirpend ";
							$sql_criterio = " WHERE  gc.codemp = '".$this->ls_codemp."'  AND gc.numsusp='0' AND gc.id_giros='".$opciones['id_giros']."'  AND gc.estgiro='0' ";
							break;
					  case "listado_pendientes":
					        $campos = " * ";
							$sql_criterio = " WHERE  gc.codemp = '".$this->ls_codemp."'  AND gc.numsusp='0' AND gc.id_giros='".$opciones['id_giros']."'  AND gc.estgiro='0' ";
							break;
					  case "por_ultimo_pagado":
							$sql_criterio = " WHERE  gc.codemp = '".$this->ls_codemp."'  AND gc.numsusp=0 AND gc.id_giros='".$opciones['id_giros']."'  AND gc.estgiro='1' ORDER BY gc.numgiro DESC LIMIT 1";
							break;
					  case "por_listado":
					        $campos = " * ";
							$sql_criterio = " WHERE  gc.codemp = '".$this->ls_codemp."'  AND gc.numsusp='0' AND gc.id_giros='".$opciones['id_giros']."' ORDER BY gc.numgiro";
							break;
				}
										   
				$query_rs = "SELECT ".$campos." FROM cxc_giroscuotas gc ".$sql_criterio;
				//echo $query_rs.'<br>';
				$clase = get_class($this);
				$metodo = 'consulta_pagogiros';
				$param['arreglo'] = 'arreglo';
				$param['ajax'] = '1';
				$param['imprimir'] = '1';	
				$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
				return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
		}	
		
		
		function insertar_giro($datos=array()){
					
					if(!$datos['id_giros'] or !$datos['numgiro'] or
					   !$datos['fecvengiro'] or !$datos['mongiros'])
					{					
						
						echo $datos['id_giro'].' -- '.$datos['numgiro'].' -- '.$datos['fecvengiro'].' -- '.$datos['mongiro'];
						$mensaje = 'Faltan datos para poder realizar la operación de inserción de la cuota . ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					 
														 
					 $opcionesx = $datos;
					 $opcionesx['criterio'] = 'por_giro';					 
					 $resultadox = $this->consulta_cuotasgiros($opcionesx);					 		 
					 if($resultadox['cantidad']){					
						 $mensaje = 'Ya existen la cuota nº '.$datos['numgiro'].'! ';
						 $this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						 return false;			 				
					 
					 }
					
					 if(!$datos['moninteres']){$datos['moninteres']=0;}
										
					 $query_rs = sprintf("INSERT INTO cxc_giroscuotas(
													codemp,
													id_giros,
													numgiro,
													fecvengiro,
													mongiro,
													estgiro,
													numsusp,
													moninteres,
													fecreg,
													usureg,
													horareg
										) 
										 VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
										 	$this->ls_codemp,											
											$datos['id_giros'],
											$datos['numgiro'],
											$datos['fecvengiro'],
											$datos['moncuogiros'],
											'0',
											'0',
											$datos['monintxgiro'],																	
											date("Y-m-d"),
											$_SESSION["la_logusr"],
											date("H:i")							
										);								
					
					
					$rs_data=$this->io_sql->select($query_rs);			
				
					if($rs_data==false)
					{					
						$metodo = 'insertar_giro';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}					
					
					return true;	
			
		}
	
		function cancelacion_giros($prop=array()){		
				if(!$prop['numcancelados']){return false;}
				$msjresp = '<b>RESULTADOS:</b>';
				$this->io_sql->begin_transaction();
				if(sizeof($prop['numcancelados'])>0){					
					for($i = 0; $i < sizeof($prop['numcancelados']); $i++){
							$prop['numgiro'] = $prop['numcancelados'][$i];
							$prop['feccancel'] = $prop['feccancelados'][$i];
							$prop['tipo']='cancelar';							
							$resp = $this->actualizar_giro($prop);
							if($resp === false){$this->io_sql->rollback(); return false;}
							$msjresp .= "<br>Se canceló el giro número: ".$prop['numgiro'];								
					}//FIN FOR	
					$msjresp .= '<br>Se procesaron un total de: '.sizeof($prop['numcancelados']).' giro(s)'; 
					$this->io_sql->commit();
					return $msjresp;			
				}//FIN IF
				return false;		
		}
		
		function actualizar_giro($prop=array()){	
				
				if(!$prop['id_giros'] or !$prop['numgiro'] or (!$prop['feccancel'] and !$prop['tipo']))
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización del Giro. <br><b>Operación:</b> '.$prop['tipo'];
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}				
				if($prop['tipo']=='cancelar'){
				$ls_sql = "UPDATE cxc_giroscuotas
     					   SET estgiro='1', 
						       feccancel='".$this->io_conexiones->formatea_fecha_bd($prop['feccancel'])."',  
							   fecregcancel='".date("Y-m-d")."',  
							   usuregcancel='".$_SESSION["la_logusr"]."',  
							   horaregcancel='".date("H:i")."',
							   fecmod='".date("Y-m-d")."', 
							   usumod='".$_SESSION["la_logusr"]."', 
							   horamod='".date("H:i")."'
						   WHERE codemp='".$this->ls_codemp."' AND id_giros='".$prop['id_giros']."' AND numgiro='".$prop['numgiro']."' AND numsusp='0' ";
				}
				if($prop['tipo']=='reversar'){
					$ls_sql = "UPDATE cxc_giroscuotas
							   SET estgiro='0', 
								   feccancel='1900-01-01',  
								   fecregcancel='".date("Y-m-d")."',  
								   usuregcancel='".$_SESSION["la_logusr"]."',  
								   horaregcancel='".date("H:i")."',
								   fecmod='".date("Y-m-d")."', 
								   usumod='".$_SESSION["la_logusr"]."', 
								   horamod='".date("H:i")."'
							   WHERE codemp='".$this->ls_codemp."' AND id_giros='".$prop['id_giros']."' AND numgiro='".$prop['numgiro']."' AND numsusp='0' ";
				}
				if($prop['tipo']=='suspender'){
					$ls_sql = "UPDATE cxc_giroscuotas
							   SET numsusp='".$prop['numsusp']."', 
								   feccancel='1900-01-01',  
								   fecregsusp='".date("Y-m-d")."',  
								   usuregsusp='".$_SESSION["la_logusr"]."',  
								   horaregsusp='".date("H:i")."',
								   fecmod='".date("Y-m-d")."', 
								   usumod='".$_SESSION["la_logusr"]."', 
								   horamod='".date("H:i")."'
							   WHERE codemp='".$this->ls_codemp."' AND id_giros='".$prop['id_giros']."' AND numgiro='".$prop['numgiro']."' AND numsusp='0' AND estgiro='0'";
				}		
				if($prop['tipo']=='renumerar'){
					$ls_sql = "UPDATE cxc_giroscuotas
							   SET numgiro='".$prop['numgironuevo']."', 								   
								   fecmod='".date("Y-m-d")."', 
								   usumod='".$_SESSION["la_logusr"]."', 
								   horamod='".date("H:i")."'
							   WHERE codemp='".$this->ls_codemp."' AND id_giros='".$prop['id_giros']."' AND numgiro='".$prop['numgiro']."' AND numsusp='0' ";
				}		
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'actualizar_giro';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = '<b>ERROR:</b> No se pudo cancelar el giro: '.$prop['numgiro'].' <br>Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
					
				return true;	
		
		}
		
		function eliminar_giros($opciones=array()){
			
			switch($opciones['criterio']){						  
				 case "RECALCULAR":
						$query_rs = "DELETE FROM cxc_giroscuotas WHERE id_giros='".$opciones['id_giros']."' AND estgiro='0' AND numsusp='0' ";	
						break;
			}	
						
			$this->rs_data=$this->io_sql->select($query_rs);
			if($this->rs_data==false)
			{						
				$metodo = 'eliminar_giros';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
					
			return true;	
		
		}
		
		
		function revcancelacion_giros($prop=array()){		
				if(!$prop['numrevcancel']){return false;}
				$msjresp = '<b>RESULTADOS:</b>';
				$this->io_sql->begin_transaction();
				if(sizeof($prop['numrevcancel'])>0){					
					for($i = 0; $i < sizeof($prop['numrevcancel']); $i++){
							$prop['numgiro'] = $prop['numrevcancel'][$i];
							$prop['tipo'] = 'reversar';														
							$resp = $this->actualizar_giro($prop);
							if($resp === false){$this->io_sql->rollback(); return false;}
							$msjresp .= "<br>Se reverso la cancelación del giro número: ".$prop['numgiro'];								
					}//FIN FOR	
					$msjresp .= '<br>Se reversaron un total de: '.sizeof($prop['numrevcancel']).' giro(s)'; 
					$this->io_sql->commit();
					return $msjresp;			
				}//FIN IF
				return false;		
		}
		
		function suspencion_giros($prop=array()){
				
				if(!$prop['numsuspendidos']){return false;}
				$msjresp = '<b>RESULTADOS:</b>';
				$this->io_sql->begin_transaction();
				if(sizeof($prop['numsuspendidos'])>0){					
					for($i = 0; $i < sizeof($prop['numsuspendidos']); $i++){
							$prop['numgiro'] = $prop['numsuspendidos'][$i];													
							$resp = $this->suspender_giro($prop);
							if($resp === false){$this->io_sql->rollback(); return false;}
							$msjresp .= "<br>Se suspendió el giro número: ".$prop['numgiro'];								
					}//FIN FOR	
					$msjresp .= '<br>Se procesaron un total de: '.sizeof($prop['numsuspendidos']).' giro(s)'; 
					$this->io_sql->commit();
					return $msjresp;			
				}//FIN IF
				return false;	
			
		}
		
		function suspender_giro($prop=array()){
				   
				     $datos = $prop;
					 $datos['criterio'] = 'por_ultimo';					 
					 $ultimogiro = $this->consulta_cuotasgiros($datos);
					 if($ultimogiro === false){return false;}
					 
					 $datos['criterio'] = 'por_giro';	
					 $giroactual = $this->consulta_cuotasgiros($datos);	
					 if($giroactual === false){return false;}
					 //echo 'Fecha Actual: '.$giroactual['fila']['fecvengiro'].'<br>';				 
					 $fechasiguiente = $this->obtener_fecgirosiguiente($giroactual['fila']);
					 //echo 'Fecha Siguiente: '.$fechasiguiente.'<br>';
					 				 
					 $giroactual['fila']['criterio'] = 'por_giro';
					 $giroactual['fila']['numgiro'] = $giroactual['fila']['numgiro'] + 1;
					 //echo 'Número Giro Siguiente: '.$giroactual['fila']['numgiro'].'<br>';	
					 $girosiguiente = $this->consulta_cuotasgiros($giroactual['fila']);	
					 if($girosiguiente === false){return false;}
					 //echo 'Fecha Giro Siguiente: '.$girosiguiente['fila']['fecvengiro'].'<br>';
					 
					 $existeperiodo = 0;
					 if($girosiguiente['fila']['fecvengiro'] == $fechasiguiente){$existeperiodo = 1;}
					 
					 $datos['criterio'] = 'por_ultimo_susp';	
					 $ultimosusp = $this->consulta_cuotasgiros($datos);	
					 if($ultimosusp === false){return false;}
					 //INCREMENTO EL NUMERO DE LA SUSPENCIÓN
					 $datos['numsusp'] = $ultimosusp['fila']['numsusp']+1;					 
					 //SE SUSPENDE EL GIRO COLOCANDO EL NÚMERO SIGUIENTE A LA ÚLTIMA SUSPENSIÓN
					 $datos['tipo'] = 'suspender';														
					 $resp = $this->actualizar_giro($datos);		 		 
					 if($resp === false){return false;}
					 
					 if($existeperiodo){
					 		//OBTENGO LA SIGUIENTE FECHA DEL ÚLTIMO GIRO		 
							 $ultimogiro['fila']['fecvengiro'] = $this->obtener_fecgirosiguiente($ultimogiro['fila']);
							 $ultimogiro['fila']['numgiro'] = $ultimogiro['fila']['numgiro'] + 1;
							 $resp = $this->insertar_giro($ultimogiro['fila']);
							 if($resp === false){return false;}
					 }
					 else{
					 		//SI EL PERÍODO SIGUIENTE ESTA VACÍO SOLO INCREMENTO LA FECHA DEL PERÍODO ACTUAL AL SIGUIENTE PERÍODO E INSERTO EN LA SIGUIENTE POSICIÓN
							$giroactual['fila']['fecvengiro'] = $fechasiguiente;
							$giroactual['fila']['numgiro'] = $datos['numgiro'];
							$resp = $this->insertar_giro($giroactual['fila']);
							if($resp === false){return false;}
					 }
				     //RENUMERAMOS LOS GIROS
					 $resp = $this->renumerar_giros($datos);
					 if($resp === false){return false;}
		
		}
		
		function renumerar_giros($prop=array()){
		
				$datos = $prop;
				$datos['criterio'] = 'por_listado';					 
				$giros = $this->consulta_cuotasgiros($datos);
				if($resp === false){return false;}
				$numgiro = 1;
				foreach($giros['rs'] as $fila){
					 $datos = $fila;
					 $datos['tipo'] = 'renumerar';
					 $datos['numgironuevo'] = $numgiro;					 														
					 $resp = $this->actualizar_giro($datos);	
					 if($resp === false){return false;}
					 $numgiro++;					
				}
				return true;
		}
		
		function reprocesar_cutasgiros($datos=array()){
		
			switch($datos['tipo_reproc']){						  
				 case "RECALCULAR":
						$resp = $this->recalcular_pagogiros($datos);
						if($resp === false){return false;}
						return true;
						break;
			}	
					
			return false;		
		
		}
		
		function recalcular_pagogiros($datos=array()){
				
				$opt = $datos;
				$opt['criterio']='por_ultimo_pagado';													
				$ultimogiropag = $this->consulta_cuotasgiros($opt);
				if($ultimogiropag===false){return false;}
				$datos['numinit'] = 1;
				$datos['numgiros'] = $datos['numgirpennew'];			
				if($ultimogiropag['cantidad']){
					$datos['numinit'] = ($ultimogiropag['fila']['numgiro'] + 1);				
					$datos['fecinigiros'] = $this->obtener_fecgirosiguiente($ultimogiropag['fila']);
					$datos['fecinigiros'] = $this->io_conexiones->formatea_fecha_normal($datos['fecinigiros']);				
				}					
				$resp = $this->eliminar_giros($datos);
				if($resp===false){return false;}
				$resp = $this->generar_giros($datos);
				if($resp===false){return false;}
				return true;
		}
		
		function GenerarCodigoCliente($datos=array()){
				
				$metodo = 'GenerarCodigoCliente';
				$ls_sql=" SELECT codcliente::integer FROM cxc_clientes ORDER BY codcliente::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){$this->codcliente = str_pad('1',$this->digitoscliente,'0',STR_PAD_LEFT); return true;}
				
				$this->codcliente = str_pad(((integer)$rs_data->fields['codcliente']+1),$this->digitoscliente,'0',STR_PAD_LEFT);
				
				return true; 
				
		}
		
		function GenerarCodigoTipoCliente($datos=array()){
				
				$metodo = 'GenerarCodigoTipoCliente';
				$ls_sql=" SELECT codtipocli::integer FROM cxc_tipo_clientes ORDER BY codtipocli::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){$this->codtipocli = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
				
				$this->codtipocli = str_pad(((integer)$rs_data->fields['codtipocli']+1),$this->digitos,'0',STR_PAD_LEFT);
				
				return true; 
				
		}
		
		function GenerarCodigoZona($datos=array()){
				
				$metodo = 'GenerarCodigoZona';
				$ls_sql=" SELECT codzona::integer FROM cxc_zonas ORDER BY codzona::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){$this->codzona = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
				
				$this->codzona = str_pad(((integer)$rs_data->fields['codzona']+1),$this->digitos,'0',STR_PAD_LEFT);
				
				return true; 
				
		}
		
		function GenerarCodigoClasifCliente($datos=array()){
				
				$metodo = 'GenerarCodigoClasifCliente';
				$ls_sql=" SELECT codclasif::integer FROM cxc_clasif_clientes ORDER BY codclasif::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){$this->codclasif = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
				
				$this->codclasif = str_pad(((integer)$rs_data->fields['codclasif']+1),$this->digitos,'0',STR_PAD_LEFT);
				
				return true; 
				
		}
		
		function GenerarCodigoVend($datos=array()){
				
				$metodo = 'GenerarCodigoVend';
				$ls_sql=" SELECT codvend::integer FROM cxc_vendedores ORDER BY codvend::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){$this->codvend = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
				
				$this->codvend = str_pad(((integer)$rs_data->fields['codvend']+1),$this->digitos,'0',STR_PAD_LEFT);
				
				return true;
								
		}
		
		function GenerarCodigoCondPag($datos=array()){
				
				$metodo = 'GenerarCodigoVend';
				$ls_sql=" SELECT codcondpago::integer FROM cxc_condiciones_pago ORDER BY codcondpago::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){$this->codcondpago = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
				
				$this->codcondpago = str_pad(((integer)$rs_data->fields['codcondpago']+1),$this->digitos,'0',STR_PAD_LEFT);
				
				return true;
								
		}
		
		function GenerarCodigoTransp($datos=array()){
				
				$metodo = 'GenerarCodigoTransp';
				$ls_sql=" SELECT codtransp::integer FROM cxc_transporte ORDER BY codtransp::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){$this->codtransp = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
				
				$this->codtransp = str_pad(((integer)$rs_data->fields['codtransp']+1),$this->digitos,'0',STR_PAD_LEFT);
				
				return true;
								
		}
				
		
	function ConsultaServicios($opciones=array()){	
		
		
		$campos = ' * ';
		$opciones['criterio'] = $opciones['criterio']?$opciones['criterio']:'por_listado';
		
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  s.codemp = '".$this->ls_codemp."' AND s.codser='".$opciones['codser']."' AND destserv='VENT' ";
					break;							  
			 	   
			  case "por_listado":
					
					$creditos =  ', ( 
					                  SELECT SUM(porcar) 
									  FROM sigesp_cargos sc 
									  INNER JOIN soc_serviciocargo cs ON ( cs.codcar = sc.codcar AND cs.codemp = sc.codemp AND cs.codser = s.codser )
									 ) AS porcentaje_iva '; 
					
					$campos = "s.*, s.codser AS coddetalle, um.codunimed, um.codunimed AS codunimed, denunimed,ts.dentipser ".$creditos;			
					 
					
					$sql_criterio = "  LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 	
					                   LEFT JOIN siv_unidadmedida um ON s.codunimed=um.codunimed 								  						   
									   WHERE  s.codemp = '".$this->ls_codemp."' 
					                   AND destserv='VENT'
									   AND s.codser ".$this->postgres_ilike."LIKE('%".$opciones['codser']."%')
									   AND s.denser  ".$this->postgres_ilike."LIKE('%".$opciones['denser']."%') 
									   AND ts.codtipser  ".$this->postgres_ilike."LIKE('%".$opciones['codtipser']."%') 
									   ORDER BY denser ";
					break;			
		}
								   
		$query_rs = "SELECT ".$campos." FROM soc_servicios s ".$sql_criterio;
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'ConsultaServicios';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	
	
	function ComboTipoServic($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'sel_tiposerv';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['codtipser']){$carga = ' Seleccione '; $id_carga = '';}
				else{				
					$carga = $opciones['dentipser'];				  
					$id_carga = $opciones['codtipser'];
				}			
				
				$opciones['criterio'] = 'por_listado';					
				$resp = $this->ConsultaTipoServicios($opciones);
				if($resp===false){return false;}
				
				if($opciones['disable']===true){$disable='disabled';}
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'" '.$disable.'>
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resp as $dato) { 				
					$combo .= '<option value="'.$dato["codtipser"].'">'.$dato["dentipser"].'</option>';								
				}
				$combo .= '</select>';
																							
				return $combo;
	}
	
	function ConsultaTipoServicios($opciones=array()){	
		
		
		$campos = ' * ';
		$opciones['criterio'] = $opciones['criterio']?$opciones['criterio']:'por_listado';
		$metodo = 'ConsultaTipoServicios';
		
		switch($opciones['criterio']){
				  
			  case "por_codigo":
					$sql_criterio = " WHERE ts.codtipser='".$opciones['codtipser']."'";
					break;							  
			 	   
			  case "por_listado":
										
					$campos = " ts.* ";			
					 
					
					$sql_criterio = "  WHERE ts.dentipser ".$this->postgres_ilike."LIKE('%".$opciones['dentipser']."%')
									   AND ts.codtipser  ".$this->postgres_ilike."LIKE('%".$opciones['codtipser']."%')
									   ORDER BY dentipser ";
					break;			
		}
								   
		$query_rs = "SELECT ".$campos." FROM soc_tiposervicio ts ".$sql_criterio;
		
		$rs_data=$this->io_sql->select($query_rs);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
	}	
	
	
	function ProcContabilidadFact($opciones=array()){	
		
		
		if(!$this->id_fact)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle de la contabilidad de la factura. 				           			    
						<br><b>METODO:</b> ProcContabilidadFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
				
		$resp=$this->ContabilizarFactura($opciones);
		if($resp===false){return false;}
		
		
		return true;
	}	
	
	function ValidarDigIngreso($opciones=array()){	
						
		if(!$opciones['spi_cuenta'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar los digitos de las cuentas de ingreso. 				           			    
						<br><b>METODO:</b> ValidarDigIngreso ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		$DigIng = substr($opciones['spi_cuenta'],0,1);
		
		if($DigIng!=$_SESSION["la_empresa"]["ingreso_p"]){
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La cuenta '.$opciones['spi_cuenta'].' no es de ingreso.
			 			<br>Revise la cuenta presupuestaria del artículo o servicio.
						<br><b>DIGITO DE INGRESO:</b> '.$_SESSION["la_empresa"]["ingreso_p"].'           			    
						<br><b>METODO:</b> ValidarDigIngreso ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		return true;
	}
	
	
	function VerificarCmpContDescuadrado($datos=array()){	
		
								   
		$sql = "  SELECT  ((SELECT round(sum(monto)::numeric,2) 
							FROM cxc_dt_scg 
							WHERE comprobante='".$datos['comprobante']."'
							  AND procede = '".$datos['procedencia']."'
							  AND debhab = 'D')-
							(SELECT round(sum(monto)::numeric,2) 
							FROM cxc_dt_scg 
							WHERE comprobante='".$datos['comprobante']."'
							  AND procede = '".$datos['procedencia']."'
							  AND debhab = 'H')) AS cuadre ";
		
		$rs_data=$this->io_sql->select($sql);
		//echo $sql.'<br><br>';
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		if(!$rs_data->RecordCount()){
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron datos de detalle contable de la factura. 				           			    
						<br><b>METODO:</b> VerificarCmpContDescuadrado ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		
		}
	    //echo '<br>'.$rs_data->fields['cuadre'].'<br>';
		if($rs_data->fields['cuadre']!=0){
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El comprobante contable esta descuadrado. 				           			    
						<br><b>METODO:</b> VerificarCmpContDescuadrado ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		
		}
		
		return true;
	}	
	
	function ConsultaSpiFacturaIvaPresup($opciones=array()){		
		
		$query_rs = " 
							SELECT spi_cuenta,estcla, codestpro1, codestpro2, codestpro3, codestpro4, codestpro5,SUM(monto) AS monto 
							  FROM (
								SELECT  CASE WHEN id_tipodetalle='ARTIC' THEN ac.spicta
										  WHEN id_tipodetalle='SERVI' THEN sc.spicta     
										  ELSE ''
										  END AS spi_cuenta,
										  d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
									 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM(precio_detalle*ac.porcar/100)
										  WHEN id_tipodetalle='SERVI' THEN  SUM(precio_detalle*sc.porcar/100) 
									 ELSE 0
									 END AS monto
								 FROM cxc_detalle d 
								INNER JOIN cxc_factura f ON f.id_fact = d.id_fact 
											AND f.codproceso = d.codproceso
								 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
											 AND f.codemp = a.codemp 
											AND d.id_tipodetalle = 'ARTIC'	
								 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
								 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
								 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = ac.spicta
								 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
											  AND d.id_tipodetalle = 'SERVI'										
								 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
								 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
								 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = sc.spicta					
								 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
								 WHERE d.id_fact='".$this->id_fact."'
								 AND d.codproceso='FACTURA' 
								 AND iva_detalle>0
								 GROUP BY 1,2,3,4,5,6,7,id_tipodetalle
								 UNION
								 SELECT
								 CASE WHEN id_tipodetalle='ARTIC' THEN a.spi_cuenta
									  WHEN id_tipodetalle='SERVI' THEN s.spg_cuenta     
								 ELSE ''
								 END AS spi_cuenta,
								 d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
								 sum(precio_detalle*cantidad_detalle) AS monto		
								FROM cxc_detalle d
								INNER JOIN cxc_factura f ON f.id_fact = d.id_fact
											AND f.codproceso = d.codproceso 
								LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
											AND f.codemp = a.codemp 
											AND d.id_tipodetalle = 'ARTIC' 
								LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = a.spi_cuenta										                          
								LEFT JOIN spi_cuentas_estructuras cea ON spia.codemp = cea.codemp
											   AND spia.spi_cuenta = cea.spi_cuenta
										   AND d.estcla = cea.estcla																   
										   AND d.codestpro1 = cea.codestpro1
										   AND d.codestpro2 = cea.codestpro2
										   AND d.codestpro3 = cea.codestpro3
										   AND d.codestpro4 = cea.codestpro4
										   AND d.codestpro5 = cea.codestpro5
								LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
									  AND d.id_tipodetalle = 'SERVI'
								LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = s.spg_cuenta										                         
								LEFT JOIN spi_cuentas_estructuras ces ON spis.codemp = ces.codemp
											  AND spis.spi_cuenta = ces.spi_cuenta 
										  AND d.estcla = ces.estcla																  
										  AND d.codestpro1 = ces.codestpro1
										  AND d.codestpro2 = ces.codestpro2
										  AND d.codestpro3 = ces.codestpro3
										  AND d.codestpro4 = ces.codestpro4
										  AND d.codestpro5 = ces.codestpro5
								LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
								WHERE d.id_fact='".$this->id_fact."'
								AND d.codproceso='FACTURA'
								AND d.id_tipodetalle!='CONCE' 
								GROUP BY 1,2,3,4,5,6,7
								ORDER BY 1
								) INFOSPI 
								GROUP BY spi_cuenta,estcla, codestpro1, codestpro2, codestpro3, codestpro4, codestpro5
								ORDER BY 1,2,3,4,5,6,7
			 ";
		
		$clase = get_class($this);
		$metodo = 'ConsultaSpiFacturaIvaPresup';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);				
		return $respuesta;
	}
	
	function ConsultaScgFacturaIvaPresup($opciones=array()){
	
			$query_rs = " 
			
			SELECT sc_cuenta,SUM(monto) AS monto 
			 FROM (
			        SELECT 
			         CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
						  WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta 
						  WHEN id_tipodetalle='CONCE' THEN scgc.scg_cuenta    
					ELSE ''
					 END AS sc_cuenta,								
					 sum(precio_detalle*cantidad_detalle) AS monto	
					 FROM cxc_detalle d	
					INNER JOIN cxc_factura f ON f.id_fact = d.id_fact
								 AND f.codproceso = d.codproceso 
					 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
								 AND f.codemp = a.codemp 
								AND d.id_tipodetalle = 'ARTIC' 
					 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = a.spi_cuenta										                          
					 LEFT JOIN spi_cuentas_estructuras cea ON spia.codemp = cea.codemp
										   AND spia.spi_cuenta = cea.spi_cuenta
									   AND d.estcla = cea.estcla																   
									   AND d.codestpro1 = cea.codestpro1
									   AND d.codestpro2 = cea.codestpro2
									   AND d.codestpro3 = cea.codestpro3
									   AND d.codestpro4 = cea.codestpro4
									   AND d.codestpro5 = cea.codestpro5
					 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
								  AND d.id_tipodetalle = 'SERVI'
					 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = s.spg_cuenta										                         
					 LEFT JOIN spi_cuentas_estructuras ces ON spis.codemp = ces.codemp
										  AND spis.spi_cuenta = ces.spi_cuenta 
									  AND d.estcla = ces.estcla																  
									  AND d.codestpro1 = ces.codestpro1
									  AND d.codestpro2 = ces.codestpro2
									  AND d.codestpro3 = ces.codestpro3
									  AND d.codestpro4 = ces.codestpro4
									  AND d.codestpro5 = ces.codestpro5
					 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser
					 LEFT JOIN cxc_conceptofac scgc ON scgc.codconfac=d.coddetalle 
									   AND d.id_tipodetalle = 'CONCE' 										
					 WHERE d.id_fact='".$this->id_fact."'
					 AND d.codproceso='FACTURA' 
					 GROUP BY 1
					UNION 
					 SELECT
							CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
							  WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta     
						 ELSE ''
						 END AS sc_cuenta,
						 
						 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM(precio_detalle*ac.porcar/100)
							  WHEN id_tipodetalle='SERVI' THEN  SUM(precio_detalle*sc.porcar/100) 
						 ELSE 0
						 END AS monto
					 FROM cxc_detalle d 
					INNER JOIN cxc_factura f ON f.id_fact = d.id_fact 
								AND f.codproceso = d.codproceso
					 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
								 AND f.codemp = a.codemp 
								AND d.id_tipodetalle = 'ARTIC'	
					 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
					 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
					 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = ac.spicta
					 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
								  AND d.id_tipodetalle = 'SERVI'										
					 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
					 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
					 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = sc.spicta					
					 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
					 WHERE d.id_fact='".$this->id_fact."'
					 AND d.codproceso='FACTURA' 
					 AND iva_detalle>0
					 GROUP BY 1,id_tipodetalle
					 ORDER BY 1
				 ) INFOSCG
				 GROUP BY 1 
				 ORDER BY 1
			 ";
		
		$clase = get_class($this);
		$metodo = 'ConsultaScgFacturaIvaPresup';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);		
		return $respuesta;
	}
	
	
	function ConsultaScgIva($opciones=array()){
			/*
			$query_rs = " 
			
								SELECT sc_cuenta,SUM(monto) AS monto 
								 FROM ( 
										 SELECT						 
											 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
												  WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta     
											 ELSE ''
											 END AS sc_cuenta,						 
											 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM((precio_detalle*cantidad_detalle)*ac.porcar/100)
												  WHEN id_tipodetalle='SERVI' THEN  SUM((precio_detalle*cantidad_detalle)*sc.porcar/100) 
											 ELSE 0
											 END AS monto
										 FROM cxc_detalle d 
										INNER JOIN cxc_factura f ON f.id_fact = d.id_fact 
													AND f.codproceso = d.codproceso
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
													 AND f.codemp = a.codemp 
													AND d.id_tipodetalle = 'ARTIC'	
										 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
										 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
										 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = ac.spicta
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
													  AND d.id_tipodetalle = 'SERVI'										
										 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
										 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
										 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = sc.spicta					
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
										 WHERE d.id_fact='".$this->id_fact."'
										 AND d.codproceso='FACTURA' 
										 AND iva_detalle>0
										 GROUP BY 1,id_tipodetalle
										 ORDER BY 1
									 ) INFOSCG
									 GROUP BY 1 
									 ORDER BY 1
			 ";
		*/
		$query_rs = " 
			
			SELECT sc_cuenta,SUM(monto) AS monto 
			 FROM ( 
			         SELECT						 
						 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
							  WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta     
						 ELSE ''
						 END AS sc_cuenta,						 
						 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM(iva_detalle)
							  WHEN id_tipodetalle='SERVI' THEN  SUM(iva_detalle) 
						 ELSE 0
						 END AS monto
					 FROM cxc_detalle d 
					INNER JOIN cxc_factura f ON f.id_fact = d.id_fact 
								AND f.codproceso = d.codproceso
					 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
								 AND f.codemp = a.codemp 
								AND d.id_tipodetalle = 'ARTIC'	
					 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
					 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
					 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = ac.spicta
					 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
								  AND d.id_tipodetalle = 'SERVI'										
					 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
					 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
					 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = sc.spicta					
					 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
					 WHERE d.id_fact='".$this->id_fact."'
					 AND d.codproceso='FACTURA' 
					 AND iva_detalle>0
					 GROUP BY 1,id_tipodetalle
					 ORDER BY 1
				 ) INFOSCG
				 GROUP BY 1 
				 ORDER BY 1
			 ";
		
		$clase = get_class($this);
		$metodo = 'ConsultaScgIva';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);		
		return $respuesta;
	
	}
	
	
	
	function ContabilizarFactura($opciones=array()){	
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		
		if(!$this->id_fact)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle de la contabilidad de la factura. 				           			    
						<br><b>METODO:</b> ContabilizarFactura ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		$metodo = 'ContabilizarFactura';
				
		$resp = $this->extraerdatos_factura($opciones);
		if($resp===false){return false;}
		
		
		$this->procede='CXCFAC';
		$this->comprobante = $this->NroCmpFactura();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$opciones['fecfact'];	
		$this->ced_bene=$this->DatosFact['tipperrif'].$this->DatosFact['numpririf'].$this->DatosFact['numterrif'];
		$this->descripcion="FACTURA N° ".$this->numfact;		
		$this->operacion=$this->DatosFact['opespi'];
		$this->tipoProvBen = 'B';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'TIPO_CONTABILIZA_CXC';
		$this->TipoAfectacion = $this->select_config($param);
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CUENTA_CONTABLE_IVA';
		$this->CuentaIva = $this->select_config($param);
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CUENTA_CONTABLE_CLIENTES';
		$this->CuentaCliente = $this->select_config($param);
		
		//SI LA OPERACIÓN ES DEVENGADO Y COBRADO SE UTILIZA LA CUENTA DE CAJA
		if($this->operacion=='DC'){$this->CuentaCliente=$this->DatosFact['scg_caja'];}
		
		/**************************************************************************************************************************************/
		/****************************************** PRESUPUESTO DE INGRESO ********************************************************************/
		/**************************************************************************************************************************************/
		if($this->TipoAfectacion=='C'){			
			$datos['id_fact'] = $this->id_fact;	
			$datos['criterio'] = 'por_detalle_spi';			
			$rsdet = $this->consulta_detalles_fact($datos);
		}
		else{$rsdet = $this->ConsultaSpiFacturaIvaPresup($datos);}		
		if($rsdet===false){return false;}
		
		if($rsdet['rs']->RecordCount()){
			foreach($rsdet['rs'] as $spi){
					//echo 'SPI: '.$spi['spi_cuenta'].'-'.$spi['sc_cuenta'].'='.$spi['monto'].'<br>';	
					//echo $_SESSION["la_empresa"]["ingreso_p"].'<br>';
					
					$ctavalid = $this->ValidarDigIngreso($spi);
					if($ctavalid===false){return false;}			
					$resp = $this->InsertDetSpi($spi);
					if($resp===false){return false;}				
			}
		}
				
		
		/**************************************************************************************************************************************/
		/****************************************** CONTABILIDAD ******************************************************************************/
		/**************************************************************************************************************************************/
		if($this->TipoAfectacion=='C'){			
			$datos['criterio'] = 'por_detalle_contable';			
			$rsdet = $this->consulta_detalles_fact($datos);
		}
		else{$rsdet = $this->ConsultaScgFacturaIvaPresup($datos);}		
		if($rsdet===false){return false;}
		
		if($rsdet['rs']->RecordCount()){
			foreach($rsdet['rs'] as $scg){
				   //echo $scg['sc_cuenta'].'='.$scg['monto'].'<br>';
					$scg['debhab'] = 'H';
					$scg['monto'] = round($scg['monto'],2);
					$resp = $this->InsertDetCont($scg);
					if($resp===false){return false;}				
			}
	    }
		
		if($opciones['iva']>0 and $this->TipoAfectacion=='C'){
				
				$rsiva = $this->ConsultaScgIva($datos);
				if($rsiva===false){return false;}
				
				if($rsiva['rs']->RecordCount()){
					foreach($rsiva['rs'] as $scg){
						    //echo $scg['sc_cuenta'].'='.$scg['monto'].'<br>';
							$scg['debhab'] = 'H';
							$scg['monto'] = round($scg['monto'],2);
							$resp = $this->InsertDetCont($scg);
							if($resp===false){return false;}				
					}
				}
		}
		
		
		//echo $this->CuentaCliente.'='.$opciones['total'].'<br>';
		$scg['sc_cuenta'] = $this->CuentaCliente;
		$scg['debhab'] = 'D';
		$scg['monto'] = $opciones['total'];
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}
		
		//SI ES EL REGISTRO DE UNA FACTURA HISTÓRICA NO LA CONTABILIZA YA QUE PERTENECE A OTRO EJERCICIO.
		if($this->cxchist){return true;}
		
		$this->cmpspi->EsAjax = 1;		
		
		$resp = $this->GenerarCmp($opciones);
		if($resp===false){return false;}
					
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Generó y contabilizó:   <b>".$this->descripcion."</b> ".
						                "Monto: <b>".number_format($opciones['monmovcob'],2,",",".")."</b>";
		$this->guardar_seguridad();
		
		
		return true;
	}	
	
	
	function ActualizarFactura($datos=array()){
		$metodo = 'ActualizarFactura';
		if(!$this->id_fact or !$datos['proc'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar la información de contabilidad de la factura. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
				
		switch($datos['proc']){
				case 'DATOS_CONTABILIZACION':
					$ls_sql=" UPDATE cxc_factura SET contabilizado='1', fecconta='".$this->fechacomp."' WHERE id_fact='".$this->id_fact."'; ";
					break;
					
				case 'DATOS_ANULACION':
					$ls_sql=" UPDATE cxc_factura SET id_estfact='7', anulado='1', fecanula='".$this->fecanula."', conanula='".$this->conanula."' WHERE id_fact='".$this->id_fact."'; ";
					break;
					
				case 'DATOS_REVANULACION':
					$ls_sql=" UPDATE cxc_factura SET id_estfact='1', anulado='0', fecanula='1900-01-01', conanula='' WHERE id_fact='".$this->id_fact."'; ";
					if($this->DatosFact['tipopecont']=='DC'){$ls_sql=" UPDATE cxc_factura SET id_estfact='4', anulado='0', fecanula='1900-01-01', conanula='' WHERE id_fact='".$this->id_fact."'; ";}
					break;
				
				case 'COBRADO':
					$ls_sql=" UPDATE cxc_factura SET cobrado='1', id_estfact='4', fecciecxc='".date("Y-m-d")."' WHERE id_fact='".$this->id_fact."'; ";
					break;
					
				case 'NO_COBRADO':
					$ls_sql=" UPDATE cxc_factura SET cobrado='0', id_estfact='1', fecciecxc=null WHERE id_fact='".$this->id_fact."'; ";
					break;
		
		}		
		
		$this->rs_data=$this->io_sql->select($ls_sql);
		//echo $ls_sql.'<br>';		
		if($this->rs_data===false){						
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;
			echo $this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;						
		}
		
		if($this->io_sql->conn->Affected_Rows()<1){		      
				$mensaje = 'ERROR:->ERROR: No se pudo Actualizar la información de la Factura !. No hay filas afectadas por la operación.';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;
		}		
		
		return true;
	
	}
	
	function EliminarCmpFact($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: EliminarCmpFact
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de generar los comprobantes presupuestario y Contable
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 04/03/2013							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		if(!$this->id_fact)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el comprobante de la factura. 				           			    
						<br><b>METODO:</b> EliminarCmpFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		$metodo = 'EliminarCmpFact';
		
		$resp = $this->extraerdatos_factura($datos);
		if($resp===false){return false;}
		$this->numfact=$this->DatosFact['numfact'];		
		$this->procede='CXCFAC';
		$this->operacion="DEV";
		$this->comprobante = $this->NroCmpFactura();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$resp['fila']['fecfact'];	
		$this->ced_bene=$this->DatosFact['tipperrif'].$this->DatosFact['numpririf'].$this->DatosFact['numterrif'];
		$this->descripcion="FACTURA N° ".$this->numfact;
		
		$this->classcmp->EsAjax = 1;
		
		if($this->AnoFact!=$this->AnoPeriodoAct){
		    $msj = 'Los comprobantes contables y presupuestarios del cobro no serán eliminados por no pertenecer al año actual';
			$this->io_conexiones->mensajes_ajax($msj);
			return true;
		}	
		
		if($this->DatosFact['cxchist']){
		    $msj = 'Los comprobantes no contables y presupuestarios del cobro no serán eliminados por ser una factura histórica';
			$this->io_conexiones->mensajes_ajax($msj);
			return true;
		}	
		
		$resp = $this->EliminarCmp($datos);
		if($resp===false){return false;}
		
		
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se eleminó la factura <b>".$this->numfact."</b> ";
		$this->guardar_seguridad();
		
		return true;
	
	}
	

	
	
	function InsertDespacho($datos=array()){
		//echo "ok".$this->numfact.'---->'.$this->codunieje.'----->'.$datos['fecfact'];
		if(!$this->id_fact or !$this->numfact or !$this->codunieje or !$datos['fecfact'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el despacho de la factura. 				           			    
						<br><b>METODO:</b> InsertDespacho ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		if(!$this->tipdoc or !$this->id_doc)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo o el id del documento. 				           			    
						<br><b>METODO:</b> InsertDespacho ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		$metodo = 'InsertDespacho';
		
		$observacion=" Despacho de la factura ".$this->numfact.'\n'." ".$datos['descripfact'];
		
		$ls_emp="";
		$ls_tabla="siv_despacho";
		$ls_columna="numorddes";
		$as_numorddes=$this->fun->uf_generar_codigo($ls_emp,$this->ls_codemp,$ls_tabla,$ls_columna);
		
		$this->numorddes = $as_numorddes;
		
		$ls_sql=" INSERT INTO siv_despacho(codemp, numorddes, tipdoc, id_doc, numsol, coduniadm, codunides, fecdes, obsdes, 
                                           codusu, estdes, estrevdes, modprocede)
				     VALUES ('".$this->ls_codemp."','".
					            $as_numorddes."','".
								$this->tipdoc."','".	
								$this->id_doc."','".	
								$this->numfact."','".													
								$this->codunieje."','".
								$this->codunieje."','".
								$datos['fecfact']."','".								
								$observacion."','".
								$_SESSION["la_logusr"]."',
								'1',
								'1',
								'CXC')";
	
		$rs_data=$this->io_sql->select($ls_sql);
		//echo $ls_sql.'<br>';
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}		
						
		$datos['criterio'] = 'por_detalle_inv';			
		$detalles = $this->consulta_detalles_fact($datos);		
		if(!$detalles['cantidad']){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron detalles de artículos la factura. 				           			    
						    <br><b>METODO:</b> InsertDespacho ';					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;		
		}
		
		$i=1;
		
		foreach($detalles['rs'] as $fila){
			
			$ls_sql=" INSERT INTO siv_dt_despacho(codemp,numorddes,codart,numreg,codalm,unidad,canorisolsep,canart,preuniart,
			                                      monsubart,montotart,canpenart,orden)
							 VALUES ('".$this->ls_codemp."','".
										$as_numorddes."','".
										$fila['coddetalle']."','".													
										$i."','".
										$fila['codalm']."','D','".
										$fila['cantidad_detalle']."','".								
										$fila['cantidad_detalle']."','".
										$fila['precio_detalle']."','".
										$fila['precio_detalle']."','".
										$fila['cantidad_detalle']*$fila['precio_detalle']."','0','".
										$i."')";
			    //echo $ls_sql.'<br>';
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				$i++;	
						
		}
		
		return true;
		 
	}
	
	function ReversarDespacho($datos=array()){
		//echo "ok".$this->numfact.'---->'.$this->codunieje.'----->'.$datos['fecfact'];
		if(!$this->id_doc or !$this->tipdoc)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder reversar el despacho de la factura. 				           			    
						<br><b>METODO:</b> ReversarDespacho ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		$metodo = 'ReversarDespacho';
				
		$ls_sql=" UPDATE siv_despacho SET estrevdes='0' 
		           WHERE id_doc='".$this->id_doc."' 
				     AND tipdoc='".$this->tipdoc."' 
					 AND modprocede='CXC';
			    ";
	
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		$ls_sql=" SELECT * FROM siv_despacho
		           WHERE id_doc='".$this->id_doc."' 
				     AND tipdoc='".$this->tipdoc."' 
					 AND modprocede='CXC';
			    ";
	
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		if(!$rs_data->RecordCount())
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron los datos de la orden de despacho de almacén. 				           			    
						<br><b>METODO:</b> ReversarDespacho ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		$this->numorddes = $rs_data->fields['numorddes'];
		
		return true;
	}
	
	function ConsultarMovGravados($datos=array()){
		
		if(!$this->id_fact)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br>Faltan datos para Consultar consultar los movimientos Gravados				           			    
						<br><b>METODO:</b> ConsultarMovGravados ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		$metodo = 'ConsultarMovGravados';
				
		$ls_sql=" 
		       		SELECT dc.porcar, 
						   sum(monbasimp) AS monbasimp,
						   sum(monimp) AS monimp,
						   sum(montot) AS montot,
						   MAX(f.numfact) AS numfact,
						   MAX(f.fecfact) AS fecfact,
						   MAX(f.numcont) AS numcont,
						   MAX(nombre_cliente) AS nombre_cliente,
						   MAX(tipperrif)||'-'||MAX(numpririf)||'-'||MAX(numterrif) as rifcli,
						   MAX(f.subtot) AS subtot,
						   MAX(f.iva) AS iva,
						   MAX(baseimp) AS baseimp,
						   MAX(f.total) AS total,
						   MAX(tipo_iva) AS tipo_iva,
						   MAX(dc.codcar) AS codcar,
						   MAX(carg.dencar) AS dencar
					FROM cxc_dt_cargos dc
					INNER JOIN cxc_factura f ON f.id_fact = dc.id_fact 
								AND f.codproceso = dc.codproceso
					LEFT JOIN cxc_clientes cl ON cl.id_cliente = f.id_cliente
					LEFT JOIN sigesp_cargos carg ON carg.codcar = dc.codcar AND carg.codemp = dc.codemp
					WHERE dc.id_fact=".$this->id_fact."
					  AND dc.codproceso='FACTURA' 
			        GROUP BY dc.porcar
			    ";
	
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
	}
	
	function ConsultarMovGravadosDoc($datos=array()){
		
		if(!$this->id_fact or !$this->id_doc or !$this->codproceso)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br>Faltan datos para Consultar los movimientos Gravados				           			    
						<br><b>METODO:</b> ConsultarMovGravadosDoc ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		$metodo = 'ConsultarMovGravadosDoc';
				
		$ls_sql=" SELECT dc.porcar, 
						   sum(monbasimp) AS monbasimp,
						   sum(monimp) AS monimp,
						   sum(montot) AS montot,
						   MAX(f.numfact) AS numfact,
						   MAX(doc.fecdoc) AS fecfact,
						   MAX(doc.numcont_doc) AS numcont,
						   MAX(nombre_cliente) AS nombre_cliente,
						   MAX(tipperrif)||'-'||MAX(numpririf)||'-'||MAX(numterrif) as rifcli,
						   MAX(doc.subtot_doc) AS subtot,
						   MAX(doc.iva_doc) AS iva,
						   MAX(baseimp_doc) AS baseimp,
						   MAX(doc.total_doc) AS total,
						   MAX(tipo_iva) AS tipo_iva,
						   MAX(dc.codcar) AS codcar,
						   MAX(carg.dencar) AS dencar
					FROM cxc_dt_cargos dc
					INNER JOIN cxc_factura f ON f.id_fact = dc.id_fact			
					INNER JOIN cxc_documento doc ON doc.id_doc = dc.id_doc
					LEFT JOIN cxc_clientes cl ON cl.id_cliente = f.id_cliente
					LEFT JOIN sigesp_cargos carg ON carg.codcar = dc.codcar AND carg.codemp = dc.codemp
					LEFT JOIN sigesp_parroquia pa ON pa.codpai = cl.codpai AND pa.codest = cl.codest AND pa.codmun = cl.codmun AND pa.codpar = cl.codpar
					WHERE dc.id_fact=".$this->id_fact."
					  AND dc.id_doc='".$this->id_doc."'
					  AND dc.codproceso='".$this->codproceso."'
			        GROUP BY dc.porcar 
			    ";
				
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
	}
	
	function GenerarMovVenta($datos=array()){
		
		$metodo = 'GenerarMovVenta';
		
		if(!$this->codtipmov)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br>Faltan el tipo de movimiento para generar el movimiento del libro de ventas.				           			    
						<br><b>METODO:</b> GenerarMovVenta ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		
		switch($this->codtipmov){
		
				case 'REGFAC':
							if(!$this->id_fact or !$this->numfact or !$this->numcont or !$this->fecfact)
							{				
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el movimiento de Cuentas por Cobrar. 				           			    
											<br><b>METODO:</b> '.$metodo;
								$this->io_conexiones->mensajes_ajax($mensaje);																	
								return false;
							}
							//MOVIMIENTOS GRAVADOS
							$rsgrav = $this->ConsultarMovGravados();
							if($rsgrav===false){return false;}
							if($rsgrav->RecordCount()){								
									foreach($rsgrav as $DatosGrav){
											$this->fecmov = $DatosGrav['fecfact'];
											$this->iddoc = $this->id_fact;
											$this->numfac = $this->numfact;
											$this->numcont = $this->numcont;								
											$this->nrond = "";
											$this->nronc = "";
											$this->nrofacafec = "";								
											$this->total = $DatosGrav['montot'];
											$this->totalnograv = 0.00;
											$this->baseimp = $DatosGrav['monbasimp'];
											$this->porcimp = $DatosGrav['porcar'];
											$this->monimp = $DatosGrav['monimp'];
											$this->ivaret = 0.0;
											$this->ivaper = $this->monimp;
											$this->nroplaexp = "";		
											$this->tipoiva = $DatosGrav['tipo_iva'];	
											$resp = $this->InsertMovVenta($DatosGrav);
											if($resp===false){return false;}	
									}
							}
							
							//MOVIMIENTOS NO GRAVADOS
							if($this->MontoNoGrav){
								$this->fecmov = $this->fecfact;
								$this->iddoc = $this->id_fact;
								$this->numfac = $this->numfact;
								$this->numcont = $this->numcont;								
								$this->nrond = "";
								$this->nronc = "";
								$this->nrofacafec = "";								
								$this->total = $this->MontoNoGrav;
								$this->totalnograv = $this->MontoNoGrav;
								$this->baseimp = 0.00;
								$this->porcimp = 0.00;
								$this->monimp = 0.00;
								$this->ivaret = 0.0;
								$this->ivaper = 0.0;
								$this->nroplaexp = "";
								$this->tipoiva = 0;			
								$resp = $this->InsertMovVenta($DatosGrav);
								if($resp===false){return false;}	
							}	
													
												
					break;
					
				case 'ANUFAC':
					
					        if(!$this->id_fact or !$datos['numfact'] or !$datos['numcont'] or !$this->fecanula)
							{				
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el movimiento de Cuentas por Cobrar. 				           			    
											<br><b>METODO:</b> '.$metodo;
								$this->io_conexiones->mensajes_ajax($mensaje);																	
								return false;
							}	
														
							//MOVIMIENTOS GRAVADOS CON MONTOS EN SENTIDO CONTRARIO
							$rsgrav = $this->ConsultarMovGravados();
							if($rsgrav===false){return false;}
							if($rsgrav->RecordCount()){								
									foreach($rsgrav as $DatosGrav){
											$this->fecmov = $DatosGrav['fecfact'];
											$this->iddoc = $this->id_fact;
											$this->numfac = $this->numfact;
											$this->numcont = $this->numcont;								
											$this->nrond = "";
											$this->nronc = "";
											$this->nrofacafec = "";								
											$this->total = -$DatosGrav['montot'];
											$this->totalnograv = 0.00;
											$this->baseimp = -$DatosGrav['monbasimp'];
											$this->porcimp = $DatosGrav['porcar'];
											$this->monimp = -$DatosGrav['monimp'];
											$this->ivaret = 0.0;
											$this->ivaper = -$DatosGrav['ivaper'];
											$this->nroplaexp = "";		
											$this->tipoiva = $DatosGrav['tipo_iva'];	
											$resp = $this->InsertMovVenta($DatosGrav);
											if($resp===false){return false;}	
									}
							}
							
							//MOVIMIENTOS NO GRAVADOS CON MONTOS CON SIGNO NEGATIVO
							
							if($this->MontoNoGrav){
								$this->fecmov = $this->fecfact;
								$this->iddoc = $this->id_fact;
								$this->numfac = $this->numfact;
								$this->numcont = $this->numcont;								
								$this->nrond = "";
								$this->nronc = "";
								$this->nrofacafec = "";								
								$this->total = -$this->MontoNoGrav;
								$this->totalnograv = -$this->MontoNoGrav;
								$this->baseimp = 0.00;
								$this->porcimp = 0.00;
								$this->monimp = 0.00;
								$this->ivaret = 0.0;
								$this->ivaper = 0.0;
								$this->nroplaexp = "";
								$this->tipoiva = 0;			
								$resp = $this->InsertMovVenta($DatosGrav);
								if($resp===false){return false;}	
							}
					
					break;
					
				case 'NOTCRE':
							if(!$this->id_doc or !$datos['numfact'] or !$datos['numdoc'] or !$datos['numcont'] or !$datos['fecdoc'])
							{				
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el movimiento de Cuentas por Cobrar. 				           			    
											<br><b>METODO:</b> '.$metodo;
								$this->io_conexiones->mensajes_ajax($mensaje);	
								//print_r($datos);																
								return false;
							}	
							$rsgrav = $this->ConsultarMovGravadosDoc();
							if($rsgrav===false){return false;}
							if($rsgrav->RecordCount()){								
									foreach($rsgrav as $DatosGrav){							
											$this->fecmov = $datos['fecdoc'];
											$this->iddoc = $this->id_doc;
											$this->numfac = "";
											$this->numcont = "";								
											$this->nrond = "";
											$this->nronc = $datos['numdoc'];
											$this->nrofacafec = $datos['numfact'];								
											$this->total = -$DatosGrav['montot'];
											$this->totalnograv = 0.00;
											$this->baseimp = -$DatosGrav['monbasimp'];
											$this->porcimp = $DatosGrav['porcar'];
											$this->monimp = -$DatosGrav['monimp'];
											$this->ivaret = 0.0;
											$this->ivaper = -$DatosGrav['monimp'];
											$this->nroplaexp = "";
											$this->tipoiva = $DatosGrav['tipo_iva'];
											$resp = $this->InsertMovVenta($DatosGrav);
											if($resp===false){return false;}
									}
							}
							
							//MOVIMIENTOS NO GRAVADOS
							if($this->MontoNoGrav){
								$this->fecmov = $datos['fecdoc'];
								$this->iddoc = $this->id_doc;
								$this->numfac = "";
								$this->numcont = "";								
								$this->nrond = "";
								$this->nronc = $datos['numdoc'];
								$this->nrofacafec = "";								
								$this->total = -$this->MontoNoGrav;
								$this->totalnograv = -$this->MontoNoGrav;
								$this->baseimp = 0.00;
								$this->porcimp = 0.00;
								$this->monimp = 0.00;
								$this->ivaret = 0.0;
								$this->ivaper = 0.0;
								$this->nroplaexp = "";
								$this->tipoiva = 0;			
								$resp = $this->InsertMovVenta($DatosGrav);
								if($resp===false){return false;}	
							}	
					break;
					
				case 'NOTDEB':
				
					break;
		}
		
		
		return true;	
		
	}
	
	
	function InsertMovVenta($datos=array()){
		//echo "ok".$this->numfact.'-'.$this->codfact.'-'.$this->procede.'-'.$this->fechacomp;
		$metodo = 'InsertMovVenta';
		if(!$this->codtipmov or !$this->fecmov or !$this->iddoc)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle contable de la factura. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}			
		
		/*
		$this->codtipmov
		REGFAC=REGISTRO DE FACTURA
		ANUFAC=ANULACIÓN DE FACTURA
		NOTCRE=NOTA DE CRÉDITO
		ANUCRE=ANULACIÓN DE NOTA DE CRÉDITO
		NOTDEB=NOTA DE DÉBITO
		ANUDEB=ANULACIÓN DE NOTA DE DÉBITO
		*/		
		
		$this->codtipmov=$this->codtipmov?$this->codtipmov:'REGFAC';
		$this->total = $this->total?$this->total:0.0;
		$this->totalnograv = $this->totalnograv?$this->totalnograv:0.0;
		$this->baseimp = $this->baseimp?$this->baseimp:0.0;
		$this->porcimp = $this->porcimp?$this->porcimp:0.0;
		$this->moninp = $this->moninp?$this->moninp:0.0;
		$this->ivaret = $this->ivaret?$this->ivaret:0.0;
		$this->ivaper = $this->ivaper?$this->ivaper:0.0;	
				
		$ls_sql="SELECT reset_sequencia('cxc_movimientos','idmov');
		         INSERT INTO cxc_movimientos( codemp,id_fact, codtipmov, fecmov, iddoc, numfac, numcont, nrond, nronc, 
											  nrofacafec, total, totalnograb, baseimp, porcimp, monimp, ivaret, 
											  ivaper, nroplaexp,tipoiva, fecreg, usureg, horareg)
				     VALUES ('".$this->ls_codemp."','".
					 			$this->id_fact."','".
					            $this->codtipmov."','".
					            $this->fecmov."','".
								$this->iddoc."','".
								$this->numfac."','".
								$this->numcont."','".								
								$this->nrond."','".
								$this->nronc."','".
								$this->nrofacafec."','".								
								$this->total."','".
								$this->totalnograv."','".
								$this->baseimp."','".
								$this->porcimp."','".
								$this->monimp."','".
								$this->ivaret."','".
								$this->ivaper."','".	
								$this->nroplaexp."','".	
								$this->tipoiva."','".								
								date("Y-m-d")."','".
								$_SESSION["la_logusr"]."','".
								date("H:i")."')";
	
		$rs_data=$this->io_sql->select($ls_sql);
		//echo $ls_sql.'<br><br>';
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return true;
		
	}
	
	
	function EliminarMovVenta($datos=array()){
					
			$metodo = 'EliminarMovVenta';
			
			if(!$this->codtipmov or !$this->iddoc or !$this->id_fact or !$this->fecmov)
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el movimiento de Cuentas por Cobrar. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}			
																																									
			$query_rs = "   DELETE FROM cxc_movimientos 
			                      WHERE codtipmov='".$this->codtipmov."' 
								    AND iddoc='".$this->iddoc."'
									AND id_fact='".$this->id_fact."' 
									AND fecmov='".$this->fecmov."'; 
							SELECT reset_sequencia('cxc_movimientos','idmov');
						";
			
			$this->rs_data=$this->io_sql->select($query_rs);			
		
			if($this->rs_data==false){						
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;						
			}
			
			if($this->io_sql->conn->Affected_Rows()<1){		      
					$mensaje = 'ERROR: No se pudo eliminar el movimiento !. No hay filas afectadas por la operación.';
					$this->io_conexiones->mensajes_ajax($mensaje);				
					return false;
			}		
												
			return true;
	}
	
	function ProcAnulaFactura($datos=array()){
		
		$this->codtipmov='ANUFAC';
				
		foreach($this->Ids as $this->id_fact){	
			if($this->id_fact){			
				$datos['id_fact']=$this->id_fact;
				$this->iddoc=$this->id_fact;
				$this->tipdoc = 'FACT';	
				$this->id_doc = $this->id_fact;				
				$resp = $this->ActAnulaFactura($datos);
				if($resp===false){return false; break;}
				$datos['estcotped']='EMI';
				$datos['estenlace']='A';		
				$resp = $this->ProcAnulaEnlaceCotPedFact($datos);
				if($resp===false){return false; break;}								
				$resp = $this->extraerdatos_factura($datos);
				if($resp===false){return false; break;}	
				$resp = $this->ProcAnulaIngresoDC($datos);
				if($resp===false){return false; break;}							
				$resp = $this->GenerarMovVenta($this->DatosFact);
				if($resp===false){return false; break;}
				$param['id_fact'] = $this->id_fact;					
				$param['criterio'] = 'por_cant_articulos';			
				$detalles = $this->consulta_detalles_fact($param);					
				if($detalles['rs']->RecordCount()){	
					$this->tipo_mov = 'ANUFACT';
					$resp=$this->actualizar_movimiento_inv($this->DatosFact);
					if($resp===false){return false;}
				}	
				$resp = $this->CmpAnulaFact($this->DatosFact);
				if($resp===false){return false; break;}					
				$param['proc']='DATOS_ANULACION';
				$resp = $this->ActualizarFactura($param);
				if($resp===false){return false;}					
				//$this->DatosFact
			}
		}		
		
		return true;
	}
	
	
	function ProcAnulaIngresoDC($datos=array()){	
			
			if(!$datos['id_fact']){					
				$mensaje = 'Faltan datos para poder realizar la operación de anulación de ingreso por facturación de contado. <br> Falta Id.';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			$query_rs = "  SELECT ing.codsuc,ing.codcaj,ing.nroing 
			                 FROM cxc_ingresos ing
							INNER JOIN cxc_dt_movcobro cob ON ing.codsuc = cob.codsuc 
														  AND ing.codcaj = cob.codcaj
														  AND ing.nroing = cob.nroing 
							WHERE cob.tipdoc = 'FACT'
							  AND cob.id_doc = '".$datos['id_fact']."' ";
					
			$rs_data=$this->io_sql->select($query_rs);			
		
			if($rs_data==false){
				$metodo = 'ProcAnulaIngresoDC';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
			}
			
			if(!$rs_data->RecordCount()){return true;}
						
			foreach($rs_data as $ingreso){			
				$ingreso['criterio']='por_numero';			
				$resp = $this->ConsultaIngresosCaja($ingreso);
				if($resp===false){return false;}
				if(!$resp['rs']->RecordCount()){continue;}
				$DatosIng = $resp['rs']->fields;
				$DatosIng['fecanuing'] = $this->fecanula;
				$DatosIng['conanuing'] = $this->conanula;
				$res = $this->AnularIngreso($DatosIng);
				if($res===false){return false;}				
			}
			
			return true;
	}	
	
	function ProcRevAnulaFactura($datos=array()){
		
		$this->codtipmov='ANUFAC';
		
		foreach($this->Ids as $this->id_fact){				
			if($this->id_fact){
				$datos['id_fact']=$this->id_fact;
				$this->iddoc=$this->id_fact;
				$this->tipdoc = 'FACT';	
				$this->id_doc = $this->id_fact;						
				$resp = $this->ActAnulaFactura($datos);
				if($resp===false){return false; break;}				
				$resp = $this->extraerdatos_factura($datos);
				if($resp===false){return false; break;}
				$datos['estcotped']='PRO';
				$datos['estenlace']='P';		
				$resp = $this->ProcAnulaEnlaceCotPedFact($datos);
				if($resp===false){return false; break;}
				$resp = $this->ProcRevAnulaIngresoDC($datos);
				if($resp===false){return false; break;}	
				$this->fecmov = $this->DatosFact['fecfact'];
				$resp = $this->EliminarMovVenta($this->DatosFact);
				if($resp===false){return false; break;}
				$param['id_fact'] = $this->id_fact;					
				$param['criterio'] = 'por_cant_articulos';			
				$detalles = $this->consulta_detalles_fact($param);					
				if($detalles['rs']->RecordCount()){	
					$this->tipo_mov = 'REVANUFACT';
					$resp=$this->actualizar_movimiento_inv($this->DatosFact);
					if($resp===false){return false;}
				}	
				$resp = $this->EliminarCmpAnuFact($this->DatosFact);
				if($resp===false){return false; break;}
				$param['proc']='DATOS_REVANULACION';
				$resp = $this->ActualizarFactura($param);
				if($resp===false){return false;}	
			}			
			//$this->DatosFact
		}		
		
		return true;
	}
	
	
	function ProcRevAnulaIngresoDC($datos=array()){	
			
			if(!$datos['id_fact']){					
				$mensaje = 'Faltan datos para poder realizar la operación de anulación de ingreso por facturación de contado. <br> Falta Id.';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			$query_rs = "  SELECT ing.codsuc,ing.codcaj,ing.nroing 
			                 FROM cxc_ingresos ing
							INNER JOIN cxc_dt_movcobro cob ON ing.codsuc = cob.codsuc 
														  AND ing.codcaj = cob.codcaj
														  AND ing.nroing = cob.nroing 
							WHERE cob.tipdoc = 'FACT'
							  AND cob.id_doc = '".$datos['id_fact']."' ";
					
			$rs_data=$this->io_sql->select($query_rs);			
		
			if($rs_data==false){
				$metodo = 'ProcRevAnulaIngresoDC';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
			}
			
			if(!$rs_data->RecordCount()){return true;}
						
			foreach($rs_data as $ingreso){			
				$ingreso['criterio']='por_numero';			
				$resp = $this->ConsultaIngresosCaja($ingreso);
				if($resp===false){return false;}
				if(!$resp['rs']->RecordCount()){continue;}
				$DatosIng = $resp['rs']->fields;
				$DatosIng['fecanuing'] = $this->fecanula;
				$DatosIng['conanuing'] = $this->conanula;
				$res = $this->RevAnuIngreso($DatosIng);
				if($res===false){return false;}				
			}
			
			return true;
	}	
	
	function ActAnulaFactura($datos=array()){
		
		$metodo = 'ActAnulaFactura';
			
		if(!$this->id_fact or !$this->fecanula or (!$this->conanula and $this->ope=="A") or !$this->ope)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder anular la factura. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}			
		
		switch($this->ope){
			case 'A':
				$ope=1;
				$fecanula = "'".$this->fecanula."'";
				$conanula = $this->conanula;
				break;
				
			case 'R':
				$ope=0;
				$fecanula ='NULL';
				$conanula = "";
				break;		
		}	
																																								
		$query_rs = "   UPDATE cxc_factura SET anulado='".$ope."', fecanula=".$fecanula.",conanula='".$conanula."' WHERE id_fact='".$this->id_fact."';
					";
		
		$this->rs_data=$this->io_sql->select($query_rs);			
	
		if($this->rs_data==false){						
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;						
		}
		
		if($this->io_sql->conn->Affected_Rows()<1){		      
				$mensaje = 'ERROR: No se pudo eliminar el movimiento !. No hay filas afectadas por la operación.';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;
		}									
				
		return true;
	}
	
	
	function CmpAnulaFact($opciones=array()){	
				
		if(!$this->id_fact or !$this->operacion)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el comprobante de anulación 				           			    
						<br><b>METODO:</b> CmpAnulaFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;
				
		$metodo = 'CmpAnulaFact';
		$this->fechacomp = $this->fecanula;		
		$resp = $this->extraerdatos_factura($opciones);
		if($resp===false){return false;}
				
		$this->procede='CXCANU';
		$this->comprobante = $this->NroCmpFactura();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$opciones['fecfact'];	
		$this->ced_bene=$this->DatosFact['tipperrif'].$this->DatosFact['numpririf'].$this->DatosFact['numterrif'];
		$this->descripcion="ANULACIÓN DE FACTURA N° ".$this->numfact;		
		//SI LA OPERACIÓN ES DEVENGADO Y COBRADO SE UTILIZA LA CUENTA DE CAJA
		//if($this->operacion=='DC'){$this->CuentaCliente=$this->DatosFact['scg_caja'];}		
		$this->tipoProvBen = 'B';
		
		//return true;
		$this->cmpspi->EsAjax = 1;
		$ls_codemp=$this->ls_codemp;
		$ls_operacion=$this->operacion;
		$ls_comprobante=$this->comprobante;		
		$_SESSION["fechacomprobante"]=$this->io_conexiones->formatea_fecha_normal($this->fechacomp);
		$ld_fecha = $_SESSION["fechacomprobante"];
		$ls_procedencia=$this->procede;
		$ls_descripcion=$this->descripcion;
		$ls_tipo=$this->tipoProvBen;
		$this->classcmp->io_int_int->is_tipo=$ls_tipo;
		$this->classcmp->io_int_int->is_cod_prov="----------";
		$this->classcmp->io_int_int->is_ced_ben=$this->ced_bene;		
		$this->classcmp->io_int_int->ib_procesando_cmp=false;
		$this->classcmp->io_int_int->id_fecha=$this->fechacomp;
		$ls_codban     = "---";
		$ls_ctaban     = "-------------------------";
		$ls_rendfon    =0;
		$ls_fuentefin="--";
		
		$resp=$this->io_fecha->uf_valida_fecha_periodo($_SESSION["fechacomprobante"],$this->ls_codemp);
		if($resp===false){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> '.$this->is_msg_error. 				           			    
						'<br><b>METODO:</b> CmpAnulaFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
	   
		$existe=$this->cmpspi->uf_verificar_comprobante($ls_codemp,$this->procede,$ls_comprobante);
		if($existe){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El comprobante '.$ls_comprobante.' de contabilización ya existe 				           			    
						<br><b>METODO:</b> CmpAnulaFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
			
		//INSERTA EL COMPROBANTE (CABECERA)
		$this->cmpspi->OmitorMsj=true;
		$resp=$this->cmpspi->uf_guardar_automatico($ls_comprobante,$ld_fecha,$ls_procedencia,$ls_descripcion,
												     $this->classcmp->io_int_int->is_cod_prov,
												     $this->classcmp->io_int_int->is_ced_ben,$ls_tipo,1,
												     $ls_codban,$ls_ctaban, $ls_rendfon, $ls_fuentefin, 'N');		
		if($resp===false){return false;}
		
		$this->arr_cmp["comprobante"]=$ls_comprobante;
		$ls_documento=$ls_comprobante;
		$ld_fecdb=$this->fechacomp;
		$this->arr_cmp["fecha"]      	 = $this->fechacomp;
		$this->arr_cmp["procedencia"]	 = $ls_procedencia;
		$this->arr_cmp["descripcion"]	 = $ls_descripcion;
		$this->arr_cmp["proveedor"]  	 = $this->classcmp->io_int_int->is_cod_prov;
		$this->arr_cmp["beneficiario"] = $this->classcmp->io_int_int->is_ced_ben;
		$this->arr_cmp["tipo"]         = $ls_tipo;
		$this->arr_cmp["codemp"]       = $ls_codemp;
		$this->arr_cmp["tipo_comp"]    = 1;
		
		//INSERTA EL DETALLE PRESUPUESTARIO DE INGRESO DEL COMPROBANTE	
		$this->procede='CXCFAC';
		$spi = $this->ConsultaDetSPI($this->DatosFact);
		if($spi===false){return false;}
		$this->procede='CXCANU';
		
		if($spi->RecordCount()){				
			foreach($spi as $DatosSPI){		
				$ld_disponible=0;
				//PARA EVITAR QUE EL MÉTODO GENERE EL COMPROBANTE DE CONTABILIDAD AUTOMÁTICAMENTE YA QUE SE DUPLICARÍA	
				$this->cmpspi->io_int_spi->ib_AutoConta	= false;	
				//***********************************************************************************
				$DatosSPI['monto']=-($DatosSPI['monto']);
				$resp=$this->cmpspi->uf_guardar_movimientos($this->arr_cmp,$DatosSPI['spi_cuenta'],$this->procede,$ls_descripcion,
															$ls_documento,$ls_operacion,
															0,$DatosSPI['monto'],"C",$ls_codban,$ls_ctaban,
															$DatosSPI['codestpro1'],$DatosSPI['codestpro2'],
															$DatosSPI['codestpro3'],$DatosSPI['codestpro4'],
															$DatosSPI['codestpro5'],$DatosSPI['estcla']);
				
				if($resp===false){return false;}
				$this->Saldos->AjaxConect = 1;
				$resp=$this->SaldosSPI->ReprocesarSaldosCtasSPI($DatosSPI);
				if($resp===false){return false;}
				
			}//FIN FOREACH
		}
		//INSERTA EL DETALLE CONTABLE DE LA RECEPCIÓN DE DOCUMENTO POR EL DEBE	
		$this->procede='CXCFAC';
		$scg=$this->ConsultaDetContable($this->DatosFact);		
		if($scg===false){return false;}	
		$this->procede='CXCANU';
		
		foreach($scg as $DatosSCG){				
			$resp = $this->VerificaCuentaSCG($DatosSCG);			
			if($resp===false){return false;}	
			//echo $DatosSCG['sc_cuenta'].'-'.$DatosSCG["debhab"].'-'.$DatosSCG['monto'].'<br>';
			
			$DatosSCG["debhab"]=($DatosSCG["debhab"]=='D')?'H':'D';				
			$resp=$this->cmpspi->uf_guardar_movimientos_contable($this->arr_cmp,$DatosSCG['sc_cuenta'],$ls_procedencia,$ls_descripcion,
																$ls_documento,$DatosSCG["debhab"],$DatosSCG["monto"],
																$ls_codban,$ls_ctaban,$ld_fecdb);
			if($resp===false){return false;}						
		}
		
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Anulo la factura <b>".$this->numfact."</b> ".
						                "Monto: <b>".number_format($this->total,2,",",".")."</b>";
		$this->guardar_seguridad();
		
		
		return true;
	}	
	
	
	function EliminarCmpAnuFact($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: EliminarCmpAnuFact
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de eliminar los comprobantes presupuestario y Contable
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 22/02/2014							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		$metodo = 'EliminarCmpAnuFact';
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;	
		if(!$this->id_fact)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el comprobante de la factura. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		$resp = $this->extraerdatos_factura($datos);
		if($resp===false){return false;}
		
		$this->numfact=$this->DatosFact['numfact'];		
		$this->procede='CXCANU';
		$this->comprobante = $this->NroCmpFactura();
		if($this->comprobante===false){return false;}
		$this->fechacomp = $this->DatosFact['fecfact'];
		$this->ced_bene=$this->DatosFact['tipperrif'].$this->DatosFact['numpririf'].$this->DatosFact['numterrif'];
		$this->descripcion="FACTURA N° ".$this->numfact;
		$this->operacion="DEV";
		
		$this->classcmp->EsAjax = 1;
		
		$resp = $this->EliminarCmp($datos);
		if($resp===false){return false;}
		
		$this->seguridad["evento"]="DELETE";
		$this->seguridad["descripcion"]="Se eleminó la anulación de la factura <b>".$this->numfact."</b> ";
		$this->guardar_seguridad();
		
		return true;
	
	}
	
	function ConsultaConceptosCXC($opciones=array()){	
				
		$campos = ' * ';
		$opciones['criterio'] = $opciones['criterio']?$opciones['criterio']:'por_listado';
		
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  c.codemp = '".$this->ls_codemp."' AND c.codconsep='".$opciones['codconsep']."'";
					break;							  
			 	   
			  case "por_listado":
					
					$creditos =  ', ( 
					                  SELECT SUM(porcar) 
									  FROM sigesp_cargos sc 
									  INNER JOIN sep_conceptocargos cc ON ( cc.codcar = sc.codcar AND cc.codemp = sc.codemp AND cc.codconsep = c.codconsep )
									 ) AS porcentaje_iva '; 
					
					$campos = "c.*, c.codconsep AS coddetalle ".$creditos;			
					 
					
					$sql_criterio = "  WHERE  c.codconsep ".$this->postgres_ilike."LIKE('%".$opciones['codconsep']."%')
									   AND c.denconsep  ".$this->postgres_ilike."LIKE('%".$opciones['denconsep']."%') 
									   AND c.tipconcep  = '".$opciones['tipconcep']."' 
									   AND c.codconsep != 'SEP'
									   ORDER BY denconsep ";
					break;			
		}
								   
		$query_rs = "SELECT ".$campos." FROM sep_conceptos c ".$sql_criterio;
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'ConsultaConceptosCXC';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	
	function formato_numero_doc($numerofact){
		   return str_pad($numerofact,$this->digitosfact,'0',STR_PAD_LEFT);	
	}
	
	
	function FormatDatosDocPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
									
					$datos['fecdoc']=$this->io_conexiones->formatea_fecha_normal($datos['fecdoc']);					
					$datos['porcdesc_doc'] = number_format($datos['porcdesc_doc'],2,',','.');
					$datos['montodesc_doc'] = number_format($datos['montodesc_doc']/$this->TasaCambio,2,',','.');
					$datos['saldo_doc'] = number_format($datos['saldo_doc']/$this->TasaCambio,2,',','.');					
					$datos['subtot_doc'] = number_format($datos['subtot_doc']/$this->TasaCambio,2,',','.');
					$datos['iva_doc'] = number_format($datos['iva_doc']/$this->TasaCambio,2,',','.');
					$datos['otros_doc'] = number_format($datos['otros_doc']/$this->TasaCambio,2,',','.');
					$datos['total_doc'] = number_format($datos['total_doc']/$this->TasaCambio,2,',','.');
					$datos['baseimp_doc'] = number_format($datos['baseimp_doc']/$this->TasaCambio,2,',','.');					
					$datos['numdoc'] = str_pad($datos['numdoc'],$this->digitosfact,'0',STR_PAD_LEFT);
					$datos['tascam_doc'] = number_format($datos['tascam_doc'],2,',','.');
																	
					$datos['fecfact']=$this->io_conexiones->formatea_fecha_normal($datos['fecfact']);
					$datos['fecvenc']=$this->io_conexiones->formatea_fecha_normal($datos['fecvenc']);
					$datos['porcdesc'] = number_format($datos['porcdesc'],2,',','.');
					$datos['montodesc'] = number_format($datos['montodesc']/$this->TasaCambio,2,',','.');
					$datos['saldo'] = number_format($datos['saldo']/$this->TasaCambio,2,',','.');
					$datos['moncob'] = number_format($datos['moncob']/$this->TasaCambio,2,',','.');
					$datos['subtot'] = number_format($datos['subtot']/$this->TasaCambio,2,',','.');
					$datos['iva'] = number_format($datos['iva']/$this->TasaCambio,2,',','.');
					$datos['otros'] = number_format($datos['otros']/$this->TasaCambio,2,',','.');
					$datos['total'] = number_format($datos['total']/$this->TasaCambio,2,',','.');
					$datos['baseimp'] = number_format($datos['baseimp']/$this->TasaCambio,2,',','.');
					$datos['rif_completo'] = $datos['tipperrif'].'-'. $datos['numpririf'].'-'.$datos['numterrif'];
					$datos['rif'] = $datos['tipperrif'].$datos['numpririf'].$datos['numterrif'];
					$datos['numfact'] = str_pad($datos['numfact'],$this->digitosfact,'0',STR_PAD_LEFT);
					$datos['tascam'] = number_format($datos['tascam'],2,',','.');					
					$datos['saldoapl'] = number_format($datos['saldoapl']/$this->TasaCambio,2,',','.');
					$datos['total_aplicado'] = number_format($datos['total_aplicado']/$this->TasaCambio,2,',','.');
					$datos['saldo_credito'] = number_format($datos['saldo_credito']/$this->TasaCambio,2,',','.');
																					
					$datos['infocaj'] = '('.$datos['codcaj'].') - '.$datos['nomcaj'];
					$datos['infosuc'] = '('.$datos['codsuc'].') - '.$datos['nomsuc'];
										
					return $datos;	
	}
	
	function formatear_datos_doc($datos=array()){
				
				//$datos['numcont'] = str_pad($datos['numcont'],25,'0',STR_PAD_LEFT);
				//if(!$datos['id_moneda']){$datos['id_moneda']=1;}
				
				$param['codsis'] = 'CXC';
			    $param['seccion'] = 'CONFIG';
			    $param['entry'] = 'CANTIDAD_DIGITOS_NUMERODOC';
			    $this->digcoddoc = $this->select_config($param);
				
				$param['codsis'] = 'CXC';
			    $param['seccion'] = 'CONFIG';
			    $param['entry'] = 'CODIGO_DOCUMENTO_AUTONUMERICO';
			    $this->codautonumdoc = $this->select_config($param);
							
				if(!$datos['fecdoc']){$datos['fecdoc']=date('Y/m/d');}
				else{$datos['fecdoc']=$this->io_conexiones->formatea_fecha_bd($datos['fecdoc']);}
												
				if(!$datos['porcdesc_doc']){$datos['porcdesc_doc']=0;}
				if(!$datos['montodesc_doc']){$datos['montodesc_doc']=0;}
				if(!$datos['saldo_doc']){$datos['saldo_doc']=0;}
				if(!$datos['otros_doc']){$datos['otros_doc']=0;}
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}			
				
				$datos['porcdesc_doc'] = $this->formato_numerico_us($datos['porcdesc_doc']);
				$datos['montodesc_doc'] = $this->formato_numerico_us($datos['montodesc_doc'])*$this->TasaCambio;
				$datos['saldo_doc'] = $this->formato_numerico_us($datos['saldo_doc'])*$this->TasaCambio;
				$datos['subtot_doc'] = $this->formato_numerico_us($datos['subtot_doc'])*$this->TasaCambio;
				$datos['iva_doc'] = $this->formato_numerico_us($datos['iva_doc'])*$this->TasaCambio;
				$datos['otros_doc'] = $this->formato_numerico_us($datos['otros_doc'])*$this->TasaCambio;
				$datos['total_doc'] = $this->formato_numerico_us($datos['total_doc'])*$this->TasaCambio;
				$datos['baseimp_doc'] = $this->formato_numerico_us($datos['baseimp_doc'])*$this->TasaCambio;
				$datos['numdoc'] = $this->formato_numero_fact($datos['numdoc']);
				
				$datos['porcdesc'] = $this->formato_numerico_us($datos['porcdesc']);
				$datos['montodesc'] = $this->formato_numerico_us($datos['montodesc'])*$this->TasaCambio;
				$datos['saldo'] = $this->formato_numerico_us($datos['saldo'])*$this->TasaCambio;
				$datos['subtot'] = $this->formato_numerico_us($datos['subtot'])*$this->TasaCambio;
				$datos['iva'] = $this->formato_numerico_us($datos['iva'])*$this->TasaCambio;
				$datos['otros'] = $this->formato_numerico_us($datos['otros'])*$this->TasaCambio;
				$datos['total'] = $this->formato_numerico_us($datos['total'])*$this->TasaCambio;
				$datos['baseimp'] = $this->formato_numerico_us($datos['baseimp'])*$this->TasaCambio;
				$datos['numfact'] = $this->formato_numero_fact($datos['numfact']);				
				$datos['total_fact'] = $this->formato_numerico_us($datos['total_fact'])*$this->TasaCambio;
												
				if($this->codautonum or !$datos['coddoc']){$datos['coddoc'] = str_pad($datos['numdoc'],$this->digcoddoc,'0',STR_PAD_LEFT);}
				
				return $datos;
	}
	
	function generar_numero_doc($datos=array()){			
			 
			 $opciones['criterio'] = 'por_ultimo_num';					 
			 $resultado = $this->consulta_documentos($opciones);
			 if($respuesta===false){return false;}					 		 
			 if(!$resultado['cantidad']){return $this->inicio_numerodoc;}
			 $datos['numdoc'] = $resultado['fila']['numdoc'] + 1;	
			 return $datos['numdoc'];		
	}
	
	
	function ValidacionesDocCxc($datos=array()){			
			
			switch($this->codtipdoc){ 
					case 'NC';
						if($datos['total_doc']>$datos['total']){			
							$mensaje = '<b>ERROR DE DOCUMENTO:</b>'.
									   '<br> El monto tot de la Devolución/Nota de Crédito no puede ser mayor que el de la factura'.
									   '<br> <b>Total Factura: </b>'.$datos['total'].
									   '<br> <b>Total Dev/NC: </b>'.$datos['total_doc'].
									   '<br><b>METODO:</b> ValidacionesDocCxc ';
							if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
							else{$this->io_mensajes->message($mensaje,2);}																	
							return false;
						}
						
						$creditos = $datos['total_doc'] + $datos['tot_creditos'];
						$debitos = $datos['total_fact']+$datos['tot_debitos'];
						
						if($creditos > $debitos){			
							$mensaje = '<b>ERROR DE DOCUMENTO:</b>'.
									   '<br> El total de créditos no puede ser mayor que el el total de débitos'.
									   '<br> <b>Total Créditos: </b>'.$creditos.
									   '<br> <b>Total Débitos: </b>'.$debitos.
									   '<br><b>METODO:</b> ValidacionesDocCxc ';
							if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
							else{$this->io_mensajes->message($mensaje,2);}																	
							return false;
						}
						
						break;
			}
			
			return true;		
	}
	
	function ValidaNroContDocCxc($datos=array()){			
			 
			 return true;
			 
			 $param['codsis'] = 'CXC';
			 $param['seccion'] = 'CONFIG';
			 $param['entry'] = 'CANTIDAD_DIGITOS_NUMEROCONTROL';
			 $this->CantDigCont = $this->select_config($param);
			 
			 $opciones['criterio'] = 'por_ultimo_num';					 
			 $resultado = $this->consulta_documentos($opciones);
			 if($respuesta===false){return false;}					 		 
			 if(!$resultado['rs']->RecordCount()){return true;}
			 
			 $DatosAnt = $resultado['rs']->fields;
			 $this->NroContAnt = explode('-',$DatosAnt['numcont_doc']);
			 			 
			 $NroContNew = str_pad(((integer)$this->NroContAnt[1] + 1),$this->CantDigCont,"0",STR_PAD_LEFT);	
			 
			 if((integer)$NroContNew!=(integer)$this->NroCont[1]){
			 	$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El secuencial del N° de Control '.$this->NroCont[1].' no corresponde a la secuencia.
							<br> <b>Ultimo N° Factura Anterior:</b> '.$this->NroContAnt[1].' 				           			    
						    <br><b>METODO:</b> ContabilizarDoc ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			 }
			  
			 return $NroContNew;		
	}
	
	function insertar_documento($datos=array()){
					
					if(!$datos['codtipdoc'] or !$datos['id_fact'] or !$datos['codtipmov'])
					{					
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de inserción.									        			    
									<br><b>METODO:</b> insertar_documento ';
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;
					}
					
					if(!$datos['codsuc'] or !$datos['codcaj'])
					{					
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la información de la sucursal o la caja.									        			    
									<br><b>METODO:</b> insertar_documento ';
						$this->io_conexiones->mensajes_ajax($mensaje);																
						return false;
					}
					
					//SEGURIDAD DE LA SUCURSAL
					$this->codintper = $datos['codsuc'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
					
					//SEGURIDAD DE LA CAJA
					$this->codintper = $datos['codsuc'].' - '.$datos['codcaj'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Caja"); return false;}
					
					$this->codtipmov=$datos['codtipmov']?$datos['codtipmov']:'NOTCRE';
					$this->codtipdoc=$datos['codtipdoc']?$datos['codtipdoc']:'NC';
					$this->codproceso =$datos['codproceso']?$datos['codproceso']:$this->codtipmov;
					
					$datos['numdoc'] = $this->generar_numero_doc();
					if($datos['numdoc']===false){return false;}
					
					$this->FormPagDoc = $datos['formpagdoc']?$datos['formpagdoc']:'APLI';
					
					$datos = $this->formatear_datos_doc($datos);
					
					$this->estcla = $datos['estcla']?$datos['estcla']:'-';
					$this->codestpro1 = $datos['codestpro1']?$datos['codestpro1']:'-------------------------';
					$this->codestpro2 = $datos['codestpro2']?$datos['codestpro2']:'-------------------------';
					$this->codestpro3 = $datos['codestpro3']?$datos['codestpro3']:'-------------------------';
					$this->codestpro4 = $datos['codestpro4']?$datos['codestpro4']:'-------------------------';
					$this->codestpro5 = $datos['codestpro5']?$datos['codestpro5']:'-------------------------';
				    $this->coduniadm = $datos['codunieje']?$datos['codunieje']:'----------'; 
					
					$valido = $this->ValidacionesDocCxc($datos);
					if($valido===false){return false;}
					 
					$this->NroCont = explode('-',$datos['numcont_doc']);
					
					$param['codsis'] = 'CXC';
					$param['seccion'] = 'CONFIG';
					$param['entry'] = 'NUMERO_CONTROL_UNICO_FAC_NC_ND';
					$this->NroContUnico = $this->select_config($param);
					
					if($this->NroContUnico){$datoscont['tiptal']='FAC';}else{$datoscont['tiptal']='NC';}				
					$datoscont['numcont'] = $datos['numcont_doc'];
					$datoscont['codsuc'] = $datos['codsuc'];
					$resp = $this->ValidaNroControl($datoscont);
					if($resp===false){return false;}
					
					$datos['estdoccxc'] = 'P';
					
					//$valido = $this->ValidaNroContDocCxc($datos);
					//if($valido===false){return false;}
					//print_r($datos);
							
					 $query_rs = "  LOCK TABLE cxc_documento IN ACCESS EXCLUSIVE MODE;
					                SELECT reset_sequencia('cxc_documento','id_doc');
					                INSERT INTO cxc_documento(
											    codemp, codsuc, codcaj, codtipdoc, numdoc, coddoc, numcont_doc, id_fact, 
												estdoccxc,codmon_doc, tascam_doc, tipopecont, fecdoc, porcdesc_doc, montodesc_doc, 
												saldo_doc, subtot_doc, iva_doc, otros_doc, baseimp_doc, total_doc, 
												descripdoc, nummov_doc, numorddes_doc, coduniadm, codestpro1, 
												codestpro2, codestpro3, codestpro4, codestpro5, estcla,formpagdoc,fecreg, 
												usureg, horareg
										) 
										 VALUES ('".$this->ls_codemp."','".
										 			$datos['codsuc']."','".
													$datos['codcaj']."','".
										            $datos['codtipdoc']."','".
													$datos['numdoc']."','".
													$datos['coddoc']."','".
													$datos['numcont_doc']."','".
													$datos['id_fact']."','".
													$datos['estdoccxc']."','".
										            $datos['codmon']."','".
													$datos['tascam']."','".
													$datos['tipopecont']."','".
													$datos['fecdoc']."','".
													$datos['porcdesc_doc']."','".
													$datos['montodesc_doc']."','".
													$datos['saldo_doc']."','".
													$datos['subtot_doc']."','".
													$datos['iva_doc']."','".
													$datos['otros_doc']."','".
													$datos['baseimp_doc']."','".
													$datos['total_doc']."','".
												    $datos['descripdoc']."','".
													$datos['nummov_doc']."','".
													$datos['numorddes_doc']."','".
													$this->coduniadm."','".
													$this->codestpro1."','".
													$this->codestpro2."','".
													$this->codestpro3."','".
													$this->codestpro4."','".
													$this->codestpro5."','".
													$this->estcla."','".
													$this->FormPagDoc."','".													
													date("Y-m-d")."','".
													$_SESSION["la_logusr"].
													"','".date("H:i")."'); ";
					
					$metodo = 'insertar_documento';
					$opcionesx['ajax'] = '1';
					$opcionesx['imprimir'] = '1';
					$msj = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;									
					$id_insertado=$this->io_conexiones->conexion($query_rs,$opcionesx,$msj,'insert');
														
					if(!$id_insertado){					
						$mensaje = 'El registro no fué insertado.(No hay id_insert) ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;				
					}					
					
					$datos['id_doc'] = $id_insertado;
					$this->tipdoc = $this->codtipdoc;	
					$this->id_doc = $id_insertado;
					$this->codfact = $datos['coddoc'];
					$this->total = 	$datos['total_doc'];								
					$respuesta = $this->procesamiento_lotes_doc($datos);					
					if($respuesta===false){return false;}					
					$this->id_fact = $datos['id_fact'];
					$this->numdocumento = $datos['numdoc'];
					$this->numcont_doc = $datos['numcont_doc'];
					$this->coddoc = $datos['coddoc'];	
														
					$datos['id_fact'] = $this->id_fact;					
					$datos['criterio'] = 'por_cant_articulos';			
					$detalles = $this->consulta_detalles_fact($datos);
					
					if($detalles['rs']->RecordCount()){					
						$this->tipo_mov = $this->codtipmov;
						$resp = $this->actualizar_movimiento_inv($datos);
						if($resp===false){return false;}	
					}				
					
					$resp = $this->InsertarCargosDocumento($datos);
					if($resp===false){return false;}
					
					$resp = $this->GenerarMovVenta($datos);
					if($resp===false){return false;}
						
					$resp=$this->ContabilizarDoc($datos);
					if($resp===false){return false;}	
					
					$resp = $this->ActualizarEstatusFactura($datos);
					if($resp===false){return false;}
										
					$mensaje = "La operación se realizó exitosamente <b>Idº transacción:</b> ".$id_insertado;					
				    $this->io_conexiones->mensajes_ajax($mensaje);
					
					return true;	
			
	}
	
	function modificar_documento($datos=array()){
		
				 if(!$datos['codtipdoc'] or !$datos['id_fact'] or !$datos['codtipmov'] or !$datos['id_doc'])
				 {					
					
					$mensaje = 'Faltan datos para poder realizar la operación de UPDATE. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				 }
				
				 if(!$datos['codsuc'] or !$datos['codcaj'])
				 {					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la información de la sucursal o la caja.									        			    
								<br><b>METODO:</b> modificar_documento ';
					$this->io_conexiones->mensajes_ajax($mensaje);																
					return false;
				 }
				
				 $this->id_fact = $datos['id_fact'];
				 $this->id_doc = $datos['id_doc'];
				 $this->tipo_mov = 'NOTCRE';
				
				$this->codtipmov=$datos['codtipmov']?$datos['codtipmov']:'NOTCRE';
				$this->codtipdoc=$datos['codtipdoc']?$datos['codtipdoc']:'NC';
				$this->codproceso =$datos['codproceso']?$datos['codproceso']:$this->codtipmov;
				
				$datos['numdoc'] = $this->generar_numero_doc();
				if($datos['numdoc']===false){return false;}
				
				$this->FormPagDoc = $datos['formpagdoc']?$datos['formpagdoc']:'APLI';
					
				$datos = $this->formatear_datos_doc($datos);
				 
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datos['codsuc'];		
				if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datos['codsuc'].' - '.$datos['codcaj'];		
				if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Caja"); return false;}
			
				
				$query_rs = "     UPDATE cxc_documento
									  SET   numcont_doc='".$datos['numcont_doc']."',													
											fecmod='".date("Y-m-d")."', 
											usumod='".$_SESSION["la_logusr"]."', 
											horamod='".date("H:i")."'			 							 					
									  WHERE id_doc='".$datos['id_doc']."' 
										AND codtipdoc='".$datos['codtipdoc']."'; 
							";
				
				
				$this->rs_data=$this->io_sql->select($query_rs);			
			
				if($this->rs_data===false)
				{						
					$metodo = 'modificar_documento';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
				}
				
				$resp = $this->ActualizarEstatusFactura($datos);
				if($resp===false){return false;}
																							
				$mensaje = 'El documento fué modificado exitosamente.';
				$this->io_conexiones->mensajes_ajax($mensaje);
				
				return true;	
		
	}
	
	
	function eliminar_documento($datos=array()){
		
				if(!$datos['codtipdoc'] or !$datos['id_fact'] or !$datos['codtipmov'] or !$datos['id_doc'] or !$datos['codtipdoc'])
				{					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br>Faltan datos para poder realizar la operación de eliminación.									        			    
								<br><b>METODO:</b> eliminar_documento ';
					$this->io_conexiones->mensajes_ajax($mensaje);																
					return false;
				}
				
				$this->id_fact = $datos['id_fact'];
				$this->id_doc = $datos['id_doc'];
				$this->tipdoc = $datos['codtipdoc'];
				
				$resp = $this->extraerdatos_documento($datos);
				if($resp===false){return false;}
				
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datos['codsuc'];		
				if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datos['codsuc'].' - '.$datos['codcaj'];		
				if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Caja"); return false;}
				
				$param['codsis'] = 'CXC';
				$param['seccion'] = 'CONFIG';
				$param['entry'] = 'VALIDA_NUMERO_CONTROL';
				$this->ValidaNroContTalonario = $this->select_config($param);
														
				$resp = $this->ValidarDocumento($datos);
				if($resp===false){return false;}
														
				$resultado = $this->eliminar_detalles_doc($datos);
				if($resultado===false){return false;}
				
				$this->codtipmov=$datos['codtipmov'];
				$this->iddoc=$this->id_doc;					
				$this->fecmov=$datos['fecdoc'];				
				$this->fecdoc=$datos['fecdoc'];
								
				$resp = $this->EliminarMovVenta();
				if($resp===false){return false;}
				
				switch($this->tipdoc){
					case 'NC':
						$this->procede = 'CXCCRE';
						break;
						
					case 'ND':
						$this->procede = 'CXCDEB';
						break;				
				}
				
				$this->tipdoc=$datos['codtipdoc'];	
				$resp = $this->EliminarCmpDoc($datos);
				if($resp===false){return false;}
																	
				$query_rs = "   DELETE FROM cxc_dt_spg 
									  WHERE id_doc='".$datos['id_doc']."'										   
										AND tipdoc='NC'
										AND procede='".$this->procede."'; 
								DELETE FROM cxc_dt_spi 
									  WHERE id_doc='".$datos['id_doc']."'										    
										AND tipdoc='NC'
										AND procede='".$this->procede."'; 
								DELETE FROM cxc_dt_scg 
									  WHERE id_doc='".$datos['id_doc']."'										   
										AND tipdoc='NC'
										AND procede='".$this->procede."'; 
								DELETE FROM cxc_dt_cargos WHERE id_fact='".$datos['id_fact']."' 
															AND id_doc='".$datos['id_doc']."'
															AND codemp='".$this->ls_codemp."'
															AND codproceso='NOTCRE';
								DELETE FROM cxc_documento WHERE id_doc='".$datos['id_doc']."';									
								SELECT reset_sequencia('cxc_documento','id_doc'); 
							";
				
				$this->rs_data=$this->io_sql->select($query_rs);			
				
				if($this->rs_data==false)
				{						
					
					$metodo = 'eliminar_documento';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){		      
						$mensaje = 'ERROR: No se pudo eliminar el documento !. No hay filas afectadas por la operación.';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}							
				
				if($this->ValidaNroContTalonario){	
				    $param['codsis'] = 'CXC';
					$param['seccion'] = 'CONFIG';
					$param['entry'] = 'NUMERO_CONTROL_UNICO_FAC_NC_ND';
					$this->NroContUnico = $this->select_config($param);
					
					if($this->NroContUnico){$datos['tiptal']='FAC';}else{$datos['tiptal']='NC';}						
					$datos['criterio'] = "DISPONIBLE";					
					$datos['nrocont'] = $datos['numcont_doc'];						
					$resp = $this->ActualizarDtTalonario($datos);
					if($resp===false){return false;}			
				}
				
				$resp = $this->ActualizarEstatusFactura($datos);
				if($resp===false){return false;}
						
				$mensaje = 'El documento ha sido eliminado. ';
				$this->io_conexiones->mensajes_ajax($mensaje);
							
				return true;
	}
	
	function EliminarCmpDoc($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: EliminarCmpDoc
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de eliminar los comprobantes presupuestario y Contable
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 01/09/2014							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		
		if(!$this->id_fact or !$this->id_doc)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle de la contabilidad del documento. 				           			    
						<br><b>METODO:</b> EliminarCmpDoc ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		$metodo = 'EliminarCmpDoc';
		
		$this->FormPagDoc = $this->FormPagDoc?$this->FormPagDoc:'APLI';	
			
		$resp = $this->extraerdatos_documento($datos);
		if($resp===false){return false;}
		
		$this->procede='CXCCRE';
		$this->comprobante=$this->NroCmpNC();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$datos['fecdoc'];	
		$this->ced_bene=$this->DatosFact['tipperrif'].$this->DatosFact['numpririf'].$this->DatosFact['numterrif'];
		$this->descripcion="DOCUMENTO N° ".$this->numdoc." ASOCIADO A LA FACTURA ".$this->DatosFact['numfact'];		
		$this->operacion='DEV';
		$this->tipoProvBen = 'B';
		
		$this->classcmp->EsAjax = 1;
		
		$resp = $this->EliminarCmp($datos);
		if($resp===false){return false;}
		
		
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se eleminó el documento <b>".$this->numfact."</b> ";
		$this->guardar_seguridad();
		
		return true;
	
	}
	
	
	function ValidarDocumento($datos=array()){
				
				if(!$this->id_doc or 
				   !$this->numdoc or 
				   !$this->id_fact or 
				   !$this->codtipdoc or 
				   !$datos['id_doc'] or 
				   !$datos['codtipdoc'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar el documento. 				           			    
								<br><b>METODO:</b> ValidarDocumento ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}	
				
				$metodo = 'ValidarDocumento';
				$ls_sql=" SELECT numdoc::integer 
				            FROM cxc_documento 
						   WHERE id_doc='".$datos['id_doc']."' 
							 AND codtipdoc='".$datos['codtipdoc']."' 
						   ORDER BY numdoc::integer DESC LIMIT 1";					
				$rs_data=$this->io_sql->select($ls_sql);
				
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> NO se encontró el registro del documento. 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;						
				}
				
				if($rs_data->fields['numdoc'] > $this->numdoc){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se pueden eliminar documentos con número intermedios 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;						
				}
				
				/*
				$datos['criterio']='por_factura';
				$datos['id_doc']=$datos['id_fact'];
				$datos['tipdoc']='FACT';
				$rs = $this->ConsultaMovDescCobros($datos);
				if($rs===false){return false;}
				
				if($rs['rs']->RecordCount()){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se pueden eliminar la documentos que han sido aplicados a facturas en movimientos de cobro.
								<br>El documento ya se encuentra aplicado a un movimiento de cobro movimientos de cobro 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;						
				}
				*/
				return true;
								
		}
		
		function eliminar_detalles_doc($opciones=array()){				   
				
				if(!$this->id_doc or 				   
				   !$this->id_fact or 
				   !$this->codtipdoc or 
				   !$opciones['id_doc'] or 
				   !$opciones['codtipdoc'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el documento. 				           			    
								<br><b>METODO:</b> eliminar_detalles_doc ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}	
				
				$param['id_fact'] = $this->id_fact;	
				$param['id_doc'] = $this->id_doc;					
				$param['criterio'] = 'por_cant_articulos';			
				$detalles = $this->consulta_detalles_doc($param);					
				if($detalles['rs']->RecordCount()){	
					$this->tipo_mov = 'REVCRE';
					$resp=$this->actualizar_movimiento_inv($opciones);
					if($resp===false){return false;}
				}	
				
				$datos = $opciones;
				$datos['criterio'] = 'por_detalle';			
				$detalles = $this->consulta_detalles_doc($datos);
				
				if(!$detalles['cantidad']){return true;}
				
				foreach ($detalles['rs'] as $fila){
					
					$fila['operacion'] = 'ELIMDET';
					if(!$fila['id_tipodetalle']){
						$mensaje=" ERROR: El detalle ".$fila['coddetalle']." del documento no posee tipo ! ";
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
					}
					
					$query_rs = "DELETE 
								   FROM cxc_dt_documento 
								  WHERE id_doc='".$fila['id_doc']."' 
									AND codtipdoc='".$fila['codtipdoc']."' 
									AND renglon=".$fila['renglon'];				
					$this->rs_data=$this->io_sql->select($query_rs);
					if($this->rs_data==false)
					{						
						$metodo = 'eliminar_detalles_doc';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}
					
				}
						
				return true;	
		
	}
		
	function consulta_documentos($propiedades=array()){	
				
		$joinadd='';
		$datos = $propiedades;
		$columna = $datos['orden'];
		if($datos['orden']==""){$columna='nombre_cliente';}
		
		if($datos['estdoccxc']){$criterio .= " AND doc.estdoccxc = '".$datos['estdoccxc']."' ";}
		if($datos['codcliente']){$criterio .= " AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
		if($datos['nombre_cliente']){$criterio .= " AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
		if($datos['numpririf']){$criterio .= " AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
		if($datos['clasif_cliente']){$criterio .= " AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
		if($datos['sc_cuenta']){$criterio .= " AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
		if($datos['cedularesp']){$criterio .= " AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['tipperrif']){$criterio .= " AND c.tipperrif = '".$datos['tipperrif']."' ";}
		if($datos['codsuc']){$criterio .= " AND f.codsuc = '".$datos['codsuc']."' ";}
		if($datos['codcaj']){$criterio .= " AND f.codcaj = '".$datos['codcaj']."' ";}
		if($datos['id_tipo_cliente']){$criterio .= " AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
		if($datos['id_zona']){$criterio .= " AND c.id_zona = '".$datos['id_zona']."' ";}
		if($datos['id_vend']){$criterio .= " AND c.id_vend = '".$datos['id_vend']."' ";}
		if($datos['id_cliente']){$criterio .= " AND f.id_cliente = '".$datos['id_cliente']."' ";}
		if($datos['estclient']){$criterio .= " AND c.estclient = '".$datos['estclient']."' ";}			
		if($datos['nombreresp']){$criterio .= " AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
		if($datos['nombre_pais']){$criterio .= " AND despai ".$this->postgres_ilike."LIKE('%".$datos['nombre_pais']."%') ";}
		if($datos['entidad_federal']){$criterio .= " AND desest ".$this->postgres_ilike."LIKE('%".$datos['entidad_federal']."%') ";}
		if($datos['municipio']){$criterio .= " AND denmun ".$this->postgres_ilike."LIKE('%".$datos['municipio']."%') ";}
		if($datos['parroquia']){$criterio .= " AND denpar ".$this->postgres_ilike."LIKE('%".$datos['parroquia']."%') ";}
		if($datos['cedularesp']){$criterio .= " AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['fecfact_d']){if($datos['fecfact_h'] == ''){$datos['fecfact_h'] = $datos['fecfact_d'];}$criterio .= " AND f.fecfact BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_h'])."'  ";}
		if($datos['id_transp']){$criterio .= " AND f.id_transp = '".$datos['id_transp']."' ";}
		if($datos['codmon']){$criterio .= " AND f.codmon = '".$datos['codmon']."' ";}
		if($datos['id_estfact']){$criterio .= " AND f.id_estfact = '".$datos['id_estfact']."' ";}
	   	if($datos['id_condpago']){$criterio .= " AND f.id_condpago = '".$datos['id_condpago']."' ";}
		if($datos['numfact']){$criterio .= " AND f.numfact = '".$datos['numfact']."' ";}
		if($datos['codfact']){$criterio .= " AND f.codfact ".$this->postgres_ilike."LIKE('%".$datos['codfact']."%') ";}	
		if($datos['nomvend']){$criterio .= " AND nomvend ".$this->postgres_ilike."LIKE('%".$datos['nomvend']."%') ";}			
		if($datos['numcont']){$criterio .= " AND f.numcont ".$this->postgres_ilike."LIKE('%".$datos['numcont']."%') ";}
		if($datos['id_giros']){$criterio .= " AND g.id_giros = '".$datos['id_giros']."' ";}		
		if($datos['cobrado']=='0' or $datos['cobrado']=='1'){$criterio .= " AND f.cobrado = '".$datos['cobrado']."' ";}		
		if($datos['tipopecont']){$criterio .= " AND f.tipopecont = '".$datos['tipopecont']."' ";}		
		if($datos['stagiros']){$criterio .= " AND g.stagiros = '".$datos['stagiros']."' ";}
		if($propiedades['criterio']=="por_listado_anulacion"){$criterio .= " AND anulado='0' "; $propiedades['criterio']="por_listado";}
		if($propiedades['criterio']=="por_listado_reverso_anulacion"){$criterio .= " AND anulado='1' "; $propiedades['criterio']="por_listado";}
		
		if($datos['fecinigiros_d']){
				if($datos['fecinigiros_h'] == ''){$datos['fecinigiros_h'] = $datos['fecinigiros_d'];}
				$criterio .= " AND g.fecinigiros BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecinigiros_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecinigiros_h'])."'  ";

		}		
		if($datos['numdoc']){$criterio .= " AND doc.numdoc = '".$datos['numdoc']."' ";}		
		if($datos['numcont_doc']){$criterio .= " AND doc.numcont_doc ".$this->postgres_ilike."LIKE('%".$datos['numcont_doc']."%') ";}		
		if($datos['total']){
						
					if(!$datos['criterio_monto']){$datos['criterio_monto']='igual';}
					switch($datos['criterio_monto']){
							case 'igual':
							       $criterio .= " AND f.total = '".$datos['total']."' ";
								   break;							
							case 'mayor':
							       $criterio .= " AND f.total > '".$datos['total']."' ";
								   break;
							case 'menor':
							       $criterio .= " AND f.total < '".$datos['total']."' ";
								   break;					
					}
					
		}
		
		if($datos['total_doc']){
						
					if(!$datos['criterio_monto']){$datos['criterio_monto']='igual';}
					switch($datos['criterio_monto']){
							case 'igual':
							       $criterio .= " AND doc.total_doc = '".$datos['total_doc']."' ";
								   break;							
							case 'mayor':
							       $criterio .= " AND doc.total_doc > '".$datos['total_doc']."' ";
								   break;
							case 'menor':
							       $criterio .= " AND doc.total_doc < '".$datos['total_doc']."' ";
								   break;					
					}
					
		}
			 	 
		$campos = ' * ';
		if(!$propiedades['id_doc']){$propiedades['id_doc']=0;}
		
		$this->codproceso = $this->codproceso?$this->codproceso:'FACTURA';
		$this->codtipdoc = $this->codtipdoc?$this->codtipdoc:'NC';
		
			
		switch($propiedades['criterio']){
				  
			  case "por_id":
			        $campos = " doc.*,f.*, c.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, 
					            descestfact, desest,denmun,denpar,cp.operacion as opespi,cp.diascred as diascredito,
								suc.nomsuc,suc.sucmatriz,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj,suc.sigsuc,c.sc_cuenta as scg_cliente,
								(
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'NC'
									   AND anulado_doc = '0'	       
								) AS total_cre,
								(
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'ND'
									   AND anulado_doc = '0'	       
								) AS total_deb,
								(
									  f.total 
									  -
									  ( SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0'
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS total_act,
								(
									  f.subtot 
									  -
									  ( SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS subtot_act,
								(
									  f.iva 
									  -
									  ( SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS iva_act, 
								(
									doc.total_doc
									-
									( SELECT COALESCE(sum(monmovdoc),0) 
									  FROM cxc_dt_movdoc dmd 
									  WHERE dmd.codtipdoc=doc.codtipdoc 
									  AND dmd.id_doc=doc.id_doc
									  AND tipdocapl='FACT'
									  AND estmovdoc!='ANU'
									 )
							
								) AS saldo_credito,
								( SELECT COALESCE(sum(monmovdoc),0) 
									  FROM cxc_dt_movdoc dmd 
									  WHERE dmd.codtipdoc=doc.codtipdoc 
									  AND dmd.id_doc=doc.id_doc
									  AND tipdocapl='FACT'
									  AND estmovdoc!='ANU'
							
								) AS total_aplicado ";
								
					$sql_criterio = " INNER JOIN cxc_factura f ON doc.id_fact = f.id_fact
					                  LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
									  LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
									                         AND caj.codsuc = f.codsuc
									                         AND caj.codcaj = f.codcaj
					                  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente									  
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE doc.codemp = '".$this->ls_codemp."' 
									     AND doc.codtipdoc='".$this->codtipdoc."' 
									    AND doc.id_doc='".$propiedades['id_doc']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.numdoc ".$this->postgres_ilike."LIKE('%".$propiedades['numdoc']."%') AND doc.codtipdoc='".$this->codtipdoc."'  ";   
					break;
			  case "por_control":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND doc.numcont_doc='".$propiedades['numcont_doc']."'  AND doc.codtipdoc='".$this->codtipdoc."' ";   
					break;
			    case "por_id_solo":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND doc.id_doc='".$propiedades['id_doc']."' AND f.codproceso='".$this->codproceso."' ";   
					break;
			   case "por_condpago":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_condpago='".$propiedades['id_condpago']."' AND f.codproceso='".$this->codproceso."'  ";   
					break;
			   case "por_transp":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_transp='".$propiedades['id_transp']."' AND f.codproceso='".$this->codproceso."'  ";   
					break;
			  case "por_vend":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_vend='".$propiedades['id_vend']."' AND f.codproceso='".$this->codproceso."'  ";   
					break;
			  case "por_ultimo_num":
					$sql_criterio = " WHERE doc.codemp = '".$this->ls_codemp."'  AND doc.codtipdoc='".$this->codtipdoc."'  ORDER BY doc.numdoc DESC LIMIT 1 ";   
					break;		
			  case "validar_numero":
					$sql_criterio = " WHERE doc.codemp = '".$this->ls_codemp."' 
									  AND  doc.id_doc!='".$dato['id_doc']."' 
									  AND (doc.numdoc='".$propiedades['numdoc']."' OR doc.numcont_doc='".$propiedades['numcont_doc']."')  AND doc.codtipdoc='".$this->codtipdoc."' "; 
					break;
			case "validar_update":
					$sql_criterio = " WHERE doc.codemp = '".$this->ls_codemp."' 
									  AND doc.codtipdoc='".$this->codtipdoc."'
									  AND doc.numdoc='".$propiedades['numdoc']."' 
									  AND doc.coddoc='".$propiedades['coddoc']."' 
									  AND doc.id_doc!='".$propiedades['id_doc']."'";   
					break;				   
			 			 
			  case "por_listado":		
					$campos = " doc.*,f.*, c.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, 
					            descestfact, desest,denmun,denpar,cp.operacion as opespi,cp.diascred as diascredito,
								suc.nomsuc,suc.sucmatriz,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj,suc.sigsuc,c.sc_cuenta as scg_cliente,
								(
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'NC'
									   AND anulado_doc = '0'	       
								) AS total_cre,
								(
									SELECT COALESCE(SUM(doc.total_doc),0) 
									  FROM cxc_documento doc 
									 WHERE doc.id_fact = f.id_fact
									   AND codtipdoc = 'ND'
									   AND anulado_doc = '0'	       
								) AS total_deb,
								(
									  f.total 
									  -
									  ( SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0'
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.total_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS total_act,
								(
									  f.subtot 
									  -
									  ( SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.subtot_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS subtot_act,
								(
									  f.iva 
									  -
									  ( SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'NC'
										   AND anulado_doc = '0' 
									   )
									   + 
									   (
										SELECT COALESCE(SUM(doc.iva_doc),0) 
										  FROM cxc_documento doc 
										 WHERE doc.id_fact = f.id_fact
										   AND codtipdoc = 'ND'
										   AND anulado_doc = '0'	       
									   ) 
								) AS iva_act, 
								(
									doc.total_doc
									-
									( SELECT COALESCE(sum(monmovdoc),0) 
									  FROM cxc_dt_movdoc dmd 
									  WHERE dmd.codtipdoc=doc.codtipdoc 
									  AND dmd.id_doc=doc.id_doc
									  AND tipdocapl='FACT'
									  AND estmovdoc!='ANU'
									 )
							
								) AS saldo_credito,
								( SELECT COALESCE(sum(monmovdoc),0) 
									  FROM cxc_dt_movdoc dmd 
									  WHERE dmd.codtipdoc=doc.codtipdoc 
									  AND dmd.id_doc=doc.id_doc
									  AND tipdocapl='FACT'
									  AND estmovdoc!='ANU'
							
								) AS total_aplicado
							  ";
							  
					if($datos['id_fact']){
						$SqlSaldoApl = " , (
												SELECT COALESCE(sum(monmovdoc),0) 
												FROM cxc_dt_movdoc dmd 
												WHERE dmd.codtipdoc=doc.codtipdoc 
												AND dmd.id_doc=doc.id_doc
												AND tipdocapl='FACT'
												AND id_docapl='".$datos['id_fact']."'
												AND estmovdoc!='ANU'
										
											) AS saldoapl";
											
						$campos .= $SqlSaldoApl;
					}
					else{
						$SqlSaldoApl = " ,0 AS saldoapl";
											
						$campos .= $SqlSaldoApl;
					
					}
										 
					$sql_criterio =   $joinadd."
									  INNER JOIN cxc_factura f ON doc.id_fact = f.id_fact
					                  LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
									  LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
									                         AND caj.codsuc = f.codsuc
									                         AND caj.codcaj = f.codcaj
									  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE  doc.codemp = '".$this->ls_codemp."' 
									    AND doc.codtipdoc='".$this->codtipdoc."'									    
									    AND doc.descripdoc ".$this->postgres_ilike."LIKE('%".$propiedades['descripdoc']."%')
									  ".$criterio."							  								 
									  ORDER BY doc.numdoc ";
					break;
						
		}		
							   
		$query_rs = "SELECT  ".$campos."  FROM cxc_documento doc ".$sql_criterio;
		//echo $query_rs.'<br><br><br>';
		$clase = get_class($this);
		$metodo = 'consulta_documentos';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);		
		return $respuesta;
	}	
	
		
		function procesamiento_lotes_doc($opciones=array()){
				
					//SE INSERTAN EL DETALLE
					if($opciones['detalle_doc']){										
						$respuesta = $this->procesar_detalles_doc($opciones);
						if($respuesta===false){return false;}													
					}
					else{
							$resp = $this->eliminar_detalles_doc($opciones);
							if($resp===false){return false;}
					
					}
												
					return true;
		
		}
		
		function procesar_detalles_doc($datos=array()){
				
				//$resp = $this->eliminar_detalles($datos);
				//if($resp===false){return false;}				
				
				//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
				$datos['detalle_factura'] = stripslashes($datos['detalle_doc']);
				$obj_json = $this->json->decode($datos['detalle_doc']);		
				
				//SE CREA UN ONJETO JSON POR CADA FILA. LOS CAMPOS SE ACCESAN CON EL FORMATO: $obj_json[numero_fila]->nombre_campo
				//SE RECORREN LAS FILAS DEL OBJETO JSON: $obj_json[0], $obj_json[1], $obj_json[2], etc.		
				try{
						foreach($obj_json as $detalle){
								
								/*
								 [codtipdoc] => NC 
								 [id_tipodetalle] => SERVI 
								 [renglon] => 1 
								 [id_fact] => 10 
								 [coddetalle] => 0000105292 
								 [dendetalle] => SERVICIO INTERLINEAL 
								 [comentario] => 
								 [denunimed] => UNIDAD 
								 [codunimed] => 0001 
								 [codalm] => 0000000000 
								 [cantidad_detdoc] => 1,00 
								 [precio_detdoc] => 120.000,00 
								 [porcdesc_detdoc] => 0,00 
								 [desc_detdoc] => 0,00 
								 [porciva_detdoc] => 12,00 
								 [subtot_detdoc] => 120.000,00 
								 [iva_detdoc] => 14.400,00 
								 [neto_detdoc] => 134.400,00 
								 [otros_detdoc] => 0,00 
								 [codestpro1] => ------------------------- 
								 [codestpro2] => ------------------------- 
								 [codestpro3] => ------------------------- 
								 [codestpro4] => ------------------------- 
								 [codestpro5] => ------------------------- 
								 [estcla] => - 
								 [codfuefin] => -- 
								 [comentdev] => 
								 [col_eliminardetalle] =>
								*/
								$datosdet['id_fact'] =  $datos['id_fact'];
								$datosdet['id_doc'] =  $datos['id_doc'];
								$datosdet['codtipdoc'] =  $datos['codtipdoc'];
								$datosdet['id_tipodetalle'] =  $detalle->id_tipodetalle;											
								$datosdet['renglon'] =  $detalle->renglon;
								$datosdet['coddetalle'] =  $detalle->coddetalle;
								$datosdet['codunimed'] =  $detalle->codunimed;
								$datosdet['codalm'] =  $detalle->codalm;
								$datosdet['cantidad_detdoc'] =  $detalle->cantidad_detdoc;
								$datosdet['precio_detdoc'] =  $detalle->precio_detdoc;
								$datosdet['porcdesc_detdoc'] =  $detalle->porcdesc_detdoc;
								$datosdet['desc_detdoc'] =  $detalle->precio_detdoc*($detalle->porcdesc_detdoc/100);
								$datosdet['porciva_detdoc'] =  $detalle->porciva_detdoc;
								$datosdet['iva_detdoc'] =  $detalle->iva_detdoc;
								$datosdet['neto_detdoc'] =  $detalle->neto_detdoc;
								$datosdet['otros_detdoc'] =  $detalle->otros_detdoc;
								$datosdet['comentario'] =  $detalle->comentario;
								$datosdet['comentdoc'] =  $detalle->comentario;								
								$datosdet['comentdev'] =  $detalle->comentdev;							
								$datosdet['codestpro1'] =  $detalle->codestpro1;
								$datosdet['codestpro2'] =  $detalle->codestpro2;
								$datosdet['codestpro3'] =  $detalle->codestpro3;
								$datosdet['codestpro4'] =  $detalle->codestpro4;
								$datosdet['codestpro5'] =  $detalle->codestpro5;
								$datosdet['estcla'] =  $detalle->estcla;
								$datosdet['codfuefin'] =  $detalle->codfuefin;
																
								if($datosdet['id_tipodetalle']=='NC'){$datosdet['id_tipodetalle']='CONNC';}
				                if($datosdet['id_tipodetalle']=='ND'){$datosdet['id_tipodetalle']='CONND';}
								
								$datosdet = $this->formatear_datos_detalle_doc($datosdet);
								
								$condicion1 = ($datosdet['cantidad_detdoc']>0)?1:0;							
								$condicion2 = ($datosdet['id_tipodetalle']=='CONNC')?1:0;
								$condicion3 = ($datosdet['id_tipodetalle']=='CONND')?1:0;
								/*
								echo '<br><br>';
								print_r($datosdet);
								echo '<br><br>';
								*/
								
								if($condicion1 or $condicion2 or $condicion3){
									$resul = $this->insertar_detalle_doc($datosdet);
									if($resul===false){return false;}
								}
								
						}
				}
				catch(ErrorException $e){return false;}
				
				return true;
		
		}
		
		
		function formatear_datos_detalle_doc($datos=array()){
				
				if(!$datos['codproceso']){$datos['codproceso']='FACTURA';}
				if(!$datos['id_tipodetalle']){$datos['id_tipodetalle']='ARTIC';}
				if(!$datos['otros_detdoc']){$datos['otros_detdoc']=0;}
				if(!$datos['codalm']){$datos['codalm']='000000';}				
				
				$datos['cantidad_detdoc'] = $this->formato_numerico_us($datos['cantidad_detdoc']);
				$datos['precio_detdoc'] = $this->formato_numerico_us($datos['precio_detdoc'])*$this->TasaCambio;
				$datos['porcdesc_detdoc'] = $this->formato_numerico_us($datos['porcdesc_detdoc']);
				$datos['desc_detdoc'] = $this->formato_numerico_us($datos['desc_detdoc']);				
				$datos['porciva_detdoc'] = $this->formato_numerico_us($datos['porciva_detdoc']);
				$datos['iva_detdoc'] = $this->formato_numerico_us($datos['iva_detdoc'])*$this->TasaCambio;
				$datos['neto_detdoc'] = $this->formato_numerico_us($datos['neto_detdoc'])*$this->TasaCambio;
				$datos['otros_detdoc'] = $this->formato_numerico_us($datos['otros_detdoc'])*$this->TasaCambio;
								
				/*
				echo '<br><br>';
				print_r($datos);
				echo '<br><br>';				
				*/
				return $datos;
		}
		
		function insertar_detalle_doc($datos=array()){
					
					if(!$datos['id_fact'] or !$datos['renglon'] or !$datos['coddetalle']  or !$datos['codtipdoc'])
					{					
						//echo $datos['codcliente'].','.$datos['tipperrif'];
						$mensaje = 'Faltan datos para poder realizar la operación de inserción de detalle. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
													
					 $query_rs = "INSERT INTO cxc_dt_documento( id_doc,
					                                            codemp, 
																codtipdoc, 
																id_tipodetalle, 
																renglon, 
																id_fact, 
																coddetalle, 
																codunimed, 
																codalm, 
																cantidad_detdoc, 
																precio_detdoc, 
																porcdesc_detdoc, 
																desc_detdoc, 
																porciva_detdoc, 
																iva_detdoc, 
																neto_detdoc, 
																otros_detdoc, 
																coduniadm, 
																codestpro1,
																codestpro2, 
																codestpro3, 
																codestpro4, 
																codestpro5, 
																estcla, 
																codfuefin, 
																comentdoc, 
																comentdev)
										 VALUES ('".$this->id_doc."','".
										            $this->ls_codemp."','".
										            $datos['codtipdoc']."','".
													$datos['id_tipodetalle']."','".
													$datos['renglon']."','".
													$datos['id_fact']."','".
													$datos['coddetalle']."','".								
													$datos['codunimed']."','".
													$datos['codalm']."','".
													$datos['cantidad_detdoc']."','".								
													$datos['precio_detdoc']."','".
													$datos['porcdesc_detdoc']."','".
													$datos['desc_detdoc']."','".
													$datos['porciva_detdoc']."','".
													$datos['iva_detdoc']."','".
													$datos['neto_detdoc']."','".
													$datos['otros_detdoc']."','".	
													$this->codunieje."','".													
													$this->codestpro1."','".
													$this->codestpro2."','".
													$this->codestpro3."','".
													$this->codestpro4."','".
													$this->codestpro5."','".
													$this->estcla."','".
													$this->codfuefin."','".
													$datos['comentdoc']."','".
													$datos['comentdev']."') ";
									
					
					//echo $query_rs.'<br><br>';
					$this->rs_data=$this->io_sql->select($query_rs);			
				
					if($this->rs_data==false)
					{						
						$metodo = 'insertar_detalle_doc';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}	
					return true;	
			
		}
		
	function ConsultaTipoArticulo($opciones=array()){	
		
		
		$campos = ' * ';
		$opciones['criterio'] = $opciones['criterio']?$opciones['criterio']:'por_listado';
		$metodo = 'ConsultaTipoArticulo';
		
		switch($opciones['criterio']){
				  
			  case "por_codigo":
					$sql_criterio = " WHERE ta.codtipart='".$opciones['codtipart']."'";
					break;							  
			 	   
			  case "por_listado":
										
					$campos = " ta.* ";			
					 
					
					$sql_criterio = "  WHERE ta.dentipart ".$this->postgres_ilike."LIKE('%".$opciones['dentipart']."%')
									   AND ta.codtipart  ".$this->postgres_ilike."LIKE('%".$opciones['codtipart']."%')
									   ORDER BY dentipart ";
					break;			
		}
					   
		$query_rs = "SELECT ".$campos." FROM siv_tipoarticulo ta ".$sql_criterio;
		
		$rs_data=$this->io_sql->select($query_rs);
		if($rs_data==false){				
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			else{$this->io_mensajes->message($mensaje);}
			return false;
		}
		
		return $rs_data;
	}	
		
	function ComboTipoArtic($opciones=array()){

			if(!$opciones['nombre_combo']){$nombre_combo = 'sel_tipoartic';}else{$nombre_combo = $opciones['nombre_combo'];}
			if(!$opciones['codtipart']){$carga = ' Seleccione '; $id_carga = '';}
			else{				
				$carga = $opciones['dentipart'];				  
				$id_carga = $opciones['codtipart'];
			}			
			
			$opciones['criterio'] = 'por_listado';					
			$resp = $this->ConsultaTipoArticulo($opciones);
			if($resp===false){return false;}
			
			if($opciones['disable']===true){$disable='disabled';}
			
			$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'" '.$disable.'>
					  <option value="'.$id_carga.'">- '.$carga.' -</option>';
			
			foreach($resp as $dato) { 				
				$combo .= '<option value="'.$dato["codtipart"].'">('.$dato["codtipart"].') '.$dato["dentipart"].'</option>';								
			}
			$combo .= '</select>';
																						
			return $combo;
	}
	
	function consulta_detalles_doc($opciones=array()){	
	
		$campos = ' * ';
		if(!$opciones['id_fact']){$opciones['id_fact']=0;}
		if(!$opciones['id_doc']){$opciones['id_doc']=0;}
		if(!$opciones['criterio']){$opciones['criterio'] = "por_detalle";}
		
		switch($opciones['criterio']){
			
			case "por_cant_articulos":
					$campos = ' id_tipodetalle,coddetalle ';
					$sql_criterio = " WHERE d.id_doc='".$opciones['id_doc']."' AND  id_tipodetalle='ARTIC' ";   
					break;
				  
			 case "renglon":
					$sql_criterio = " WHERE  d.codemp = '".$this->ls_codemp."' 
					                  AND d.id_doc='".$opciones['id_doc']."' AND  renglon='".$opciones['renglon']."' ";   
					break;				   
			  case "por_detalle":
					$campos = "    CASE WHEN d.id_tipodetalle = 'SERVI' THEN s.denser 
										WHEN d.id_tipodetalle = 'ARTIC' THEN a.denart
										WHEN d.id_tipodetalle = 'CONNC' THEN sepc.denconsep
										WHEN d.id_tipodetalle = 'CONCE' THEN c.denconfac
										ELSE ''
								   END AS dendetalle,
								   d.*
								  , nomfisalm, denunimed, doc.numdoc, doc.fecdoc, a.spi_cuenta, s.spg_cuenta ";
					
					$sql_criterio = "    LEFT JOIN cxc_documento doc ON doc.id_doc = d.id_doc																
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND a.codemp = d.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN sep_conceptos sepc ON sepc.codconsep=d.coddetalle 
										                             AND d.id_tipodetalle = 'CONNC' 
										 LEFT JOIN cxc_conceptofac c ON c.codconfac=d.coddetalle 
										                            AND d.id_tipodetalle = 'CONCE'
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
										 LEFT JOIN siv_unidadmedida u ON u.codunimed = d.codunimed 
										 LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp 
										 LEFT JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = d.codemp AND aa.codalm = d.codalm
										 LEFT JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp 
										WHERE d.id_doc='".$opciones['id_doc']."'
										ORDER BY renglon; ";
					break;
			
			case "por_detalle_contable":
					$campos = "	 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
								      WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta 
									  WHEN id_tipodetalle='CONNC' THEN spic.sc_cuenta
									  WHEN id_tipodetalle='CONCE' THEN scgc.scg_cuenta       
							     ELSE ''
								 END AS sc_cuenta,								
								 sum(precio_detdoc*cantidad_detdoc) AS monto								 
								  ";
					
					$sql_criterio = "    INNER JOIN cxc_documento doc ON doc.id_doc = d.id_doc																    
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND a.codemp = d.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = a.spi_cuenta										                          
										 LEFT JOIN spi_cuentas_estructuras cea ON spia.codemp = cea.codemp
										                                       AND spia.spi_cuenta = cea.spi_cuenta
																			   AND d.estcla = cea.estcla																   
																			   AND d.codestpro1 = cea.codestpro1
																			   AND d.codestpro2 = cea.codestpro2
																			   AND d.codestpro3 = cea.codestpro3
																			   AND d.codestpro4 = cea.codestpro4
																			   AND d.codestpro5 = cea.codestpro5
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = s.spg_cuenta										                         
										 LEFT JOIN spi_cuentas_estructuras ces ON spis.codemp = ces.codemp
										                                      AND spis.spi_cuenta = ces.spi_cuenta 
																			  AND d.estcla = ces.estcla																  
																			  AND d.codestpro1 = ces.codestpro1
																			  AND d.codestpro2 = ces.codestpro2
																			  AND d.codestpro3 = ces.codestpro3
																			  AND d.codestpro4 = ces.codestpro4
																			  AND d.codestpro5 = ces.codestpro5
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
										 LEFT JOIN sep_conceptos sepc ON sepc.codconsep=d.coddetalle 
										                          AND d.id_tipodetalle = 'CONNC'
										 LEFT JOIN spi_cuentas spic ON spic.spi_cuenta = sepc.spg_cuenta										                         
										 LEFT JOIN spi_cuentas_estructuras cec ON spic.codemp = ces.codemp
										                                      AND spic.spi_cuenta = cec.spi_cuenta 
																			  AND d.estcla = cec.estcla																  
																			  AND d.codestpro1 = cec.codestpro1
																			  AND d.codestpro2 = cec.codestpro2
																			  AND d.codestpro3 = cec.codestpro3
																			  AND d.codestpro4 = cec.codestpro4
																			  AND d.codestpro5 = cec.codestpro5
										 LEFT JOIN cxc_conceptofac scgc ON scgc.codconfac=d.coddetalle 
										                               AND d.id_tipodetalle = 'CONCE'													
										 WHERE d.id_doc='".$opciones['id_doc']."'
										 GROUP BY 1
										 ORDER BY 1; ";
					break;
					
			case "por_detalle_spi":
					$campos = "	 CASE WHEN id_tipodetalle='ARTIC' THEN a.spi_cuenta
								      WHEN id_tipodetalle='SERVI' THEN s.spg_cuenta  
									  WHEN id_tipodetalle='CONNC' THEN sepc.spg_cuenta    
							     ELSE ''
								 END AS spi_cuenta,
								 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
								      WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta  
									  WHEN id_tipodetalle='CONNC' THEN spic.sc_cuenta     
							     ELSE ''
								 END AS sc_cuenta,
								 d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
								 sum(precio_detdoc*cantidad_detdoc) AS monto								 
								  ";
					
					$sql_criterio = "    INNER JOIN cxc_documento doc ON doc.id_doc = d.id_doc																
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND a.codemp = d.codemp 
																 AND d.id_tipodetalle = 'ARTIC' 
										 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = a.spi_cuenta										                          
										 LEFT JOIN spi_cuentas_estructuras cea ON spia.codemp = cea.codemp
										                                       AND spia.spi_cuenta = cea.spi_cuenta
																			   AND d.estcla = cea.estcla																   
																			   AND d.codestpro1 = cea.codestpro1
																			   AND d.codestpro2 = cea.codestpro2
																			   AND d.codestpro3 = cea.codestpro3
																			   AND d.codestpro4 = cea.codestpro4
																			   AND d.codestpro5 = cea.codestpro5
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'
										 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = s.spg_cuenta										                         
										 LEFT JOIN spi_cuentas_estructuras ces ON spis.codemp = ces.codemp
										                                      AND spis.spi_cuenta = ces.spi_cuenta 
																			  AND d.estcla = ces.estcla																  
																			  AND d.codestpro1 = ces.codestpro1
																			  AND d.codestpro2 = ces.codestpro2
																			  AND d.codestpro3 = ces.codestpro3
																			  AND d.codestpro4 = ces.codestpro4
																			  AND d.codestpro5 = ces.codestpro5
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 		
										 LEFT JOIN sep_conceptos sepc ON sepc.codconsep=d.coddetalle 
										                          AND d.id_tipodetalle = 'CONNC'
										 LEFT JOIN spi_cuentas spic ON spic.spi_cuenta = sepc.spg_cuenta										                         
										 LEFT JOIN spi_cuentas_estructuras cec ON spic.codemp = ces.codemp
										                                      AND spic.spi_cuenta = cec.spi_cuenta 
																			  AND d.estcla = cec.estcla																  
																			  AND d.codestpro1 = cec.codestpro1
																			  AND d.codestpro2 = cec.codestpro2
																			  AND d.codestpro3 = cec.codestpro3
																			  AND d.codestpro4 = cec.codestpro4
																			  AND d.codestpro5 = cec.codestpro5										 
										 								
										 WHERE d.id_doc='".$opciones['id_doc']."'
										 GROUP BY 1,2,3,4,5,6,7,8
										 ORDER BY 1; ";
					break;
			
			case "por_detalle_contable_iva":
					$campos = "	 CASE WHEN id_tipodetalle='ARTIC' THEN ac.spg_cuenta
								      WHEN id_tipodetalle='SERVI' THEN sc.spg_cuenta  
									  WHEN id_tipodetalle='CONNC' THEN spic.spg_cuenta       
							     ELSE ''
								 END AS spg_cuenta,
								 CASE WHEN id_tipodetalle='ARTIC' THEN spga.sc_cuenta
								      WHEN id_tipodetalle='SERVI' THEN spgs.sc_cuenta 
									  WHEN id_tipodetalle='CONNC' THEN spic.sc_cuenta    
							     ELSE ''
								 END AS sc_cuenta,
								 d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
								 sum(iva_detdoc) AS monto								 
								  ";
					
					$sql_criterio = "    INNER JOIN cxc_documento doc ON doc.id_doc = d.id_doc		
										 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
										                         AND a.codemp = d.codemp 
																 AND d.id_tipodetalle = 'ARTIC'	
										 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
										 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
										 LEFT JOIN spg_cuentas spga ON spga.spg_cuenta = ac.spg_cuenta
										                           AND spga.estcla = d.estcla																   
																   AND spga.codestpro1 = d.codestpro1
																   AND spga.codestpro2 = d.codestpro2
																   AND spga.codestpro3 = d.codestpro3
																   AND spga.codestpro4 = d.codestpro4
																   AND spga.codestpro5 = d.codestpro5
										 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
										                          AND d.id_tipodetalle = 'SERVI'										
			  							 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
										 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
										 LEFT JOIN spg_cuentas spgs ON spgs.spg_cuenta = sc.spg_cuenta
										                           AND spgs.estcla = d.estcla																   
																   AND spgs.codestpro1 = d.codestpro1
																   AND spgs.codestpro2 = d.codestpro2
																   AND spgs.codestpro3 = d.codestpro3
																   AND spgs.codestpro4 = d.codestpro4
																   AND spgs.codestpro5 = d.codestpro5							
										 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser
										 LEFT JOIN sep_conceptos sepc ON sepc.codconsep=d.coddetalle 
										                          AND d.id_tipodetalle = 'CONNC'
										 LEFT JOIN spi_cuentas spic ON spic.spi_cuenta = sepc.spg_cuenta										                         
										 LEFT JOIN spi_cuentas_estructuras cec ON spic.codemp = ces.codemp
										                                      AND spic.spi_cuenta = cec.spi_cuenta 
																			  AND d.estcla = cec.estcla																  
																			  AND d.codestpro1 = cec.codestpro1
																			  AND d.codestpro2 = cec.codestpro2
																			  AND d.codestpro3 = cec.codestpro3
																			  AND d.codestpro4 = cec.codestpro4
																			  AND d.codestpro5 = cec.codestpro5		 										
										 WHERE d.id_doc='".$opciones['id_doc']."'										
										 GROUP BY 1,2,3,4,5,6,7,8
										 ORDER BY 1; ";
					break;
			
			case "por_detalle_inv":
					$campos = "    sum(cantidad_detdoc) AS cantidad_detdoc,
								   d.id_doc, d.id_tipodetalle, coddetalle, d.codunimed, 
								   d.codalm,    
								   d.precio_detdoc, 
								   doc.numdoc, doc.fecdoc";
					
					$sql_criterio = "    INNER JOIN cxc_documento doc ON doc.id_doc = d.id_doc	
										 WHERE d.id_doc='".$opciones['id_doc']."'
										 AND d.codalm='".$opciones['codalm']."'										 
										 AND id_tipodetalle='ARTIC' 
										 GROUP BY d.id_doc,d.coddetalle, d.id_tipodetalle, 
										          d.codunimed,d.codalm,doc.numdoc, 
												  doc.fecdoc,d.precio_detdoc
										 ORDER BY d.coddetalle; ";
					break;	
						
			case "por_almacen":
					$campos = "  DISTINCT codalm ";
					
					$sql_criterio = "  	 WHERE d.id_doc='".$opciones['id_doc']."'										 
										 AND id_tipodetalle='ARTIC' 
										 ORDER BY 1; ";
					break;						
		}
		
						   
		$query_rs = "SELECT ".$campos." FROM cxc_dt_documento d ".$sql_criterio;
		//echo $query_rs.'<br><br>';
		$clase = get_class($this);
		$metodo = 'consulta_detalles_doc';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;	
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
		
		return $respuesta;
	}		
	
	function ContabilizarDoc($datos=array()){	
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		
		if(!$this->id_fact)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle de la contabilidad del documento. 				           			    
						<br><b>METODO:</b> ContabilizarDoc ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
		$metodo = 'ContabilizarDoc';
		
		$this->FormPagDoc = $this->FormPagDoc?$this->FormPagDoc:'APLI';	
			
		$resp = $this->extraerdatos_documento($datos);
		if($resp===false){return false;}
		
		$this->procede='CXCCRE';
		$this->comprobante=$this->NroCmpNC();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$datos['fecdoc'];	
		$this->ced_bene=$this->DatosFact['tipperrif'].$this->DatosFact['numpririf'].$this->DatosFact['numterrif'];
		$this->descripcion="DOCUMENTO N°° ".$this->numdoc." ASOCIADO A LA FACTURA ".$this->DatosFact['numfact'];		
		$this->operacion='DEV';
		$this->tipoProvBen = 'B';
				
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'TIPO_CONTABILIZA_CXC';
		$this->TipoAfectacion = $this->select_config($param);
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CUENTA_CONTABLE_IVA';
		$this->CuentaIva = $this->select_config($param);
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';		
		$param['entry'] = ($this->FormPagDoc=='APLI')?'CUENTA_CONTABLE_NOTCRE_APLI':'CUENTA_CONTABLE_NOTCRE_EFEC';
		$this->CuentaCierre = $this->select_config($param);
		$datos['id_doc'] = $this->id_doc;		
		
		$anofact = substr($this->DatosFact['fecfact'],0,4);
		$anodoc = substr($datos['fecdoc'],0,4);
		
		$this->DevAnoAnt = false;
		if($anofact<$anodoc){
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';
			$param['entry'] = 'CUENTA_CONTABLE_NOTCRE_ANOANT';
			$this->CtaAnoAnt = $this->select_config($param);
			$this->DevAnoAnt = true;
		}
				
		/**************************************************************************************************************************************/
		/****************************************** PRESUPUESTO DE INGRESO ********************************************************************/
		/**************************************************************************************************************************************/
		if($this->TipoAfectacion=='C'){			
			$datos['criterio'] = 'por_detalle_spi';			
			$rsdet = $this->consulta_detalles_doc($datos);
		}
		else{$rsdet = $this->ConsultaSpiDocIvaPresup($datos);}		
		if($rsdet===false){return false;}
		
		if($rsdet['rs']->RecordCount() and !$this->DevAnoAnt){
			foreach($rsdet['rs'] as $spi){			       
					//echo '<br>SPI: '.$spi['spi_cuenta'].'-'.$spi['sc_cuenta'].'='.$spi['monto'].'<br>';
					$spi['monto']=-$spi['monto'];										
					$ctavalid = $this->ValidarDigIngreso($spi);
					if($ctavalid===false){return false;}			
					$resp = $this->InsertDetSpi($spi);
					if($resp===false){return false;}				
			}
		}
		
		/**************************************************************************************************************************************/
		/****************************************** CONTABILIDAD  ********************************************************************/
		/**************************************************************************************************************************************/
		
		//SI EL AÑO DE LA FACTURA ES ANTERIOR AL DEL EJERCICIO ACTUAL LA DEVOLUCIÓN SE HARÁ CONTRA UNA CUENTA DE RESULTADO DE AÑOS ANTERIORES
		
		if(!$this->DevAnoAnt){
			$datos['criterio'] = 'por_detalle_contable';			
			$rsdet = $this->consulta_detalles_doc($datos);
			if($rsdet===false){return false;}		
			
			foreach($rsdet['rs'] as $scg){		       
				   // echo 'SCG (D): '.$scg['sc_cuenta'].'='.$scg['monto'].'<br>';
					$scg['debhab'] = 'D';
					$resp = $this->InsertDetCont($scg);
					if($resp===false){return false;}				
			}
			
			if($datos['iva_doc']>0){	
					if($this->TipoAfectacion=='P'){
						
						$datos['criterio'] = 'por_detalle_contable_iva';			
						$rsspgiva = $this->consulta_detalles_fact($datos);	
						foreach($rsspgiva['rs'] as $spgiva){		
								//echo $spgiva['spg_cuenta'].'-'.$spgiva['sc_cuenta'].'='.$spgiva['monto'].'<br>';
						}
						
					}
					else{    
							$scg['sc_cuenta'] = $this->CuentaIva;
							$scg['debhab'] = 'D';
							$scg['monto'] = $datos['iva_doc'];
							$scg['monto'] = round($scg['monto'],2);
							//echo 'SCG (D): '.$scg['sc_cuenta'].'='.$scg['monto'].'<br>';
							$resp = $this->InsertDetCont($scg);
							if($resp===false){return false;}
					}
			}
		}
		else{
			
			if(!$this->CtaAnoAnt){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan la cuenta contable para ejercicio de años anteriores. 				           			    
							<br><b>METODO:</b> ContabilizarDoc ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}		
			
			$scg['sc_cuenta'] = $this->CtaAnoAnt;
			$scg['debhab'] = 'D';
			$scg['monto'] = $datos['total_doc'];
			//echo 'SCG (D): '.$this->CtaAnoAnt.'='.$datos['total_doc'].'<br>';
			$resp = $this->InsertDetCont($scg);
			if($resp===false){return false;}
		}
		
	    //echo 'SCG (H): '.$this->CuentaCierre.'='.$datos['total_doc'].'<br>';
		$scg['sc_cuenta'] = $this->CuentaCierre;
		$scg['debhab'] = 'H';
		$scg['monto'] = $datos['total_doc'];
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}
		
		$this->cmpspi->EsAjax = 1;		
		
		$resp = $this->GenerarCmp($datos);
		if($resp===false){return false;}
					
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Generó y contabilizó:   <b>".$this->descripcion."</b> ".
						                "Monto: <b>".number_format($opciones['monmovcob'],2,",",".")."</b>";
		$this->guardar_seguridad();
	}	
	
	function extraerdatos_documento($datos=array()){
	
					$propiedades['criterio'] = "por_id";
					$propiedades['id_doc'] = $datos['id_doc'];
					$datosfact = $this->consulta_documentos($propiedades);	
					if($datosfact===false){return false;}
								
					if(!$datosfact['cantidad']){
						$mensaje = 'No hay documentos con ese id. <br><b>id:</b> '.$datosfact['id_doc'];
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;					
					}
					
					$this->DatosFact = $datosfact['fila'];
					$this->id_fact=$this->DatosFact['id_fact'];
					$this->numfact=$this->DatosFact['numfact'];
					$this->codfact=$this->DatosFact['codfact'];
					$this->total = $this->DatosFact['total'];
					$this->numorddes = $this->DatosFact['numorddes'];
					$this->nummov = $this->DatosFact['nummov'];
					$this->id_doc=$this->DatosFact['id_doc'];
					$this->numdoc=$this->DatosFact['numdoc'];
					$this->coddoc=$this->DatosFact['coddoc'];
					$this->total_doc = $this->DatosFact['total_doc'];
					$this->codunieje = $this->DatosFact['codunieje'];
					
					$datosfact['fila'] = $this->FormatDatosDocPresent($datosfact['fila']);
															
					return $datosfact;
	
	}
	
	function SelectCargos($opciones=array()){	
		
		switch($opciones['criterio']){
				  
			  case "por_codcar":
					$sql_criterio = " AND codcar='".$opciones['codcar']."'";
					break;							  
			 
		}
		
										   
		$query_rs = "SELECT codemp, 
							codcar, 
							dencar, 
		                    substr(sigesp_cargos.codestpro,1,25) as codestpro1,
							substr(sigesp_cargos.codestpro,26,25) as codestpro2,
							substr(sigesp_cargos.codestpro,51,25) as codestpro3,
							substr(sigesp_cargos.codestpro,76,25) as codestpro4,
							substr(sigesp_cargos.codestpro,101,25) as codestpro5,
							spg_cuenta,
							scg_cuenta,  
							porcar, 
							estlibcom, 
						    formula, 
							estcla, 
							tipo_iva, 
							spi_cuenta, 
							codestprospi, 
							estclaspi, 						    
							estfac,
							0.0 AS monbasimp, 
							0.0 as monimp 
	                   FROM sigesp_cargos  
		             WHERE  codemp = '".$this->ls_codemp."' 
					    AND estfac='1' ".$sql_criterio."
						ORDER BY codcar
						";
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'SelectCargos';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	
	function GenerarCodigoTipoConcepto($datos=array()){
				
			$metodo = 'GenerarCodigoTipoConcepto';
			$ls_sql=" SELECT codtipcon::integer FROM cxc_tipo_concepfac ORDER BY codtipcon::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->codtipcon = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
			
			$this->codtipcon = str_pad(((integer)$rs_data->fields['codtipcon']+1),$this->digitos,'0',STR_PAD_LEFT);
			
			return true; 
			
	}
	
	function consulta_tipo_concepto($opciones=array()){	
		
		switch($opciones['criterio']){
							  
			  case "por_codigo":
					$sql_criterio = " WHERE codtipcon='".$opciones['codtipcon']."' AND codemp='".$this->ls_codemp."'";   
					break;
			  case "valida_update":
					$sql_criterio = " WHERE codtipcon='".$opciones['codtipcon']."' AND codemp='".$this->ls_codemp."' ";   
					break;				   
			  case "por_listado":
					$sql_criterio = " WHERE dentipcon ".$this->postgres_ilike."LIKE('%".$opciones['dentipcon']."%') AND codtipcon ".$this->postgres_ilike."LIKE('%".$opciones['codtipcon']."%') ORDER BY codtipcon";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_tipo_concepfac ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_tipo_concepto';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function  insertar_tipoconcepto($datos=array()){
				
				if(!$datos['codtipcon'] or !$datos['dentipcon'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_tipo_concepto($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
							
				$ls_sql = "INSERT INTO cxc_tipo_concepfac(codemp, codtipcon, dentipcon)
						   VALUES ('".$this->ls_codemp."', '".$datos['codtipcon']."', '".$datos['dentipcon']."'); ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){					
					$metodo = 'insertar_tipoconcepto';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				$mensaje = 'El Tipo de Concepto ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  modificar_tipoconcepto($datos=array()){				
				
				if(!$datos['codtipcon'] or !$datos['dentipcon'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
						
				$ls_sql = "UPDATE cxc_tipo_concepfac
     					   SET codtipcon='".$datos['codtipcon']."', dentipcon='".$datos['dentipcon']."' 
						   WHERE codtipcon='".$datos['codtipcon']."' AND codemp='".$this->ls_codemp."'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_tipoconcepto';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El Tipo de Concepto ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  eliminar_tipoconcepto($datos){
				
				if(!$datos['codtipcon'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				/*
				$param = $datos;
				$param['criterio'] = 'por_tipo';
				$resp = $this->consulta_conceptos_cxc($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar un Tipo de Concepto que esta siendo usado ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
				*/			
				$ls_sql = "DELETE FROM cxc_tipo_concepfac WHERE codtipcon='".$datos['codtipcon']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_tipoconcepto';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Tipo(s) de Concepto(s)';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	function GenerarCodigoConceptoFac($datos=array()){
				
			$metodo = 'GenerarCodigoConceptoFac';
			$ls_sql=" SELECT codconfac::integer FROM cxc_conceptofac ORDER BY codconfac::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->codconfac = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
			
			$this->codconfac = str_pad(((integer)$rs_data->fields['codconfac']+1),$this->digitos,'0',STR_PAD_LEFT);
			
			return true; 
			
	}
	
	function consulta_conceptofac($opciones=array()){	
		
		$opciones['criterio'] = $opciones['criterio']?$opciones['criterio']:'por_listado';
		
		switch($opciones['criterio']){
							  
			  case "por_codigo":
					$sql_criterio = "  INNER JOIN cxc_tipo_concepfac tc ON tc.codemp = cf.codemp 
									                                  AND tc.codtipcon = cf.codtipcon
									   LEFT JOIN siv_unidadmedida u ON u.codunimed = cf.codunimed
									   LEFT JOIN scg_cuentas scg ON scg.sc_cuenta = cf.scg_cuenta
					                   WHERE cf.codconfac='".$opciones['codconfac']."' AND cf.codemp='".$this->ls_codemp."'";   
					break;
					
			  case "por_listado":
					$sql_criterio = " INNER JOIN cxc_tipo_concepfac tc ON tc.codemp = cf.codemp 
									                                  AND tc.codtipcon = cf.codtipcon
									  LEFT JOIN siv_unidadmedida u ON u.codunimed = cf.codunimed
									  LEFT JOIN scg_cuentas scg ON scg.sc_cuenta = cf.scg_cuenta
									  WHERE cf.denconfac ".$this->postgres_ilike."LIKE('%".$opciones['denconfac']."%') 
					                    AND cf.codconfac ".$this->postgres_ilike."LIKE('%".$opciones['codconfac']."%') 
										AND cf.codtipcon ".$this->postgres_ilike."LIKE('%".$opciones['codtipcon']."%') 
										ORDER BY cf.codconfac";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_conceptofac cf ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_conceptofac';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function  insertar_conceptofac($datos=array()){
				
				if(!$datos['codconfac'] or !$datos['denconfac'] or !$datos['codtipcon'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_conceptofac($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$datos['preconfac'] = $this->formato_numerico_us($datos['preconfac']);
							
				$ls_sql = "INSERT INTO cxc_conceptofac(codemp, codtipcon, codconfac, denconfac, 
				                                       scg_cuenta, preconfac, codunimed)
						   VALUES ('".$this->ls_codemp."', 
						           '".$datos['codtipcon']."', 
								   '".$datos['codconfac']."', 
								   '".$datos['denconfac']."', 
								   '".$datos['scg_cuenta']."', 
								   '".$datos['preconfac']."', 
								   '".$datos['codunimed']."'); ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){					
					$metodo = 'insertar_conceptofac';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				$mensaje = 'El Tipo de Concepto ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  modificar_conceptofac($datos=array()){				
				
				if(!$datos['codconfac'] or !$datos['denconfac'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$datos['preconfac'] = $this->formato_numerico_us($datos['preconfac']);
				
				$ls_sql = "UPDATE cxc_conceptofac
     					   SET codtipcon='".$datos['codtipcon']."', 
						   	   denconfac='".$datos['denconfac']."',
							   scg_cuenta='".$datos['scg_cuenta']."',
						       preconfac='".$datos['preconfac']."', 
							   codunimed='".$datos['codunimed']."' 
						   WHERE codconfac='".$datos['codconfac']."' AND codemp='".$this->ls_codemp."'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_conceptofac';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El Concepto ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  eliminar_conceptofac($datos){
				
				if(!$datos['codtipcon'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				/*
				$param = $datos;
				$param['criterio'] = 'por_tipo';
				$resp = $this->consulta_conceptos_cxc($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar un Tipo de Concepto que esta siendo usado ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
				*/			
				$ls_sql = "DELETE FROM cxc_conceptofac WHERE codconfac='".$datos['codconfac']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_conceptofac';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Concepto(s)';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	
	
	function EncabezadoRepInfoScg($parametro=array()){		
		
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="4" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> DETALLE CONTABLE</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> CUENTA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> DENOMINACIÓN </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> DEBE'.$this->TxtMoneda.'</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> HABER'.$this->TxtMoneda.'</font></td>

						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepInfoScg($datos=array()){
			
			$fin_tabla = '   <tr>
							   <td colspan="2"  width="'.($this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$this->TxtMoneda.':</b></font>
							   </td>			  
							   <td width="'.($this->RepParam['ancho'][3]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totalDebe'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][4]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totalHaber'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepInfoScg($datos){			
			
			$datos = $this->FormatLonCodEstPro($datos);
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['sc_cuenta']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['denominacion']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['montoDebe']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][4].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['montoHaber']).'</font></td>

						 </tr>';
			
			return $filas;
	}
	
	
	function RepInfoScg($datos=array()){
			
			if(!$datos['id_fact'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contable				           			    
						   <br><b>METODO:</b> RepInfoScg ';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			
			$this->numfact=$datos['numfact'];
			$this->id_fact=$datos['id_fact'];
			
			$resp = $this->extraerdatos_factura($datos);
			if($resp===false){return false;}
			
			$this->procede='CXCFAC';
			$this->comprobante = $this->NroCmpFactura();
			if($this->comprobante===false){return false;}
			if($datos['abrmon']=='E'){$datos['abrmon']='€';}
			$this->denmon=$datos['denmon'];
			$this->abrmon=$datos['abrmon'];
			if($this->CargarMonedaLocal){$this->TasaCambio=1;}
			$this->TxtMoneda = ($this->MonedaExtranjera and !$this->CargarMonedaLocal)?'('.$this->abrmon.')':'';
			
			$resul = $this->ConsultaDetContable($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$total=0;
			
			foreach($resul as $datosFila){					
					$totalDebe += $datosFila['debhab']=='D'?$datosFila['monto']/$this->TasaCambio:0;
					$totalHaber += $datosFila['debhab']=='H'?$datosFila['monto']/$this->TasaCambio:0;	
					$montoDebe=$datosFila['debhab']=='D'?$datosFila['monto']/$this->TasaCambio:0;						        
					$montoHaber=$datosFila['debhab']=='H'?$datosFila['monto']/$this->TasaCambio:0;
							
					$datosFila['montoDebe'] = $montoDebe?number_format($montoDebe,2,',','.'):'';
					$datosFila['montoHaber'] = $montoHaber?number_format($montoHaber,2,',','.'):'';
																				
					$filas .= $this->FilaRepInfoScg($datosFila);			
			}
						
			$totales['totalDebe'] = number_format($totalDebe,2,',','.');	
			$totales['totalHaber'] = number_format($totalHaber,2,',','.');						
			$reporte = $this->EncabezadoRepInfoScg().$filas.$this->FinTablaRepInfoScg($totales);
						
			return $reporte;
	
	}
	
	
	
	function EncabezadoRepInfoSpi($parametro=array()){
		
		$txtmonto = ($this->MonedaExtranjera and !$this->CargarMonedaLocal)?'MONTO('.$this->abrmon.')':'MONTO';
		
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="4" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> DETALLE PRESUPUESTARIO</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CUENTA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">ESTRUCT. </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">DENOMINACIÓN </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">OPE.</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">'.$txtmonto.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepInfoSpi($datos=array()){
			
			$txtmonto = ($this->MonedaExtranjera and !$this->CargarMonedaLocal)?'TOTALES('.$this->abrmon.')':'TOTALES';
			
			$fin_tabla = '   <tr>
							   <td colspan="4"  width="'.($this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]+$this->RepParam['ancho'][3]+$this->RepParam['ancho'][4]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.$txtmonto.':</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][5]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepInfoSpi($datos){			
			
			$datos = $this->FormatLonCodEstPro($datos);
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['spi_cuenta']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($this->Estructura).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['denominacion']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][4].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['operacion']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['monto']).'</font></td>

						 </tr>';
			
			return $filas;
	}
	
	
	function RepInfoSpi($datos=array()){
			
			if(!$datos['id_fact'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información presupuestaria				           			    
						   <br><b>METODO:</b> RepInfoScg ';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			if($datos['abrmon']=='E'){$datos['abrmon']='€';}
			$this->numfact=$datos['numfact'];
			$this->id_fact=$datos['id_fact'];
			$this->denmon=$datos['denmon'];
			$this->abrmon=$datos['abrmon'];
			
			$resp = $this->extraerdatos_factura($datos);
			if($resp===false){return false;}
			
			$this->procede='CXCFAC';
			$this->comprobante = $this->NroCmpFactura();
			if($this->comprobante===false){return false;}
			
			$resul = $this->ConsultaDetSPI($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$total=0;
			
			foreach($resul as $datosFila){
				$total += $datosFila['monto'];
				if($this->CargarMonedaLocal){$this->TasaCambio=1;}
				$datosFila['monto'] = number_format($datosFila['monto']/$this->TasaCambio,2,',','.');
				$filas .= $this->FilaRepInfoSpi($datosFila);			
			}
						
			$totales['total'] = number_format($total/$this->TasaCambio,2,',','.');							
			$reporte = $this->EncabezadoRepInfoSpi().$filas.$this->FinTablaRepInfoSpi($totales);
						
			return $reporte;
	
	}
	
	function GenerarCodigoSucursal($datos=array()){
				
			$metodo = 'GenerarCodigoSucursal';
			$ls_sql=" SELECT codsuc::integer FROM cxc_sucursales ORDER BY codsuc::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->codsuc = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
			
			$this->codsuc = str_pad(((integer)$rs_data->fields['codsuc']+1),$this->digitos,'0',STR_PAD_LEFT);
			
			return true; 
			
	}
	
	function consulta_sucursal($opciones=array()){	
		
		switch($opciones['criterio']){
							  
			  case "por_codigo":
					$sql_criterio = " WHERE codsuc='".$opciones['codsuc']."' AND codemp='".$this->ls_codemp."'";   
					break;
			  case "valida_update":
					$sql_criterio = " WHERE codsuc='".$opciones['codsuc']."' AND codemp='".$this->ls_codemp."' ";   
					break;				   
			  case "por_listado":
					$sql_criterio = " WHERE nomsuc ".$this->postgres_ilike."LIKE('%".$opciones['nomsuc']."%') AND codsuc ".$this->postgres_ilike."LIKE('%".$opciones['codsuc']."%') ORDER BY codsuc";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_sucursales ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_sucursal';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function  insertar_sucursal($datos=array()){
				
				if(!$datos['codsuc'] or !$datos['nomsuc'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_sucursal($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
							
				$ls_sql = "INSERT INTO cxc_sucursales(codemp, codsuc, nomsuc,sucmatriz,sigsuc,codseriesuc,nrocontinisuc)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['codsuc']."', '".
									  $datos['nomsuc']."', '".
									  $datos['sucmatriz']."', '".
									  $datos['sigsuc']."', '".
									  $datos['codseriesuc']."', '".
									  $datos['nrocontinisuc']."' ".									  
									  "); ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){					
					$metodo = 'insertar_sucursal';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				$mensaje = 'La sucursal ha sido creada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  modificar_sucursal($datos=array()){				
				
				if(!$datos['codsuc'] or !$datos['nomsuc'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				
				$ls_sql = "UPDATE cxc_sucursales
							  SET  nomsuc='".$datos['nomsuc']."', 
								sucmatriz='".$datos['sucmatriz']."', 
								   sigsuc='".$datos['sigsuc']."',
							  codseriesuc='".$datos['codseriesuc']."',
						    nrocontinisuc='".$datos['nrocontinisuc']."'
						   WHERE codsuc='".$datos['codsuc']."' AND codemp='".$this->ls_codemp."'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_sucursal';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'La sucursal ha sido modificada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  eliminar_sucursal($datos){
				
				if(!$datos['codsuc'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				/*
				$param = $datos;
				$param['criterio'] = 'por_tipo';
				$resp = $this->consulta_conceptos_cxc($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar un Tipo de Concepto que esta siendo usado ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
				*/			
				$ls_sql = "DELETE FROM cxc_sucursales WHERE codsuc='".$datos['codsuc']."'  AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_sucursal';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' sucursal(es)';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	function GenerarCodigoCaja($datos=array()){
				
			$metodo = 'GenerarCodigoCaja';
			$ls_sql=" SELECT codcaj::integer FROM cxc_cajas ORDER BY codcaj::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->codcaj = str_pad('1',$this->digitos,'0',STR_PAD_LEFT); return true;}
			
			$this->codcaj = str_pad(((integer)$rs_data->fields['codcaj']+1),$this->digitos,'0',STR_PAD_LEFT);
			
			return true;
	}
	
	function consulta_caja($opciones=array()){	
		
		$campos = " * ";
		
		switch($opciones['criterio']){
							  
			  case "por_codigo":
					$sql_criterio = " INNER JOIN cxc_sucursales s ON s.codemp = c.codemp 
									                                  AND s.codsuc = c.codsuc
									  LEFT JOIN scg_cuentas scg ON scg.sc_cuenta = c.scg_cuenta
					                  WHERE c.codcaj='".$opciones['codcaj']."'
									    AND c.codsuc='".$opciones['codsuc']."' 
									    AND c.codemp='".$this->ls_codemp."'";   
					break;
			  case "valida_update":
					$sql_criterio = " WHERE c.codcaj='".$opciones['codcaj']."' AND c.codemp='".$this->ls_codemp."' ";   
					break;				   
			  case "por_listado":
			        $campos = " *, '('||s.codsuc||')-'||s.sigsuc as infosuc, '('||s.sigsuc||')-'||c.nomcaj as infocaja ";
					$sql_criterio = "   INNER JOIN cxc_sucursales s ON s.codemp = c.codemp 
									                                  AND s.codsuc = c.codsuc
									    LEFT JOIN scg_cuentas scg ON scg.sc_cuenta = c.scg_cuenta
					                    WHERE c.nomcaj ".$this->postgres_ilike."LIKE('%".$opciones['nomcaj']."%') AND c.codcaj ".$this->postgres_ilike."LIKE('%".$opciones['codcaj']."%') ORDER BY c.codcaj";
					break;	
					
			  case "por_listado_comp":
					$sql_criterio = "   INNER JOIN cxc_sucursales s ON s.codemp = c.codemp 
									                                  AND s.codsuc = c.codsuc
									    LEFT JOIN scg_cuentas scg ON scg.sc_cuenta = c.scg_cuenta
					                    WHERE c.nomcaj ".$this->postgres_ilike."LIKE('%".$opciones['nomcaj']."%') AND c.codcaj ".$this->postgres_ilike."LIKE('%".$opciones['codcaj']."%') ORDER BY c.codcaj";
					break;		
		}
								   
		$query_rs = "SELECT ".$campos." FROM cxc_cajas c ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_caja';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function  insertar_caja($datos=array()){
				
				if(!$datos['codcaj'] or !$datos['nomcaj'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_codigo';
				$resp = $this->consulta_caja($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: El código ya existe ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
							
				$ls_sql = "INSERT INTO cxc_cajas(codemp, codcaj, nomcaj, codsuc, scg_cuenta, codseriecaj, nrofacinicaj, estcaj)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['codcaj']."', '".
									  $datos['nomcaj']."', '".
									  $datos['codsuc']."', '".
									  $datos['scg_cuenta']."', '".
									  $datos['codseriecaj']."', '".
									  $datos['nrofacinicaj']."', '".
									  $datos['estcaj']."'); ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){					
					$metodo = 'insertar_caja';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				$mensaje = 'La caja ha sido creada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  modificar_caja($datos=array()){				
				
				if(!$datos['codcaj'] or !$datos['nomcaj'] or !$datos['codsuc'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$ls_sql = "UPDATE cxc_cajas
     					   SET        nomcaj='".$datos['nomcaj']."',
							      scg_cuenta='".$datos['scg_cuenta']."',
							          estcaj='".$datos['estcaj']."', 
								 codseriecaj='".$datos['codseriecaj']."',
							    nrofacinicaj='".$datos['nrofacinicaj']."'
						   WHERE codcaj='".$datos['codcaj']."' AND codsuc='".$datos['codsuc']."' AND codemp='".$this->ls_codemp."'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'modificar_caja';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'La caja ha sido modificada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  eliminar_caja($datos){
				
				if(!$datos['codcaj'] or !$datos['codsuc'])
				{				
					
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				/*
				$param = $datos;
				$param['criterio'] = 'por_tipo';
				$resp = $this->consulta_conceptos_cxc($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar un Tipo de Concepto que esta siendo usado ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
				*/			
				$ls_sql = "DELETE FROM cxc_cajas WHERE codcaj='".$datos['codcaj']."' AND codsuc='".$datos['codsuc']."' AND codemp='".$this->ls_codemp."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'eliminar_sucursal';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$resp = $this->DeletePermisosCaja($datos);
				if($resp===false){return false;}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' caja(s)';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	function DeletePermisosCaja($datos=array())
	{
		
		if(!$datos['codsuc'] or !$datos['codcaj']){		
			$mensaje = 'Faltan datos para poder realizar la operación de Limpieza de Permisos. ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$codintper=$datos['codsuc'].' - '.$datos['codcaj'];
				
		$ls_sql= " DELETE FROM sss_derechos_usuarios".
				 " WHERE codemp= '".$as_codemp. "'".
				 "   AND codintper= '".$codintper. "'".				 
				 "   AND codsis='CXC'";
		$li_row=$this->io_sql->execute($ls_sql);
		
		if($li_row===false){
			$this->io_msg->message("CLASE->".get_class($this)." MÉTODO->DeletePermisosCaja ERROR->".$this->io_sql->message);
			return false;
		}
		
		 $ls_sql= " DELETE FROM sss_permisos_internos".
				 " WHERE codemp= '".$as_codemp. "'".
				 "   AND codintper= '".$codintper. "'".				 
				 "   AND codsis='CXC'"; 
		 $li_row=$this->io_sql->execute($ls_sql);
		 
		 if($li_row===false){
			$this->io_msg->message("CLASE->".get_class($this)." MÉTODO->DeletePermisosCaja ERROR->".$this->io_sql->message);
		 	return false;
		 }
		 
		 /*
		 $this->seguridad["evento"]="INSERT";
		 $this->seguridad["descripcion"]="Se limpió la seguridad asociada a la caja ".$caja." de la sucursal ".$sucursal." por eliminación de la caja";
		 $this->guardar_seguridad();
		 */
		 
		 return true;
		
	}  // end  function uf_sss_delete_usuario_caja
	//---------------------------------------------------------------------------------------------------------------------------

	function EncabezadoRepLisFact($parametro=array()){	
	
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> LISTADO DE FACTURAS '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> N°</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> FECHA </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> CLIENTE </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> CONCEP.</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> COND</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> MON</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> SUB TOT.'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> IVA'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> TOTAL'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepLisFact($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['total_subtot'] = number_format($datos['total_subtot']/$this->TasaCambio,2,',','.');
			$datos['total_iva'] = number_format($datos['total_iva']/$this->TasaCambio,2,',','.');
			$datos['total_total'] = number_format($datos['total_total']/$this->TasaCambio,2,',','.');
			
			$fin_tabla = '   <tr>
							   <td colspan="5"  width="'.($this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]+$this->RepParam['ancho'][3]+$this->RepParam['ancho'][4]+$this->RepParam['ancho'][5]+$this->RepParam['ancho'][6]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][7]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_subtot'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][8]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_iva'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][9]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_total'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepLisFact($datos){			
			
			
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nombre_cliente']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][4].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['descripfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['desccondpago']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['abrmon']).'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['subtot']).'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['iva']).'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['total']).'</font></td>

						 </tr>';
			
			return $filas;
	}
	
	
	function RepLisFact($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->consulta_facturas($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return 0;}
			
			$total=0;
			$total['total_subtot']=0;
			$total['total_iva']=0;
			$total['total_total']=0;
					
			foreach($resul['rs'] as $datosFila){
				
				$totales['total_subtot'] += $datosFila['subtot'];
				$totales['total_iva'] += $datosFila['iva'];
				$totales['total_total'] += $datosFila['total'];
				
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				
				$DatosFac = $this->FormatDatosFactPresent($datosFila);
				
				$filas .= $this->FilaRepLisFact($DatosFac);			
			}
			
			$this->TotalRepLisfact['total_subtot'] += $totales['total_subtot'];
			$this->TotalRepLisfact['total_iva'] += $totales['total_iva'];
			$this->TotalRepLisfact['total_total'] += $totales['total_total'];
													
			$reporte = $this->EncabezadoRepLisFact().$filas.$this->FinTablaRepLisFact($totales);
						
			return $reporte;
	
	}
	
	function TotalesRepLisFactMultimon($datos=array()){	
			
			$datos['total_subtot'] = number_format($this->TotalRepLisfact['total_subtot'],2,',','.');
			$datos['total_iva'] = number_format($this->TotalRepLisfact['total_iva'],2,',','.');
			$datos['total_total'] = number_format($this->TotalRepLisfact['total_total'],2,',','.');
			
			$fin_tabla = '  <p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1"> 
							<tr bgcolor="#DDDDDD">
							   <td bgcolor="#FFFFFF" colspan="5"  width="'.($this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]+$this->RepParam['ancho'][3]+$this->RepParam['ancho'][4]+$this->RepParam['ancho'][5]+$this->RepParam['ancho'][6]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES ('.$this->AbrMonDef.'):</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][7]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['total_subtot'].'</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][8]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['total_iva'].'</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][9]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['total_total'].'</b></font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function ConsultarMonedasFacturas($datos=array()){
			$criterio="";
			if($datos['codmon']){$criterio = $criterio." AND codmon = '".$datos['codmon']."' ";}
			if($datos['codart']){
					$criterio = $criterio." AND id_fact IN (SELECT DISTINCT id_fact 
																FROM cxc_detalle 
															   WHERE id_tipodetalle='ARTIC'
																 AND codproceso='FACTURA'
																 AND coddetalle='".$datos['codart']."' 
															  ) ";
			}
			
			if($datos['codser']){
					$criterio = $criterio." AND id_fact IN (SELECT DISTINCT id_fact 
																FROM cxc_detalle 
															   WHERE id_tipodetalle='SERVI'
																 AND codproceso='FACTURA'
																 AND coddetalle='".$datos['codser']."' 
															  ) ";
			}
			
			if($datos['codconfac']){
					$criterio = $criterio." AND id_fact IN (SELECT DISTINCT id_fact 
																FROM cxc_detalle 
															   WHERE id_tipodetalle='CONCE'
																 AND codproceso='FACTURA'
																 AND coddetalle='".$datos['codconfac']."' 
															  ) ";
			}
			if($datos['codsuc']){$criterio = $criterio." AND codsuc = '".$datos['codsuc']."' ";}
		    if($datos['codcaj']){$criterio = $criterio." AND codcaj = '".$datos['codcaj']."' ";}			
			if($datos['id_transp']){$criterio = $criterio." AND id_transp = '".$datos['id_transp']."' ";}
			if($datos['codmon']){$criterio = $criterio." AND codmon = '".$datos['codmon']."' ";}
			if($datos['id_estfact']){$criterio = $criterio." AND id_estfact = '".$datos['id_estfact']."' ";}
			if($datos['id_condpago']){$criterio = $criterio." AND id_condpago = '".$datos['id_condpago']."' ";}
			if($datos['numfact']){$criterio = $criterio." AND numfact = '".$datos['numfact']."' ";}
			if($datos['codfact']){$criterio = $criterio." AND codfact ".$this->postgres_ilike."LIKE('%".$datos['codfact']."%') ";}				
			if($datos['numcont']){$criterio = $criterio." AND numcont ".$this->postgres_ilike."LIKE('%".$datos['numcont']."%') ";}
			
			$ls_sql = " SELECT DISTINCT ON (f.codmon) f.codmon,m.denmon,m.abrmon 
			            FROM cxc_factura f
			            INNER JOIN sigesp_moneda m ON m.codmon=f.codmon
						WHERE anulado='0'
						".$criterio."
						ORDER BY f.codmon
					  ";
			
			$this->RsMultiMon=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->RsMultiMon==false)
			{
				
				$metodo = 'ConsultarMonedasFacturas';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return $this->RsMultiMon;
	}
	
	function RepLisFactMultimon($datos=array()){
			
			if(!$this->RepMultiMon){
				$infoRep = $this->RepLisFact($datos);
				return $infoRep;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'VALIDACIÓN DE DATOS: No se encontraron facturas !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
			
			$this->TotalRepLisfact['total_subtot'] = 0;
			$this->TotalRepLisfact['total_iva'] = 0;
			$this->TotalRepLisfact['total_total'] = 0;
			
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$infoRep = $this->RepLisFact($datos);	
				if($infoRep===false){return false;}	
				$rep = $rep.$infoRep.'<br />';		
			}
			
			return $rep.$this->TotalesRepLisFactMultimon();
					
	}
	
	function EncabezadoRepProdFact($parametro=array()){		
		
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="4" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> PRODUCTOS '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FACTURA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TIP</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">COD DET</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">DENOM</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">%IVA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CANT.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">PRECIO'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">SUB TOT'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">IVA'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][10].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NO GRAV'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][11].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NETO'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepProdFact($datos=array()){
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$fin_tabla = '   <tr bgcolor="#DDDDDD">
							   <td colspan="5"  width="'.($this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]+$this->RepParam['ancho'][3]+$this->RepParam['ancho'][4]+$this->RepParam['ancho'][5]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][6]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_cantidad_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][7]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_precio_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][8]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_subtot_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][9]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_iva_detalle'].'</font>
							   </td>
							    <td width="'.($this->RepParam['ancho'][10]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_no_grav'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_neto_detalle'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepProdFact($datos){			
			
			$datos = $this->FormatDatosFactPresent($datos);
			$datos = $this->formatear_detalle_grilla($datos);
			$datos['no_grav'] = number_format($datos['no_grav']/$this->TasaCambio,2,',','.');
			$datosFactura = '<b>N°: </b>'.trim($datos['numfact']).'<br/><b>Fecha: </b>'.trim($datos['fecfact']).'<br/>'.trim($datos['nombre_cliente']);
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datosFactura.'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['id_tipodetalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['coddetalle']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][4].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['dendetalle']).'<br/>'.trim($datos['comentario']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['porciva']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['cantidad_detalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['precio_detalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['subtot_detalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['iva_detalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['no_grav']).'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['neto_detalle']).'</font></td>
						 </tr>';
			
			return $filas;
	}
	
	
	function RepProdFact($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->consulta_detalles_fact($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return '';}
			
			$nro=0;
			
			$totales['total_cantidad_detalle']=0;
			$totales['total_precio_detalle']=0;
			$totales['total_iva_detalle']=0;
			$totales['total_neto_detalle']=0;
			
			foreach($resul['rs'] as $datosFila){
			
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				$total_cantidad_detalle += $datosFila['cantidad_detalle'];				
				$total_iva_detalle += $datosFila['iva_detalle'];
				$total_neto_detalle += $datosFila['neto_detalle'];
				$datosFila['no_grav'] = (!$datosFila['iva_detalle'])?$datosFila['neto_detalle']:0;
				$total_no_grav += $datosFila['no_grav'];
				$datosFila['subtot_detalle'] = ($datosFila['precio_detalle']*$datosFila['cantidad_detalle']);
				$total_subtot_detalle += $datosFila['subtot_detalle'];
				
				
				$filas .= $this->FilaRepProdFact($datosFila);
				$nro++;			
			}
			
			$this->TotalRepProdfact['total_cantidad_detalle'] += $total_cantidad_detalle;
			$this->TotalRepProdfact['total_iva_detalle'] += $total_iva_detalle;
			$this->TotalRepProdfact['total_neto_detalle'] += $total_neto_detalle;
			$this->TotalRepProdfact['total_no_grav'] += $total_no_grav;
			$this->TotalRepProdfact['total_subtot_detalle'] += $total_subtot_detalle;
						
			$totales['total_cantidad_detalle'] = number_format($total_cantidad_detalle,2,',','.');			
			$totales['total_precio_detalle']='NO APLICA';
			$totales['total_iva_detalle'] = number_format($total_iva_detalle/$this->TasaCambio,2,',','.');
			$totales['total_neto_detalle'] = number_format($total_neto_detalle/$this->TasaCambio,2,',','.');	
			$totales['total_no_grav'] = number_format($total_no_grav/$this->TasaCambio,2,',','.');
			$totales['total_subtot_detalle'] = number_format($total_subtot_detalle/$this->TasaCambio,2,',','.');
							
			$reporte = $this->EncabezadoRepProdFact().$filas.$this->FinTablaRepProdFact($totales);
						
			return $reporte;
	
	}
	
	function TotalesRepLisProdMultimon($datos=array()){
			
			$datos['total_cantidad_detalle'] = number_format($this->TotalRepProdfact['total_cantidad_detalle'],2,',','.');
			$datos['total_precio_detalle'] = number_format($this->TotalRepProdfact['total_precio_detalle'],2,',','.');
			$datos['total_subtot_detalle'] = number_format($this->TotalRepProdfact['total_subtot_detalle'],2,',','.');
			$datos['total_iva_detalle'] = number_format($this->TotalRepProdfact['total_iva_detalle'],2,',','.');
			$datos['total_no_grav'] = number_format($this->TotalRepProdfact['total_no_grav'],2,',','.');
			$datos['total_neto_detalle'] = number_format($this->TotalRepProdfact['total_neto_detalle'],2,',','.');
			
			
			$fin_tabla = '   <p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1"> 
							<tr bgcolor="#DDDDDD">
							   <td colspan="5"  width="'.($this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]+$this->RepParam['ancho'][3]+$this->RepParam['ancho'][4]+$this->RepParam['ancho'][5]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES('.$this->AbrMonDef.'):</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][6]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_cantidad_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][7]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_precio_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][8]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_subtot_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][9]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_iva_detalle'].'</font>
							   </td>
							    <td width="'.($this->RepParam['ancho'][10]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_no_grav'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_neto_detalle'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function RepProdFactMultimon($datos=array()){
			
			$this->TotalRepProdfact['total_cantidad_detalle'] = 0;
			$this->TotalRepProdfact['total_iva_detalle'] = 0;
			$this->TotalRepProdfact['total_neto_detalle'] = 0;
			$this->TotalRepProdfact['total_no_grav'] = 0;
			$this->TotalRepProdfact['total_subtot_detalle'] = 0;
			$this->TotalRepProdfact['total_neto_detalle'] = 0;
			
			if(!$this->RepMultiMon){
			    $this->CargarMonedaLocal=1;
				$infoRep = $this->RepProdFact($datos);
				return $infoRep;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'ERROR-> VALIDACIÓN DE DATOS: No se encontraron facturas !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
								
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$infoRep = $this->RepProdFact($datos);	
				if($infoRep===false){return false;}	
				$rep = $rep.$infoRep.'<br />';		
			}
			
			return $rep.$this->TotalesRepLisProdMultimon();
					
	}
	
	function EncabezadoRepInfoCargos($parametro=array()){		
		
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="4" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> CARGOS </b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">COD</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">DENOMINACIÓN </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CTA</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'"> %.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">BASEIMP'.$this->TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">IMPUESTO'.$this->TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepInfoCargos($datos=array()){
			
			$fin_tabla = '   <tr>
							   <td colspan="5"  width="'.($this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]+$this->RepParam['ancho'][3]+$this->RepParam['ancho'][4]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$this->TxtMoneda.':</b></font>
							   </td>			  
							   <td width="'.($this->RepParam['ancho'][5]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totalbasimp'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][6]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totalimp'].'</font>
							   </td>							   
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepInfoCargos($datos){
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['codcar']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['dencar']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['scg_cuenta']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][4].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['porcar']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['monbasimp']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['monimp']).'</font></td>
						 </tr>';
			
			return $filas;
	}
	
	
	function RepInfoCargos($datos=array()){
			
			if(!$datos['id_fact'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contable				           			    
						   <br><b>METODO:</b> RepInfoCargos ';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			
			$this->numfact=$datos['numfact'];
			$this->id_fact=$datos['id_fact'];
			
			
			$resul = $this->ConsultaCargos($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$total=0;
			$totalimp=0;
			$totalbasimp=0;
			foreach($resul as $datosFila){					
					$totalimp += $datosFila['monimp'];
					$totalbasimp += $datosFila['monbasimp'];
					$datosFila['porcar'] = number_format($datosFila['porcar'],2,',','.');
					$datosFila['monbasimp'] = number_format($datosFila['monbasimp']/$this->TasaCambio,2,',','.');
					$datosFila['monimp'] = number_format($datosFila['monimp']/$this->TasaCambio,2,',','.');
					$filas .= $this->FilaRepInfoCargos($datosFila);			
			}
						
			$totales['totalimp'] = number_format($totalimp/$this->TasaCambio,2,',','.');	
            $totales['totalbasimp'] = number_format($totalbasimp/$this->TasaCambio,2,',','.');				
			$reporte = $this->EncabezadoRepInfoCargos().$filas.$this->FinTablaRepInfoCargos($totales);
						
			return $reporte;
	
	}
	
	function ConsultaCargos($datos=array()){	
			
			$datos['codproceso']=$datos['codproceso']?$datos['codproceso']:'FACTURA';
			$datos['id_doc']=$datos['id_doc']?$datos['id_doc']:0;
			
			$ls_sql = " SELECT dc.*,dencar 
			            FROM cxc_dt_cargos dc
			            LEFT JOIN sigesp_cargos ac ON ac.codcar = dc.codcar AND ac.codemp = dc.codemp 
						WHERE dc.id_fact='".$this->id_fact."'
						  AND dc.codemp='".$this->ls_codemp."'
					      AND dc.codproceso='".$datos['codproceso']."'
						  AND dc.id_doc='".$datos['id_doc']."' 
						";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql;
			if($this->rs_data==false)
			{
				
				$metodo = 'ConsultaCargos';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return $this->rs_data;
	}
	
	
	function EncabezadoRepLibVent($parametro=array()){		
		
		$ancho1 = $this->RepParam['ancho'][1]+
		          $this->RepParam['ancho'][2]+
				  $this->RepParam['ancho'][3]+
				  $this->RepParam['ancho'][4]+
				  $this->RepParam['ancho'][5]+
				  $this->RepParam['ancho'][6]+
				  $this->RepParam['ancho'][7]+
				  $this->RepParam['ancho'][8]+
				  $this->RepParam['ancho'][9]+
				  $this->RepParam['ancho'][10]+
				  $this->RepParam['ancho'][11]+
				  $this->RepParam['ancho'][12]+
				  $this->RepParam['ancho'][13];
		
		$ancho2=$this->RepParam['ancho'][14]+$this->RepParam['ancho'][15]+$this->RepParam['ancho'][16];
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="0" border="0">
					<thead>
					   <tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td bgcolor="#FFFFFF" colspan="12" align="center" width="'.$ancho1.'"></td>					  
						  <td colspan="4" align="center" width="'.$ancho2.'"><font size="6"><b>VENTAS INTERNAS O EXPORTACIONES GRAVADAS '.$this->TxtMoneda.'</b></font></td>
					   </tr>
					 </thead>
					 </table>
					 <table cellspacing="0" cellpadding="1" border="1"><thead>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="5">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N°</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Fecha</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Rif</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Nombre</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° Plan. Exp</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° Fact</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° Cont</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° ND</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° NC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][10].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Tipo</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][11].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Fact Afec.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][12].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Total + iva'.$this->TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][13].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Vent int no grav'.$this->TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][14].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Baseimp'.$this->TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][15].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">% Alicuota</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][16].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Imp Iva'.$this->TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][17].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Iva Rete'.$this->TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][18].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Iva Perc'.$this->TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepLibVent($datos=array()){
			$sum = $this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]+$this->RepParam['ancho'][3]+$this->RepParam['ancho'][4]+$this->RepParam['ancho'][5]+
				   $this->RepParam['ancho'][6]+$this->RepParam['ancho'][7]+$this->RepParam['ancho'][8]+$this->RepParam['ancho'][9]+$this->RepParam['ancho'][10]+$this->RepParam['ancho'][11];
			
			$fin_tabla = '   <tr>
							   <td colspan="10"  width="'.$sum.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$this->TxtMoneda.':</b></font>
							   </td>						   
							   <td bgcolor="#DDDDDD" width="'.($this->RepParam['ancho'][12]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_total'].'</font>
							   </td>
							   <td bgcolor="#DDDDDD" width="'.($this->RepParam['ancho'][13]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_totalnograb'].'</font>
							   </td>
							   <td bgcolor="#DDDDDD" width="'.($this->RepParam['ancho'][14]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_baseimp'].'</font>
							   </td>
							   <td bgcolor="#DDDDDD" width="'.($this->RepParam['ancho'][15]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'">N/A</font>
							   </td>
							   <td bgcolor="#DDDDDD" width="'.($this->RepParam['ancho'][16]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_monimp'].'</font>
							   </td>
							   <td bgcolor="#DDDDDD" width="'.($this->RepParam['ancho'][17]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_ivaret'].'</font>
							   </td>			
							   <td bgcolor="#DDDDDD" width="'.($this->RepParam['ancho'][18]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_ivaper'].'</font>
							   </td>						  						   
							 </tr>							 
						   </table></p>';
								
			return $fin_tabla; 
	}
	
	function FilaRepLibVent($datos,$datosFact){
			
			$datos['fecmov']=$this->io_conexiones->formatea_fecha_normal($datos['fecmov']);
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['idmov']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecmov']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datosFact['rif_completo']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][4].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datosFact['nombre_cliente']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nroplaexp']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim((integer)$datos['numfac']).'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numcont']).'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nrond']).'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nronc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['codtipmov']).'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nrofacafec']).'</font></td>
							<td width="'.$this->RepParam['ancho'][12].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format(trim($datos['total']/$this->TasaCambio),2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][13].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format(trim($datos['totalnograb']/$this->TasaCambio),2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][14].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format(trim($datos['baseimp']/$this->TasaCambio),2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][15].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format(trim($datos['porcimp']),2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][16].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format(trim($datos['monimp']/$this->TasaCambio),2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][17].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format(trim($datos['ivaret']/$this->TasaCambio),2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][18].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format(trim($datos['ivaper']/$this->TasaCambio),2,',','.').'</font></td>
						 </tr>';
			
			return $filas;
	}
	
	
	function TotalesRepLibVent($datos=array()){
		
		
		
		$fin_tabla = '   <br /><p  style="text-align:center;">
		                 <table cellspacing="0" cellpadding="0" border="0">
							 
							   <tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" >
								<td  bgcolor="#FFFFFF" width="'.$this->RepParamTotal['ancho'][1].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b></b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Base Imponible '.$this->TxtMoneda.'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Débito Fiscal '.$this->TxtMoneda.'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Iva Retenido '.$this->TxtMoneda.'</b></font></td>			  						   
							   </tr>
							
						  </table>
		                  <table cellspacing="0" cellpadding="1" border="1">
		                    <tr>
							    <td  width="'.$this->RepParamTotal['ancho'][1].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Total Alicuota General'.$this->TxtMoneda.':</b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_basimp_general']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_monimp_general']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format($datos['total_ivaret_general'],2,',','.').'</b></font></td>			  						   
							 </tr>
							 <tr>
							    <td  width="'.$this->RepParamTotal['ancho'][1].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Total Alicuota Reducida'.$this->TxtMoneda.':</b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_basimp_reducido']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_monimp_reducido']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format($datos['total_ivaret_reducido'],2,',','.').'</b></font></td>			  						   
							 </tr>
							 <tr>
							    <td  width="'.$this->RepParamTotal['ancho'][1].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Total Alicuota General + Adicional'.$this->TxtMoneda.':</b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_basimp_adicional']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_monimp_adicional']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format($datos['total_ivaret_adicional'],2,',','.').'</b></font></td>			  						   
							 </tr>
							 <tr>
							    <td  width="'.$this->RepParamTotal['ancho'][1].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Total Exentos'.$this->TxtMoneda.':</b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_basimp_exento']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_monimp_exento']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_ivaret_exento']),2,',','.').'</b></font></td>			  						   
							 </tr>
							 <tr>
							    <td  width="'.$this->RepParamTotal['ancho'][1].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Total Exonerados'.$this->TxtMoneda.':</b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_basimp_exonerado']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_monimp_exonerado']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_ivaret_exonerado']),2,',','.').'</b></font></td>			  						   
							 </tr>
							 <tr>
							    <td  width="'.$this->RepParamTotal['ancho'][1].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>Total Exportación'.$this->TxtMoneda.':</b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_basimp_exportacion']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_monimp_exportacion']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_ivaret_exportacion']),2,',','.').'</b></font></td>			  						   
							 </tr>	
							 
							 <tr bgcolor="#DDDDDD">
							    <td  width="'.$this->RepParamTotal['ancho'][1].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$this->TxtMoneda.':</b></font></td>						   
							  	<td  width="'.$this->RepParamTotal['ancho'][2].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_total_basimp']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][3].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_total_monimp']),2,',','.').'</b></font></td>
								<td  width="'.$this->RepParamTotal['ancho'][4].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'"> <b>'.number_format(trim($datos['total_total_ivaret']),2,',','.').'</b></font></td>			  						   
							 </tr>							 
						   </table>
						 </p>';
								
			return $fin_tabla; 
	
	
	}
	
	function RepLibVent($datos=array()){
			/*
			if(!$datos['id_fact'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contable				           			    
						   <br><b>METODO:</b> RepLibVent ';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			*/
			//$this->numfact=$datos['numfact'];
			//$this->id_fact=$datos['id_fact'];
			$datos['criterio'] = 'por_listado';				
			$resul = $this->ConsultaMovVenta($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$total_total=0;
			$total_totalnograb=0;
			$total_baseimp=0;
			$total_porcimp=0;
			$total_monimp=0;
			$total_ivaret=0;
			$total_ivaper=0;
			$total_monimp_general=0;
			$total_monimp_reducido=0;
			$total_monimp_adicional=0;
			$total_monimp_exento=0;
			$total_monimp_exonerado=0;
			$total_monimp_exportacion=0;
			$total_basimp_general=0;
			$total_basimp_reducido=0;
			$total_basimp_adicional=0;
			$total_basimp_exento=0;
			$total_basimp_exonerado=0;
			$total_basimp_exportacion=0;			
			$total_ivaret_general=0;
			$total_ivaret_reducido=0;
			$total_ivaret_adicional=0;
			$total_ivaret_exento=0;
			$total_ivaret_exonerado=0;
			$total_ivaret_exportacion=0;
						
			foreach($resul as $datosFila){					
					
										
					$prop['criterio']='por_id';
					$prop['id_fact']=$datosFila['id_fact'];
					$RsFact = $this->consulta_facturas($prop);
					if($RsFact===false){return false;}
					if(!$RsFact['rs']->RecordCount()){
						$mensaje = ' No se encontraron los datos del Documento: Tipo:'.$datosFila['id_doc'].'  Número: '.$datosFila['id_doc'];
						$this->io_mensajes->message($mensaje);	
						return false;
					}					
					
					if($datosFila['codtipmov']=='REGFAC'){
						$datosFila['ivaret'] = $this->BuscarMontoRetencionesIvaFact($datosFila);
						if($datosFila['ivaret']===false){return false;}					
						$datosFila['ivaper'] = 	$datosFila['monimp']-$datosFila['ivaret'];
					}
									
					$DatosFac = $this->FormatDatosFactPresent($RsFact['rs']->fields);
					$total_total += $datosFila['total']/$this->TasaCambio;
					$total_totalnograb += $datosFila['totalnograb']/$this->TasaCambio;
					$total_baseimp += $datosFila['baseimp']/$this->TasaCambio;
					$total_monimp += $datosFila['monimp']/$this->TasaCambio;
					$total_ivaret += $datosFila['ivaret']/$this->TasaCambio;
					$total_ivaper += $datosFila['ivaper']/$this->TasaCambio;
					
					if($datosFila['tipoiva']==1){$total_monimp_general += $datosFila['monimp']/$this->TasaCambio; $total_basimp_general += $datosFila['baseimp']/$this->TasaCambio;}
					if($datosFila['tipoiva']==2){$total_monimp_reducido += $datosFila['monimp']/$this->TasaCambio; $total_basimp_reducido += $datosFila['baseimp']/$this->TasaCambio;}
					if($datosFila['tipoiva']==3){$total_monimp_adicional += $datosFila['monimp']/$this->TasaCambio; $total_basimp_adicional += $datosFila['baseimp']/$this->TasaCambio;}
					
					$filas .= $this->FilaRepLibVent($datosFila,$DatosFac);			
			}
						
			$totales['total_total'] = number_format($total_total,2,',','.');	
            $totales['total_totalnograb'] = number_format($total_totalnograb,2,',','.');
			$totales['total_baseimp'] = number_format($total_baseimp,2,',','.');
			$totales['total_monimp'] = number_format($total_monimp,2,',','.');
			$totales['total_ivaret'] = number_format($total_ivaret,2,',','.');
			$totales['total_ivaper'] = number_format($total_ivaper,2,',','.');	
			
			$totales['total_monimp_general'] = $total_monimp_general;	
			$totales['total_monimp_reducido'] = $total_monimp_reducido;	
			$totales['total_monimp_adicional'] = $total_monimp_adicional;
			$totales['total_monimp_exento'] = 0;	
			$totales['total_monimp_exonerado'] = $total_monimp_exonerado;	
			$totales['total_monimp_exportacion'] = $total_monimp_exportacion;
				
			$totales['total_basimp_general'] = $total_basimp_general;	
			$totales['total_basimp_reducido'] = $total_basimp_reducido;	
			$totales['total_basimp_adicional'] = $total_basimp_adicional;
			$totales['total_basimp_exento'] = $total_totalnograb;	
			$totales['total_basimp_exonerado'] = $total_basimp_exonerado;	
			$totales['total_basimp_exportacion'] = $total_basimp_exportacion;	
			
			$totales['total_ivaret_general'] = $total_ivaret_general;	
			$totales['total_ivaret_reducido'] = $total_ivaret_reducido;	
			$totales['total_ivaret_adicional'] = $total_ivaret_adicional;
			$totales['total_ivaret_exento'] = 0;	
			$totales['total_ivaret_exonerado'] = $total_ivaret_exonerado;	
			$totales['total_ivaret_exportacion'] = $total_ivaret_exportacion;
			
			$totales['total_total_monimp'] = $totales['total_monimp_general']+$totales['total_monimp_reducido']+$totales['total_monimp_adicional']+
			                                 $totales['total_monimp_exento']+$totales['total_monimp_exonerado']+$totales['total_monimp_exportacion'];	
			$totales['total_total_basimp'] = $totales['total_basimp_general']+$totales['total_basimp_reducido']+$totales['total_basimp_adicional']+
			                                 $totales['total_basimp_exento']+$totales['total_basimp_exonerado']+$totales['total_basimp_exportacion'];	
			$totales['total_total_ivaret'] = $totales['total_ivaret_general']+$totales['total_ivaret_reducido']+$totales['total_ivaret_adicional']+
			                                 $totales['total_ivaret_exento']+$totales['total_ivaret_exonerado']+$totales['total_ivaret_exportacion'];
					
			$reporte = $this->EncabezadoRepLibVent().$filas.$this->FinTablaRepLibVent($totales);
			$this->HTMLTotalesRepLibVent=$this->TotalesRepLibVent($totales);
			if($this->HTMLTotalesRepLibVent===false){return false;}	
					
			return $reporte;
	
	}
	
	
	function ConsultaMovVenta($opciones=array()){	
			
			switch($opciones['criterio']){
				
				case 'por_id';
					switch($this->codtipmov){
					
							case 'REGFAC':
								$iddoc = $this->id_fact;
								$criterio .= " AND m.iddoc='".$iddoc."' AND m.codtipmov='".$this->codtipmov."' ";
								break;
								
							case 'ANUFAC':
								 $iddoc = $this->id_fact;
								 $criterio .= " AND m.iddoc='".$iddoc."' AND m.codtipmov='".$this->codtipmov."' ";
								 break;
								 
							case 'NOTDEB':	 
							case 'NOTCRE':
								 $iddoc = $this->id_doc;
								 $criterio .= " AND m.iddoc='".$iddoc."' AND m.codtipmov='".$this->codtipmov."' ";
								 break;
					
					}
					break;
				
				case 'por_fact';
					$criterio .= " AND m.id_fact='".$this->id_fact."' ";
					break;
				
				case 'por_listado';
					 
					 if($opciones['fecfact_d']){
						if($opciones['fecfact_h'] == ''){$opciones['fecfact_h'] = $opciones['fecfact_d'];}
						$criterio .= " AND m.fecmov BETWEEN '".$this->io_conexiones->formatea_fecha_bd($opciones['fecfact_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($opciones['fecfact_h'])."'  ";
					 }
					 if($opciones['fecmov_d']){$criterio .= " AND m.fecmov BETWEEN '".$opciones['fecmov']."' AND '".$opciones['fecmov']."' ";}	
					 if($opciones['codtipmov']){$criterio .= " AND m.codtipmov='".$opciones['codtipmov']."' ";}
					 break;
				
			}
			
			$ls_sql = " SELECT *
			            FROM cxc_movimientos m
						WHERE m.codemp='".$this->ls_codemp."' 
						".$criterio." 
						 ORDER BY fecmov,idmov 
						";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->rs_data==false)
			{
				
				$metodo = 'ConsultaCargos';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return $this->rs_data;
	}
	
	
	function ConfPresentMoneda($datos=array()){
			
			if(!$datos['denmon'] or !$datos['abrmon'])
			{				
				$mensaje = 'ERROR-> VALIDACIÓN DE DATOS: Faltan la datos de la moneda para configurar la conversión';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			if($datos['abrmon']=='E'){$datos['abrmon']='€';}
			$this->denmon=$datos['denmon'];
			$this->abrmon=$datos['abrmon'];
			
			if($this->CargarMonedaLocal){$this->TasaCambio=1;}
			$this->TxtMoneda = ($this->MonedaExtranjera and !$this->CargarMonedaLocal)?'('.$this->abrmon.')':'';
			$this->TxtTasaCambio = ($this->MonedaExtranjera and !$this->CargarMonedaLocal)?'<b>Tasa de Cambio:</b> '.number_format($datos['tascam'],2,',','.'):'';
			
			return true;
	}
	
	
	
	function EncabezadoRepLisFactExcel($parametro=array()){	
	    
		$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
		$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)
		$this->PHPExcel->ColorLinea('A','J','FFEEEEEE');
		$this->PHPExcel->CeldaTitulo('D','LISTADO DE FACTURAS '.$TxtMoneda,false,20,'left','FFEEEEEE',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->CeldaTitulo('A','N°',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('B','FECHA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('C','CLIENTE',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('D','CONCEPTO',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('E','COND',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('F','MON',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('G','TASA CAMB.',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('H','SUB TOT'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('I','IVA'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('J','TOTAL'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->nroFila++;					
		return true; 
	}
	
	function FinTablaRepLisFactExcel($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
			$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			
			$datos['total_subtot'] = $datos['total_subtot']/$this->TasaCambio;
			$datos['total_iva'] = $datos['total_iva']/$this->TasaCambio;
			$datos['total_total'] = $datos['total_total']/$this->TasaCambio;
			
			$this->PHPExcel->CeldaTitulo('G','TOTALES:'.$TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('H',$datos['total_subtot'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('I',$datos['total_iva'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('J',$datos['total_total'],true,0,'number','FFCCCCCC');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}
	
	function FilaRepLisFactExcel($datos){			
			
			$datos['abrmon'] =$datos['abrmon']=='€'?'EURO':$datos['abrmon'];		
			$this->PHPExcel->CeldaTitulo('A',$datos['numfact'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('B',$datos['fecfact'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('C',$datos['nombre_cliente'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('D',$datos['descripfact'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('E',$datos['desccondpago'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('F',$datos['abrmon'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('G',$datos['tascam'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('H',$this->formato_numerico_us($datos['subtot']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('I',$this->formato_numerico_us($datos['iva']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('J',$this->formato_numerico_us($datos['total']),true,0,'number');
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
	
	
	function RepLisFactExcel($datos=array()){
						
			$datos['criterio']='por_listado';
			$resul = $this->consulta_facturas($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return 0;}
			
			$total=0;
			$total['total_subtot']=0;
			$total['total_iva']=0;
			$total['total_total']=0;
			
			$resp = $this->EncabezadoRepLisFactExcel();
			if($resp===false){return false;}
					
			foreach($resul['rs'] as $datosFila){
				
				$totales['total_subtot'] += $datosFila['subtot'];
				$totales['total_iva'] += $datosFila['iva'];
				$totales['total_total'] += $datosFila['total'];
				
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				
				$DatosFac = $this->FormatDatosFactPresent($datosFila);
				
				$resp=$this->FilaRepLisFactExcel($DatosFac);
				if($resp===false){return false;}			
			}
			
			$this->TotalRepLisfact['total_subtot'] += $totales['total_subtot'];
			$this->TotalRepLisfact['total_iva'] += $totales['total_iva'];
			$this->TotalRepLisfact['total_total'] += $totales['total_total'];
			
			$resp=$this->FinTablaRepLisFactExcel($totales);									
			if($resp===false){return false;}
						
			return true;
	
	}
	
	function TotalesRepLisFactMultimonExcel($datos=array()){	
			
			$datos['total_subtot'] = $this->TotalRepLisfact['total_subtot'];
			$datos['total_iva'] = $this->TotalRepLisfact['total_iva'];
			$datos['total_total'] = $this->TotalRepLisfact['total_total'];
						
			$this->PHPExcel->CeldaTitulo('G','TOTALES('.$this->AbrMonDef.'):',true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('H',$datos['total_subtot'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('I',$datos['total_iva'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('J',$datos['total_total'],true,0,'number','FFFFFFDD',true);
		    $this->PHPExcel->nroFila++;	
			return true; 
			
	}
		
	function RepLisFactMultimonExcel($datos=array()){
			
			if(!$this->RepMultiMon){
				$resp = $this->RepLisFactExcel($datos);
				if($resp===false){return false;}
				return true;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'VALIDACIÓN DE DATOS: No se encontraron facturas !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
			
			$this->TotalRepLisfact['total_subtot'] = 0;
			$this->TotalRepLisfact['total_iva'] = 0;
			$this->TotalRepLisfact['total_total'] = 0;
			
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$resp = $this->ConfPresentMoneda($moneda);
				if($resp===false){return false;}							
				$resp = $this->RepLisFactExcel($datos);	
				if($resp===false){return false;}	
				$this->PHPExcel->nroFila++;	
			}
			
			$resp=$this->TotalesRepLisFactMultimonExcel();
			if($resp===false){return false;}
			
			return true;
					
	}
	
	function EncabezadoRepExcel($titulo){
			$this->PHPExcel->CeldaTitulo('A','FECHA Y HORA:',false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',date('d/m/Y').' - '.date('H:i'),false,10,'left','FFFFFFFF',false);
			$this->PHPExcel->nroFila++;
			$this->PHPExcel->CeldaTitulo('A','USUARIO:',false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$_SESSION["la_logusr"],false,10,'left','FFFFFFFF',false);
			$this->PHPExcel->nroFila++;
			$this->PHPExcel->CeldaTitulo('A','REPORTE:',false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$titulo,false,10,'left','FFFFFFFF',false);
			$this->PHPExcel->nroFila++;
			$this->PHPExcel->nroFila++;	
	}
	
	function EncabezadoRepProdFactExcel($parametro=array()){		
				
		$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
		$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)
		$this->PHPExcel->ColorLinea('A','P','FFEEEEEE');
		$this->PHPExcel->CeldaTitulo('D','PRODUCTOS '.$TxtMoneda,false,20,'left','FFEEEEEE',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->CeldaTitulo('A','FACTURA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('B','FECHA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('C','CLIENTE',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('D','RIF',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('E','TIP',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('F','COD DET',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('G','DENOM',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('H','MON',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('I','TASA CAM.',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('J','%IVA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('K','CANT.',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('L','PRECIO',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('M','SUB TOT'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('N','IVA'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('O','NO GRAV'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('P','NETO'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->nroFila++;					
		return true; 
		
	}
	
	function FinTablaRepProdFactExcel($datos=array()){
		
			$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
			$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			
			$this->PHPExcel->CeldaTitulo('J','TOTALES:'.$TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('K',$datos['total_cantidad_detalle'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('L',$datos['total_precio_detalle'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('M',$datos['total_subtot_detalle'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('N',$datos['total_iva_detalle'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('O',$datos['total_no_grav'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('P',$datos['total_neto_detalle'],true,0,'number','FFCCCCCC');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}
	
	function FilaRepProdFactExcel($datos){			
			
			$datos = $this->FormatDatosFactPresent($datos);
			$datos = $this->formatear_detalle_grilla($datos);
			$datos['no_grav'] = $datos['no_grav']/$this->TasaCambio;
			$datos['abrmon'] =$datos['abrmon']=='E'?'EURO':$datos['abrmon'];		
			$this->PHPExcel->CeldaTitulo('A',$datos['numfact'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('B',$datos['fecfact'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('C',$datos['nombre_cliente'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('D',$datos['rif'],true,0,'center');				
			$this->PHPExcel->CeldaTitulo('E',$datos['id_tipodetalle'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('F'," ".$datos['coddetalle'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('G',$datos['dendetalle'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('H',$datos['abrmon'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('I',$datos['tascam'],true,0,'number');			
			$this->PHPExcel->CeldaTitulo('J',$this->formato_numerico_us($datos['porciva']),true,0,'number');			
			$this->PHPExcel->CeldaTitulo('K',$this->formato_numerico_us($datos['cantidad_detalle']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('L',$this->formato_numerico_us($datos['precio_detalle']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('M',$this->formato_numerico_us($datos['subtot_detalle']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('N',$this->formato_numerico_us($datos['iva_detalle']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('O',$this->formato_numerico_us($datos['no_grav']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('P',$this->formato_numerico_us($datos['neto_detalle']),true,0,'number');
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
	
	
	function RepProdFactExcel($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->consulta_detalles_fact($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return '';}
			
			$nro=0;
			
			$totales['total_cantidad_detalle']=0;
			$totales['total_precio_detalle']=0;
			$totales['total_iva_detalle']=0;
			$totales['total_neto_detalle']=0;
			
			$resp = $this->EncabezadoRepProdFactExcel();
			if($resp===false){return false;}
			
			foreach($resul['rs'] as $datosFila){
			
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				$total_cantidad_detalle += $datosFila['cantidad_detalle'];				
				$total_iva_detalle += $datosFila['iva_detalle'];
				$total_neto_detalle += $datosFila['neto_detalle'];
				$datosFila['no_grav'] = (!$datosFila['iva_detalle'])?$datosFila['neto_detalle']:0;
				$total_no_grav += $datosFila['no_grav'];
				$datosFila['subtot_detalle'] = ($datosFila['precio_detalle']*$datosFila['cantidad_detalle']);
				$total_subtot_detalle += $datosFila['subtot_detalle'];
				
				$resp=$this->FilaRepProdFactExcel($datosFila);
				if($resp===false){return false;}	
				
			}
			
			$this->TotalRepProdfact['total_cantidad_detalle'] += $total_cantidad_detalle;
			$this->TotalRepProdfact['total_iva_detalle'] += $total_iva_detalle;
			$this->TotalRepProdfact['total_neto_detalle'] += $total_neto_detalle;
			$this->TotalRepProdfact['total_no_grav'] += $total_no_grav;
			$this->TotalRepProdfact['total_subtot_detalle'] += $total_subtot_detalle;
						
			$totales['total_cantidad_detalle'] = $total_cantidad_detalle;			
			$totales['total_precio_detalle']='NO APLICA';
			$totales['total_iva_detalle'] = $total_iva_detalle/$this->TasaCambio;
			$totales['total_neto_detalle'] = $total_neto_detalle/$this->TasaCambio;	
			$totales['total_no_grav'] = $total_no_grav/$this->TasaCambio;
			$totales['total_subtot_detalle'] = $total_subtot_detalle/$this->TasaCambio;
							
			$resp=$this->FinTablaRepProdFactExcel($totales);									
			if($resp===false){return false;}
						
			return true;
	
	}
	
	function TotalesRepLisProdMultimonExcel($datos=array()){
						
			$this->PHPExcel->CeldaTitulo('J','TOTALES('.$this->AbrMonDef.'):',true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('K',$this->TotalRepProdfact['total_cantidad_detalle'],true,0,'number','FFFFFFDD');
			$this->PHPExcel->CeldaTitulo('L',$this->TotalRepProdfact['total_precio_detalle'],true,0,'number','FFFFFFDD');
			$this->PHPExcel->CeldaTitulo('M',$this->TotalRepProdfact['total_subtot_detalle'],true,0,'number','FFFFFFDD');
			$this->PHPExcel->CeldaTitulo('N',$this->TotalRepProdfact['total_iva_detalle'],true,0,'number','FFFFFFDD');
			$this->PHPExcel->CeldaTitulo('O',$this->TotalRepProdfact['total_no_grav'],true,0,'number','FFFFFFDD');
			$this->PHPExcel->CeldaTitulo('P',$this->TotalRepProdfact['total_neto_detalle'],true,0,'number','FFFFFFDD');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}
	
	function RepProdFactExcelMultimon($datos=array()){
			
			$this->TotalRepProdfact['total_cantidad_detalle'] = 0;
			$this->TotalRepProdfact['total_iva_detalle'] = 0;
			$this->TotalRepProdfact['total_neto_detalle'] = 0;
			$this->TotalRepProdfact['total_no_grav'] = 0;
			$this->TotalRepProdfact['total_subtot_detalle'] = 0;
			$this->TotalRepProdfact['total_neto_detalle'] = 0;
			
			if(!$this->RepMultiMon){
			    $this->CargarMonedaLocal=1;
				$infoRep = $this->RepProdFactExcel($datos);
				return $infoRep;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'ERROR-> VALIDACIÓN DE DATOS: No se encontraron facturas !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
								
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$resp = $this->ConfPresentMoneda($moneda);
				if($resp===false){return false;}
				$infoRep = $this->RepProdFactExcel($datos);	
				if($infoRep===false){return false;}	
				$this->PHPExcel->nroFila++;		
			}
			
			$resp=$this->TotalesRepLisProdMultimonExcel();
			if($resp===false){return false;}
			
			return true;
					
	}
	
	
	function EncabezadoRepLibVentExcel($parametro=array()){		
	
		$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
		$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)
		$this->PHPExcel->ColorLinea('N','P','FFEEEEEE');		
		$this->PHPExcel->CeldaTitulo('N','VENTAS INTERNAS O EXPORTACIONES GRAVADAS '.$TxtMoneda,false,10,'left','FFEEEEEE',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->CeldaTitulo('A','N°',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('B','Fecha',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('C','Rif',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('D','Nombre',false,30,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('E','N° Plan. Exp',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('F','N° Fact',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('G','N° Cont',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('H','N° ND',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('I','N° NC',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('J','Tipo',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('K','Fact Afec.',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('L','Total + iva',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('M','Vent int no grav'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('N','Baseimp'.$TxtMoneda,false,20,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('O','% Alicuota'.$TxtMoneda,false,20,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('P','Imp Iva'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('Q','Iva Rete'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('R','Iva Perc'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->nroFila++;					
		return true; 
	}
	
	function FinTablaRepLibVentExcel($datos=array()){
		
			$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
			$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			
			$this->PHPExcel->CeldaTitulo('K','TOTALES:'.$TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('L',$datos['total_total'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('M',$datos['total_totalnograb'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('N',$datos['total_baseimp'],false,20,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('O','N/A',false,20,'center','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('P',$datos['total_monimp'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('Q',$datos['total_ivaret'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('R',$datos['total_ivaper'],true,0,'number','FFCCCCCC');
		    $this->PHPExcel->nroFila++;	
			return true;
			 
	}
	
	function FilaRepLibVentExcel($datos,$datosFact){
		
			$datos['fecmov']=$this->io_conexiones->formatea_fecha_normal($datos['fecmov']);		
			$this->PHPExcel->CeldaTitulo('A',$datos['idmov'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('B',$datos['fecmov'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('C',$datosFact['rif_completo'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('D',$datosFact['nombre_cliente'],false,30,'left');				
			$this->PHPExcel->CeldaTitulo('E',$datos['nroplaexp'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('F'," ".$datos['numfac'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('G',$datos['numcont'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('H',$datos['nrond'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('I',$datos['nronc'],true,0,'center');			
			$this->PHPExcel->CeldaTitulo('J',$datos['codtipmov'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('K',$datos['nrofacafec'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('L',$datos['total']/$this->TasaCambio,true,0,'number');
			$this->PHPExcel->CeldaTitulo('M',$datos['totalnograb']/$this->TasaCambio,true,0,'number');
			$this->PHPExcel->CeldaTitulo('N',$datos['baseimp']/$this->TasaCambio,false,20,'number');
			$this->PHPExcel->CeldaTitulo('O',$datos['porcimp'],false,20,'number');
			$this->PHPExcel->CeldaTitulo('P',$datos['monimp']/$this->TasaCambio,true,0,'number');
			$this->PHPExcel->CeldaTitulo('Q',$datos['ivaret']/$this->TasaCambio,true,0,'number');
			$this->PHPExcel->CeldaTitulo('R',$datos['ivaper']/$this->TasaCambio,true,0,'number');
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
	
	
	function TotalesRepLibVentExcel($datos=array()){
		
			$this->PHPExcel->CeldaTitulo('B','Base Imponible '.$this->TxtMoneda,true,0,'center','FFDDDDDD',true);
			$this->PHPExcel->CeldaTitulo('C','Débito Fiscal '.$this->TxtMoneda,true,0,'center','FFDDDDDD',true);
			$this->PHPExcel->CeldaTitulo('D','Iva Retenido '.$this->TxtMoneda,false,30,'center','FFDDDDDD',true);	
			$this->PHPExcel->nroFila++;	
			$this->PHPExcel->CeldaTitulo('A','Total Alicuota General'.$this->TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$datos['total_basimp_general'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('C',$datos['total_monimp_general'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('D',$datos['total_ivaret_general'],false,30,'number');
			$this->PHPExcel->nroFila++;	
			$this->PHPExcel->CeldaTitulo('A','Total Alicuota Reducida'.$this->TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$datos['total_basimp_reducido'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('C',$datos['total_monimp_reducido'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('D',$datos['total_ivaret_reducido'],false,30,'number');
			$this->PHPExcel->nroFila++;	
			$this->PHPExcel->CeldaTitulo('A','Total Alicuota General + Adicional'.$this->TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$datos['total_basimp_adicional'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('C',$datos['total_monimp_adicional'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('D',$datos['total_ivaret_adicional'],false,30,'number');
			$this->PHPExcel->nroFila++;	
			$this->PHPExcel->CeldaTitulo('A','Total Exentos'.$this->TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$datos['total_basimp_exento'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('C',$datos['total_monimp_exento'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('D',$datos['total_ivaret_exento'],false,30,'number');
			$this->PHPExcel->nroFila++;	
			$this->PHPExcel->CeldaTitulo('A','Total Exonerados'.$this->TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$datos['total_basimp_exonerado'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('C',$datos['total_monimp_exonerado'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('D',$datos['total_ivaret_exonerado'],false,30,'number');
			$this->PHPExcel->nroFila++;	
			$this->PHPExcel->CeldaTitulo('A','Total Exportación'.$this->TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$datos['total_basimp_exportacion'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('C',$datos['total_monimp_exportacion'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('D',$datos['total_ivaret_exportacion'],false,30,'number');
			$this->PHPExcel->nroFila++;	
			$this->PHPExcel->CeldaTitulo('A','TOTALES'.$this->TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('B',$datos['total_total_basimp'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('C',$datos['total_total_monimp'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('D',$datos['total_total_ivaret'],false,30,'number','FFFFFFDD',true);
			$this->PHPExcel->nroFila++;	
			return true;
	}
	
	function RepLibVentExcel($datos=array()){
			/*
			if(!$datos['id_fact'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contable				           			    
						   <br><b>METODO:</b> RepLibVent ';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			*/
			//$this->numfact=$datos['numfact'];
			//$this->id_fact=$datos['id_fact'];
			$this->PHPExcel->getDefaultStyle()->getFont()->setSize(8);
			$datos['criterio'] = 'por_listado';			
			$resul = $this->ConsultaMovVenta($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$total_total=0;
			$total_totalnograb=0;
			$total_baseimp=0;
			$total_porcimp=0;
			$total_monimp=0;
			$total_ivaret=0;
			$total_ivaper=0;
			$total_monimp_general=0;
			$total_monimp_reducido=0;
			$total_monimp_adicional=0;
			$total_monimp_exento=0;
			$total_monimp_exonerado=0;
			$total_monimp_exportacion=0;
			$total_basimp_general=0;
			$total_basimp_reducido=0;
			$total_basimp_adicional=0;
			$total_basimp_exento=0;
			$total_basimp_exonerado=0;
			$total_basimp_exportacion=0;			
			$total_ivaret_general=0;
			$total_ivaret_reducido=0;
			$total_ivaret_adicional=0;
			$total_ivaret_exento=0;
			$total_ivaret_exonerado=0;
			$total_ivaret_exportacion=0;
			$this->EncabezadoRepLibVentExcel();			
			foreach($resul as $datosFila){					
					
										
					$prop['criterio']='por_id';
					$prop['id_fact']=$datosFila['id_fact'];
					$RsFact = $this->consulta_facturas($prop);
					if($RsFact===false){return false;}
					if(!$RsFact['rs']->RecordCount()){
						$mensaje = ' No se encontraron los datos del Documento: Tipo:'.$datosFila['id_doc'].'  Número: '.$datosFila['id_doc'];
						$this->io_mensajes->message($mensaje);	
						return false;
					}					
					if($datosFila['codtipmov']=='REGFAC'){
						$datosFila['ivaret'] = $this->BuscarMontoRetencionesIvaFact($datosFila);
						if($datosFila['ivaret']===false){return false;}					
						$datosFila['ivaper'] = 	$datosFila['monimp']-$datosFila['ivaret'];
					}
					$DatosFac = $this->FormatDatosFactPresent($RsFact['rs']->fields);
					$total_total += $datosFila['total']/$this->TasaCambio;
					$total_totalnograb += $datosFila['totalnograb']/$this->TasaCambio;
					$total_baseimp += $datosFila['baseimp']/$this->TasaCambio;
					$total_monimp += $datosFila['monimp']/$this->TasaCambio;
					$total_ivaret += $datosFila['ivaret']/$this->TasaCambio;
					$total_ivaper += $datosFila['ivaper']/$this->TasaCambio;
					
					if($datosFila['tipoiva']==1){$total_monimp_general += $datosFila['monimp']/$this->TasaCambio; $total_basimp_general += $datosFila['baseimp']/$this->TasaCambio;}
					if($datosFila['tipoiva']==2){$total_monimp_reducido += $datosFila['monimp']/$this->TasaCambio; $total_basimp_reducido += $datosFila['baseimp']/$this->TasaCambio;}
					if($datosFila['tipoiva']==3){$total_monimp_adicional += $datosFila['monimp']/$this->TasaCambio; $total_basimp_adicional += $datosFila['baseimp']/$this->TasaCambio;}
					
					$resp=$this->FilaRepLibVentExcel($datosFila,$DatosFac);	
					if($resp===false){return false;}
		
			}
						
			$totales['total_total'] = $total_total;	
            $totales['total_totalnograb'] = $total_totalnograb;
			$totales['total_baseimp'] = $total_baseimp;
			$totales['total_monimp'] = $total_monimp;
			$totales['total_ivaret'] = $total_ivaret;
			$totales['total_ivaper'] = $total_ivaper;	
			
			$totales['total_monimp_general'] = $total_monimp_general;	
			$totales['total_monimp_reducido'] = $total_monimp_reducido;	
			$totales['total_monimp_adicional'] = $total_monimp_adicional;
			$totales['total_monimp_exento'] = 0;	
			$totales['total_monimp_exonerado'] = $total_monimp_exonerado;	
			$totales['total_monimp_exportacion'] = $total_monimp_exportacion;
				
			$totales['total_basimp_general'] = $total_basimp_general;	
			$totales['total_basimp_reducido'] = $total_basimp_reducido;	
			$totales['total_basimp_adicional'] = $total_basimp_adicional;
			$totales['total_basimp_exento'] = $total_totalnograb;	
			$totales['total_basimp_exonerado'] = $total_basimp_exonerado;	
			$totales['total_basimp_exportacion'] = $total_basimp_exportacion;	
			
			$totales['total_ivaret_general'] = $total_ivaret_general;	
			$totales['total_ivaret_reducido'] = $total_ivaret_reducido;	
			$totales['total_ivaret_adicional'] = $total_ivaret_adicional;
			$totales['total_ivaret_exento'] = 0;	
			$totales['total_ivaret_exonerado'] = $total_ivaret_exonerado;	
			$totales['total_ivaret_exportacion'] = $total_ivaret_exportacion;
			
			$totales['total_total_monimp'] = $totales['total_monimp_general']+$totales['total_monimp_reducido']+$totales['total_monimp_adicional']+
			                                 $totales['total_monimp_exento']+$totales['total_monimp_exonerado']+$totales['total_monimp_exportacion'];	
			$totales['total_total_basimp'] = $totales['total_basimp_general']+$totales['total_basimp_reducido']+$totales['total_basimp_adicional']+
			                                 $totales['total_basimp_exento']+$totales['total_basimp_exonerado']+$totales['total_basimp_exportacion'];	
			$totales['total_total_ivaret'] = $totales['total_ivaret_general']+$totales['total_ivaret_reducido']+$totales['total_ivaret_adicional']+
			                                 $totales['total_ivaret_exento']+$totales['total_ivaret_exonerado']+$totales['total_ivaret_exportacion'];
			
			$resp=$this->FinTablaRepLibVentExcel($totales);									
			if($resp===false){return false;}
			
			$this->TotalesRepLibVentExcel($totales);
								
			return true;
	
	}
	
	function ConsultaFormaPago($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " WHERE codforpag ".$this->postgres_ilike."LIKE('%".$opciones['codforpag']."%')
									  AND denforpag  ".$this->postgres_ilike."LIKE('%".$opciones['denforpag']."%')  
									  ORDER BY denforpag";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_formapago ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaFormaPago';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboFormPag($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbformpag';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['codforpag']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['denforpag'];  $id_carga = $opciones['codforpag'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaFormaPago($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["codforpag"].'" '.$selected.'>'.$fila["denforpag"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function ConsultaBancosScb($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " WHERE codban ".$this->postgres_ilike."LIKE('%".$opciones['codforpag']."%')
									  AND nomban  ".$this->postgres_ilike."LIKE('%".$opciones['denforpag']."%')  
									  ORDER BY nomban";
					break;			
		}
								   
		$query_rs = "SELECT * FROM scb_banco ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaBancosScb';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function ConsultaCtaBcoScb($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " WHERE codban ".$this->postgres_ilike."LIKE('%".$opciones['codban']."%')
									  AND ctaban  ".$this->postgres_ilike."LIKE('%".$opciones['ctaban']."%')
									  AND ctabanext  ".$this->postgres_ilike."LIKE('%".$opciones['ctabanext']."%')  
									  ORDER BY codban,ctaban";
					break;			
		}
								   
		$query_rs = "SELECT * FROM scb_ctabanco ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaCtaBcoScb';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function ConsultaBancosCxc($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " WHERE codban ".$this->postgres_ilike."LIKE('%".$opciones['codforpag']."%')
									  AND nomban  ".$this->postgres_ilike."LIKE('%".$opciones['denforpag']."%')  
									  ORDER BY nomban";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_bancos ".$sql_criterio;
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'ConsultaBancosCxc';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboBancosCxc($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbbancxc';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['codban']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['nomban'];  $id_carga = $opciones['codban'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaBancosCxc($opciones);
				
				$combo = '<select style="width:150px" name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["codban"].'" '.$selected.'>('.$fila["codban"].') - '.$fila["nomban"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;

	}
	
		
	function BuscarMontoTotalFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto total de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoTotalFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT total 
				              FROM cxc_factura
							 WHERE id_fact='".$datos['id_fact']."'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$metodo = 'BuscarMontoTotalFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotFact = $this->rs_data->fields['total']?$this->rs_data->fields['total']:0;
				
				return $this->MonTotFact;
	}
	
	function BuscarMontoTotalAnt($datos=array()){
							
				if(!$datos['idant']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto total del anticipo. 				           			    
						<br><b>METODO:</b> BuscarMontoTotalAnt ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT monant 
				              FROM cxc_anticipos
							 WHERE idant='".$datos['idant']."'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$metodo = 'BuscarMontoTotalAnt';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotAnt = $this->rs_data->fields['monant']?$this->rs_data->fields['monant']:0;
				
				return $this->MonTotAnt;
	}
	
	
	function BuscarMontoCobradoFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto cobrado de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoCobradoFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT sum(monmovcob) as moncobtot 
				              FROM cxc_dt_movcobro 
							 WHERE id_doc='".$datos['id_fact']."'
							   AND tipdoc='FACT' 
							   AND estmovcob!='ANU'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$metodo = 'BuscarMontoCobradoFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotCob = $this->rs_data->fields['moncobtot']?$this->rs_data->fields['moncobtot']:0;
				
				return $this->MonTotCob;
	}
	
	function BuscarCreditosFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar los créditos de la factura. 				           			    
						<br><b>METODO:</b> BuscarCreditosFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT COALESCE(sum(monmovdoc),0) AS creditos
							FROM cxc_dt_movdoc 
							WHERE codtipdoc='NC'
							AND tipdocapl='FACT'
							AND id_docapl='".$datos['id_fact']."'
							AND estmovdoc!='ANU'
					     ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$metodo = 'BuscarCreditosFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$totcred = $this->rs_data->fields['creditos']?$this->rs_data->fields['creditos']:0;
				
				return $totcred;
	}
	
	function BuscarMontoCobradoAnt($datos=array()){
							
				if(!$datos['id_doc']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto cobrado del anticipo. 				           			    
						<br><b>METODO:</b> BuscarMontoCobradoAnt ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT sum(monmovcob) as moncobtot 
				              FROM cxc_dt_movcobro 
							 WHERE id_doc='".$datos['id_doc']."'
							   AND tipdoc='ANTI' 
							   AND estmovcob!='ANU'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoCobradoAnt';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotCob = $this->rs_data->fields['moncobtot']?$this->rs_data->fields['moncobtot']:0;
				
				return $this->MonTotCob;
	}
	
	function BuscarMontoRetencionesFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de las retenciones de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoRetencionesFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT sum(monret) as monmtotret 
				              FROM cxc_cmp_ret 
							 WHERE id_doc='".$datos['id_fact']."'
							   AND cmpanu='0' 
							   AND tipdoc='FACT'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$metodo = 'BuscarMontoRetencionesFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotRet = $this->rs_data->fields['monmtotret']?$this->rs_data->fields['monmtotret']:0;
				
				return $this->MonTotRet;
	}
	
	function BuscarMontoRetencionesIvaFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de las retenciones de iva de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoRetencionesIvaFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = "  SELECT sum(monret) as monmtotret             
							 FROM cxc_cmp_ret cmp
							 INNER JOIN sigesp_deducciones d ON d.codemp = cmp.codemp AND d.codded = cmp.codret
							 WHERE cmp.id_doc='".$datos['id_fact']."'
							   AND cmp.cmpanu='0' 
							   AND cmp.tipdoc='FACT'
							   AND d.iva=1
					      ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$metodo = 'BuscarMontoRetencionesFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotRet = $this->rs_data->fields['monmtotret']?$this->rs_data->fields['monmtotret']:0;
				
				return $this->MonTotRet;
	}
	
	function BuscarMontoRetencionesMovCob($datos=array()){
							
				if(!$datos['id_fact'] or !$datos['nromovcob']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de las retenciones del movimiento de cobro. 				           			    
						<br><b>METODO:</b> BuscarMontoRetencionesMovCob ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT sum(monret) as monmtotret 
				              FROM cxc_cmp_ret 
							 WHERE id_doc='".$datos['id_fact']."' 
							   AND nromovcob='".$datos['nromovcob']."'
							   AND cmpanu='0'						   
							   AND tipdoc='FACT'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$metodo = 'BuscarMontoRetencionesMovCob';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$MonTotRet = $this->rs_data->fields['monmtotret']?$this->rs_data->fields['monmtotret']:0;
				
				return $MonTotRet;
	}
	
	function ConsultaIngresosCaja($datos=array()){	
		$criterioSQL="";
		$campos=" * ";
		
		switch($datos['criterio']){
							  
			  case "por_numero":
			        $campos=" *,b.nomban as nombancli,be.nomban as nombanemp ";
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = ing.codforpag
					                  INNER JOIN cxc_esting ei ON ei.esting = ing.esting
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = ing.codemp 
									                              AND suc.codsuc = ing.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = ing.codemp 
																 AND caj.codsuc = ing.codsuc
																 AND caj.codcaj = ing.codcaj 
									  LEFT JOIN cxc_clientes c ON c.id_cliente = ing.id_cliente
									  LEFT JOIN sigesp_moneda mo ON ing.codmon = mo.codmon	
									  LEFT JOIN cxc_bancos b ON b.codban = ing.codbancli 
									  LEFT JOIN scb_banco be ON be.codemp = ing.codemp AND be.codban = ing.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = ing.codemp AND cbe.codban = ing.codban AND cbe.ctaban = ing.ctaban 							   
					                  WHERE ing.codemp='".$this->ls_codemp."' 
									    AND ing.codsuc='".$datos['codsuc']."' 
										AND ing.codcaj='".$datos['codcaj']."' 
										AND ing.nroing='".$datos['nroing']."' ";   
					break;
			  case "por_cliente":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = ing.codforpag
					                  INNER JOIN cxc_esting ei ON ei.esting = ing.esting
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = ing.codemp 
									                              AND suc.codsuc = ing.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = ing.codemp 
																 AND caj.codsuc = ing.codsuc
																 AND caj.codcaj = ing.codcaj
									  LEFT JOIN cxc_clientes c ON c.id_cliente = ing.id_cliente 
									  LEFT JOIN sigesp_moneda mo ON ing.codmon = mo.codmon	 	
									  LEFT JOIN cxc_bancos b ON b.codban = ing.codbancli 
									  LEFT JOIN scb_banco be ON be.codemp = ing.codemp AND be.codban = ing.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = ing.codemp AND cbe.codban = ing.codban AND cbe.ctaban = ing.ctaban 							   
					                  WHERE ing.codemp='".$this->ls_codemp."' 
									    AND ing.id_cliente='".$datos['id_cliente']."' 
									  ORDER BY ing.codsuc,ing.codcaj,ing.nroing ";   
					break;				   
			  
			  case "por_listado":
			  							
					if($datos['orden']==""){$columna='nombre_cliente';}
					if($datos['codcliente']){$criterioSQL .= " AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
					if($datos['nombre_cliente']){$criterioSQL .= " AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
					if($datos['numpririf']){$criterioSQL .= " AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
					if($datos['clasif_cliente']){$criterioSQL .= " AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
					if($datos['sc_cuenta']){$criterioSQL .= " AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
					if($datos['cedularesp']){$criterioSQL .= " AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
					if($datos['tipperrif']){$criterioSQL .= " AND c.tipperrif = '".$datos['tipperrif']."' ";}					
					if($datos['id_tipo_cliente']){$criterioSQL .= " AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
					if($datos['id_zona']){$criterioSQL .= " AND c.id_zona = '".$datos['id_zona']."' ";}
					if($datos['id_vend']){$criterioSQL .= " AND c.id_vend = '".$datos['id_vend']."' ";}
					if($datos['estclient']){$criterioSQL .= " AND c.estclient = '".$datos['estclient']."' ";}		
					if($datos['fecregcliente_d']){
						if($datos['fecregcliente_h'] == ''){$datos['fecregcliente_h'] = $datos['fecregcliente_d'];}
						$criterioSQL .= " AND c.fecregcliente BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_h'])."'  ";
					}	
					if($datos['nombreresp']){$criterioSQL .= " AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
					if($datos['nombre_pais']){$criterioSQL .= " AND despai ".$this->postgres_ilike."LIKE('%".$datos['nombre_pais']."%') ";}
					if($datos['entidad_federal']){$criterioSQL .= " AND desest ".$this->postgres_ilike."LIKE('%".$datos['entidad_federal']."%') ";}
					if($datos['municipio']){$criterioSQL .= " AND denmun ".$this->postgres_ilike."LIKE('%".$datos['municipio']."%') ";}
					if($datos['parroquia']){$criterioSQL .= " AND denpar ".$this->postgres_ilike."LIKE('%".$datos['parroquia']."%') ";}
					if($datos['cedularesp']){$criterioSQL .= " AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
					
					if($datos['fecing_d']){
						if($datos['fecing_h'] == ''){$datos['fecing_h'] = $datos['fecing_d'];}
						$criterioSQL .= " AND ing.fecing BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecing_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecing_h'])."'  ";
					}
											 
					if($datos['codsuc']){$criterioSQL .= " AND ing.codsuc = '".$datos['codsuc']."' ";}
					if($datos['codcaj']){$criterioSQL .= " AND ing.codcaj = '".$datos['codcaj']."' ";}
					if($datos['codmon']){$criterioSQL .= " AND ing.codmon = '".$datos['codmon']."' ";}					
					if($datos['codforpag']){$criterioSQL .= " AND ing.codforpag = '".$datos['codforpag']."' ";}
					if($datos['esting']){$criterioSQL .= " AND ing.esting = '".$datos['esting']."' ";}				
					if($datos['nroing']){$criterioSQL .= " AND ing.nroing = '".$datos['nroing']."' ";}					
					if($datos['moning']){
									
								if(!$datos['criterio_monto']){$datos['criterio_monto']='igual';}
								switch($datos['criterio_monto']){
										case 'igual':
											   $criterioSQL .= " AND ing.moning = '".$datos['moning']."' ";
											   break;							
										case 'mayor':
											   $criterioSQL .= " AND ing.moning > '".$datos['moning']."' ";
											   break;
										case 'menor':
											   $criterioSQL .= " AND ing.moning < '".$datos['moning']."' ";
											   break;					
								}
								
					}
					
										
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = ing.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = ing.codemp 
									                              AND suc.codsuc = ing.codsuc
									  INNER JOIN cxc_esting ei ON ei.esting = ing.esting															  
								      INNER JOIN cxc_cajas caj ON caj.codemp = ing.codemp 
																 AND caj.codsuc = ing.codsuc
																 AND caj.codcaj = ing.codcaj
									  LEFT JOIN cxc_clientes c ON c.id_cliente = ing.id_cliente 
									  LEFT JOIN sigesp_moneda mo ON ing.codmon = mo.codmon	 	
									  LEFT JOIN cxc_bancos b ON b.codban = ing.codbancli 
									  LEFT JOIN scb_banco be ON be.codemp = ing.codemp AND be.codban = ing.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = ing.codemp AND cbe.codban = ing.codban AND cbe.ctaban = ing.ctaban 							   
					                  WHERE ing.codemp='".$this->ls_codemp."' 									  
									  ".$criterioSQL." 
									  ORDER BY ing.codsuc,ing.codcaj,ing.nroing ";   
					break;			
		}
								   
		$query_rs = "SELECT ".$campos." FROM cxc_ingresos ing ".$sql_criterio;
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'ConsultaIngresosCaja';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function GenerarNroIngreso($datos=array()){
				
			$metodo = 'GenerarNroIngreso';
			$ls_sql=" SELECT nroing::integer FROM cxc_ingresos 
			           WHERE codemp = '".$this->ls_codemp."' 
					     AND codsuc = '".$datos['codsuc']."' 
						 AND codcaj = '".$datos['codcaj']."' 
					   ORDER BY nroing::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->nroing = 1; return true;}
			
			$this->nroing = (integer)$rs_data->fields['nroing']+1;
			
			return true; 
			
	}
	
	function GenerarNroCobro($datos=array()){
				
			$metodo = 'GenerarNroCobro';
			
			
			$ls_sql=" SELECT nromovcob::integer 
			           FROM cxc_dt_movcobro 
					  WHERE tipdoc = '".$datos['tipdoc']."' 
					    AND id_doc = '".$datos['id_doc']."' 
				      ORDER BY nromovcob::integer DESC LIMIT 1";
					  					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->nromovcob = 1; return true;}
			
			$this->nromovcob = (integer)$rs_data->fields['nromovcob']+1;
			
			return true; 
			
	}
	
	function FormatDatosMovCobro($datos=array()){
				
			
				if(!$datos['fecmovcob']){$datos['fecmovcob']=date('Y/m/d');}
				else{$datos['fecmovcob']=$this->io_conexiones->formatea_fecha_bd($datos['fecmovcob']);}				
				if(!$datos['fecdocpag']){$datos['fecdocpag']=date('Y/m/d');}
				else{$datos['fecdocpag']=$this->io_conexiones->formatea_fecha_bd($datos['fecdocpag']);}						
				if($datos['fecanucob']){$datos['fecanucob']=$this->io_conexiones->formatea_fecha_bd($datos['fecanucob']);}
				$datos['tascam'] = $this->formato_numerico_us($datos['tascam']);
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}				
				
				$datos['monmovcob'] = round($this->formato_numerico_us($datos['monmovcob'],10)*$this->TasaCambio,2);
				
				//$resp = $this->ConversionMoneda($datos);
				//if($resp===false){return false;}
								
				return $datos;
	}
	
	function FormatDatosCobPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
					
					$resp = $this->MonedaPorDefecto($datos);
					if($resp===false){return false;}
								
					$datos['fecmovcob']=$this->io_conexiones->formatea_fecha_normal($datos['fecmovcob']);
					$datos['fecdocpag']=$this->io_conexiones->formatea_fecha_normal($datos['fecdocpag']);
					$datos['fecanucob']=$this->io_conexiones->formatea_fecha_normal($datos['fecanucob']);
					
					$datos['totmonloc'] = number_format($datos['monmovcob'],2,',','.');//MONTO EN MONEDA LOCAL
					$datos['monmovcob'] = number_format($datos['monmovcob']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA
					$datos['totmonext'] = ($datos['codmon']!=$this->DatosMonedaDef['codmon'])?$datos['monmovcob']:'0,00';
					//$datos['totmonext'] = $datos['monmovcob'];
					//$datos['totmonext'] = number_format(($this->DatRow['monmovcob']/$this->DatRow['tascam']),2,',','.');
					
					$datos['infocaj'] = '('.$datos['codcaj'].') - '.$datos['nomcaj'];
					$datos['infosuc'] = '('.$datos['codsuc'].') - '.$datos['nomsuc'];
					$datos['tascam'] = number_format($datos['tascam'],2,',','.');
					
					
					switch($datos['tipdoc']){
							case 'FACT':
							    $datos['numdoc'] = 	$datos['numfact'];
								$datos['concepdoc'] = 	$datos['descripfact'];
								$datos['estdoc'] = 	$datos['descestfact'];
								break;
								
							case 'ANTI':
							    $datos['numdoc'] = 	$datos['nroant'];
								$datos['concepdoc'] = 	$datos['conant'];
								$datos['estdoc'] = 	$datos['denestant'];
								break;
								
							case 'NDEB':
							    $datos['numdoc'] = 	$datos['numdoc'];
								break;					
					}
					
					
									
					return $datos;	
	}
	
	function FormatDatosIngresoCajaPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
					
					$resp = $this->MonedaPorDefecto($datos);
					if($resp===false){return false;}
								
					$datos['fecing']=$this->io_conexiones->formatea_fecha_normal($datos['fecing']);
					$datos['fecdocing']=$this->io_conexiones->formatea_fecha_normal($datos['fecdocing']);
					$datos['fecanuing']=$this->io_conexiones->formatea_fecha_normal($datos['fecanuing']);
					
					$datos['totmoningloc'] = number_format($datos['moning'],2,',','.');//MONTO EN MONEDA LOCAL
					$datos['moning'] = number_format($datos['moning']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA					
					$datos['totmoningext'] = ($datos['codmon']!=$this->DatosMonedaDef['codmon'])?$datos['moning']:'0,00';
					//$datos['totmonext'] = $datos['monmovcob'];
					//$datos['totmonext'] = number_format(($this->DatRow['monmovcob']/$this->DatRow['tascam']),2,',','.');
					
					$datos['infocaj'] = '('.$datos['codcaj'].') - '.$datos['nomcaj'];
					$datos['infosuc'] = '('.$datos['codsuc'].') - '.$datos['nomsuc'];
					$datos['tascam'] = number_format($datos['tascam'],2,',','.');
										
					return $datos;	
	}
	
	function FormatDatosIngresoCaja($datos=array()){
				
			
				$datos['fecing']=$this->io_conexiones->formatea_fecha_bd($datos['fecing']);				
				if(!$datos['fecdocing']){$datos['fecdocing']=date('Y/m/d');}
				else{$datos['fecdocing']=$this->io_conexiones->formatea_fecha_bd($datos['fecdocing']);}						
				if($datos['fecanuing']){$datos['fecanuing']=$this->io_conexiones->formatea_fecha_bd($datos['fecanuing']);}
				$datos['tascam'] = $this->formato_numerico_us($datos['tascam']);
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}				
				
				$datos['moning'] = $this->formato_numerico_us($datos['moning'])*$this->TasaCambio;
				
				//$resp = $this->ConversionMoneda($datos);
				//if($resp===false){return false;}
								
				return $datos;
	}
	
	function  ProcIngresoCaja($datos=array()){
			
			$resp = $this->InitObjIngreso($datos);
			if($resp===false){return false;}
			
			$resp = $this->InsertarIngresoCaja($datos);
			if($resp===false){return false;}
						
			if($this->IngresoFactura){			    
				$resp = $this->ProcDetIngresoCaja($datos);
				if($resp===false){return false;}
			}
			
			if($this->IngresoAnticipos){	
			   	$resp = $this->ProcIngresoAnticipo($datos);
				if($resp===false){return false;}
			}
			
			if($datos['crearanticipo']){
				$resp = $this->CrearAnticipoRestoIngreso($datos);
				if($resp===false){return false;}	
			}
			
			if($datos['numdocasoc']){
				$resp = $this->ProcDetMovBcoIngreso($datos);
				if($resp===false){return false;}	
			}
			
			return true;
	}
	
		
	function  InitObjIngreso($datos=array()){
			
			$metodo='VerifObjIngreso';
			
			$this->IngresoFactura=false;
			$this->IngresoRetenciones=false;
			$this->IngresoAnticipos=false;
			
			//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
			$datos['datosGrid'] = stripslashes($datos['datosGrid']);
			$this->datosGridFact = $this->json->decode($datos['datosGrid']);			
			if($this->datosGridFact->RecordCount){$this->IngresoFactura=true;}
			
			$datos['datosRet'] = stripslashes($datos['datosRet']);
			$this->datosRet = $this->json->decode($datos['datosRet']);
			if($this->datosRet->RecordCount){$this->IngresoRetenciones=true;}
						
			$datos['datosAnt'] = stripslashes($datos['datosAnt']);
			$this->datosAnt = $this->json->decode($datos['datosAnt']);
			if($this->datosAnt->RecordCount){$this->IngresoAnticipos=true;}
			
			$datos['datosAntApl'] = stripslashes($datos['datosAntApl']);
			$this->datosAntApl = $this->json->decode($datos['datosAntApl']);
			if($this->datosAntApl->RecordCount){$this->IngresoAntApl=true;}
			
			$datos['datosNcApl'] = stripslashes($datos['datosNcApl']);
			$this->datosNcApl = $this->json->decode($datos['datosNcApl']);
			if($this->datosNcApl->RecordCount){$this->IngresoNcApl=true;}
			
			if(!$this->IngresoFactura and !$this->IngresoRetenciones and !$this->IngresoAnticipos and !$datos['monrest']){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No existen retenciones, facturas o anticipos que procesar. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;
			}
			
			return true;
			
	}
	
	function ProcIngresoAnticipo($datos=array()){
			//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
			//$datos['datosGrid'] = stripslashes($datos['datosGrid']);
			//$ObjDataGrid = $this->json->decode($datos['datosGrid']);		
			
			//$this->datosAnt ---->  SE CREA EL OBJETO DEL GRID EN LA VERIFICACIÓN DE DATOS Y SUSTITUYE LA ANTERIOR
			
			//SE CREA UN ONJETO JSON POR CADA FILA. LOS CAMPOS SE ACCESAN CON EL FORMATO: $obj_json[numero_fila]->nombre_campo
			//SE RECORREN LAS FILAS DEL OBJETO JSON: $obj_json[0], $obj_json[1], $obj_json[2], etc.	
			
			foreach($this->datosAnt->datos as $detalle){	
				if($detalle->monacob==0){continue;}												
				$datosdet['id_cliente'] =  $detalle->id_cliente;											
				$datosdet['nroant'] =  $detalle->nroant;
				$this->nroant =  $detalle->nroant;
				$this->nro_documento=$detalle->nroant;
				$this->idant =  $detalle->idant;
				$datosdet['monacob'] = $detalle->monacob;
				$datosdet['monmovcob'] = $detalle->monacob;				
				$datosdet['idant'] = $detalle->idant; 
				$datosdet['id_doc'] = $detalle->id_doc;
				$datosdet['tipdoc'] = $detalle->tipdoc;
				$datosdet['codcaj'] = $datos['codcaj'];
				$datosdet['codsuc'] = $datos['codsuc'];			
				$datosdet['nroing']	= $this->nroing;							
				$datosdet['codban'] = $datos['codban'];
				$datosdet['ctaban'] = $datos['ctaban'];							    							 
				$datosdet['fecmovcob'] = $datos['fecing'];
				$datosdet['codforpag'] = $datos['codforpag'];									  
				$datosdet['codmon'] = $datos['codmon'];
				$datosdet['tascam'] = $datos['tascam'];						    
				$datosdet['nrodocpag'] = $datos['nrodocpag'];
				$datosdet['nroconform'] = $datos['nroconform'];
				$datosdet['codbancli'] = $datos['codbancli'];
				$datosdet['nroctabancli'] = $datos['nroctabancli'];
				$datosdet['fecdocpag'] = $datos['fecdocing'];
				$datosdet['nacperpag'] = $datos['nacpering'];
				$datosdet['cedperpag'] = $datos['cedpering'];
				$datosdet['estmovcob'] = "COB";
				$datosdet['obscob'] = $datos['obsing'];												
				$resul = $this->InsertarMovCobro($datosdet);
				if($resul===false){return false;}			
			}
			
			return true;
	
	}
	
	function ActualizarEstAnticipo($datos=array()){	
		    
			$metodo='ActualizarEstAnticipo';
			if(!$datos['idant'] or !$datos['estant'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el cobro del anticipo. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;
			}
								
			$ls_sql = "UPDATE cxc_anticipos
					   SET estant='".$datos['estant']."'						   		   			
					   WHERE codemp='".$this->ls_codemp."' 
						 AND idant='".$datos['idant']."' ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->rs_data==false){				
				$metodo = 'ActualizarEstAnticipo';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;				
			}
			
			if($this->io_sql->conn->Affected_Rows()<1){					
					$mensaje = '<b>ERROR:</b><br> Ninguna fila fué afectada !				           			    
							    <br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;
			}
			
		    return true;
	}
	
	
	function ExtraerDatosAnticipo($datos=array()){
		
		$metodo='ExtraerDatosAnticipo';
		
		if(!$datos['idant']){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder extraer los datos del anticipo del anticipo. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																		
			return false;
		}
		
	 	$datos['criterio'] = 'por_id';
		$rsant = $this->ConsultaAnticipo($datos);
		if($rsant===false){return false;}
		
		if(!$rsant['rs']->RecordCount()){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron los datos del anticipo para eliminarlo. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->DatosAnt = $rsant['rs']->fields;		
		$this->nroant=$rsant['rs']->fields['nroant'];
		$this->resing=$rsant['rs']->fields['resing'];
		$this->codsucres=$rsant['rs']->fields['codsucres'];
		$this->codcajres=$rsant['rs']->fields['codcajres'];
		
		return true;	
	}
	
	   
	
	function ProcRetencionesIngresos($datos=array()){
			
			if(!$datos['datosRet']){return true;}
			
			$metodo='ProcRetencionesIngresos';
			if(!$this->nroing){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan el Número de Ingreso para poder procesar las retenciones. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;
			}
			
			$datos['datosRet'] = stripslashes($datos['datosRet']);
			$ObjRet = $this->json->decode($datos['datosRet']);
						
			foreach($ObjRet->retencion as $id_doc => $DatosRet){
					
					if($this->MovCobro){
						//SI ES UN INGRESO DE CAJA NUEVO SE PROCESA SOLO LAS RETENCIONES PERTENECIENTES AL MOVIMIENTO DE COBRO QUE SE ESTA PROCESANDO							
						if($this->id_doc!=$id_doc){continue;}
					}
					else{
						$this->id_doc = $id_doc;
					}						
					$this->DatosRet = $DatosRet->datos;
					$datos['criterio']='por_ingresofact';
					$datos['id_doc'] = $this->id_doc;
					$datos['tipdoc'] = $this->tipdoc;
					$datos['nroing'] = $this->nroing;
					$rsmovcob = $this->ConsultaMovCobros($datos);
					if($rsmovcob===false){return false;}
					if(!$rsmovcob['rs']->RecordCount()){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontro el movimiento de cobro del documento tipo: '.$datos['tipdoc'].' id:'.$tipdoc.'. 
									<br>N° Ingreso:'.$this->nroing.'. 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																		
						return false;			
					}						
					$this->nromovcob = $rsmovcob['rs']->fields['nromovcob'];
					
					$datos['id_fact'] = ($datos['tipdoc']=='FACT')?$datos['id_doc']:$datos['id_fact'];												
					$resp = $this->extraerdatos_factura($datos); 
					if($resp===false){return false;}
					
					$resp = $this->ProcDetRetenciones($datos);
					if($resp===false){return false;}
			}
						
			return true;
	}
	
	function ProcDetRetenciones($datos=array()){
			
			foreach($this->DatosRet as $codret => $datret){
				
				 $datosdet['codsuc'] = $datret->codsuc;
				 $datosdet['codcaj'] = $datret->codcaj;
				 $datosdet['id_doc'] = $datret->id_fact;
				 $datosdet['tipdoc'] = 'FACT';
				 $datosdet['numcom'] = $datret->numcom;
				 $datosdet['codret'] = $datret->codded;
				 $datosdet['id_cliente'] = $datret->id_cliente;
				 $datosdet['nombre_cliente'] = $datret->nombre_cliente;
				 $datosdet['dencar'] = $datret->dencar;
				 $datosdet['dended'] = $datret->dended;
				 $datosdet['feccomp'] = $datret->feccomp;
				 $datosdet['fecrecep'] = $datret->fecrecep;
				 $datosdet['estret'] = $datret->estret;
				 $datosdet['porimp'] = $datret->porimp;
				 $datosdet['basimp'] = $datret->basimp;
				 $datosdet['monimp'] = $datret->monimp;
				 $datosdet['porcret'] = $datret->porcret;				 
				 $datosdet['monret'] = $datret->monret;
				 $datosdet['codmon'] = $datret->codmon;
				 $datosdet['tascam'] = $datret->tascam;
				 $datosdet['dentipret'] = $datret->dentipret;
				 $datosdet['tipret'] = $datret->tipret;
				 $datosdet['numretdoc'] = $datret->numretdoc;
				 $datosdet['nroing'] = $this->nroing;
				 $datosdet['codcar'] = $datret->codcar;
				 //echo '<br><br>'; print_r($datosdet); echo '<br><br>';
				 $datosdet = $this->FormatdatosRetFact($datosdet);				
				 $resp = $this->InsertarRetencionesFact($datosdet);
				 if($resp===false){return false;}
				 
			}
			return true;	
	}
	
	function FormatdatosRetFact($datos=array()){
		
		if(!$datos['feccomp']){$datos['feccomp']=date('Y/m/d');}
		else{$datos['feccomp']=$this->io_conexiones->formatea_fecha_bd($datos['feccomp']);}	
					
		if(!$datos['fecrecep']){$datos['fecrecep']=date('Y/m/d');}
		else{$datos['fecrecep']=$this->io_conexiones->formatea_fecha_bd($datos['fecrecep']);}
			
		$resp = $this->ConversionMoneda($datos);
		if($resp===false){return false;}				
		
		$datos['tascam'] = $this->formato_numerico_us($datos['tascam']);
		$datos['porimp'] = round($this->formato_numerico_us($datos['porimp'],10)*$this->TasaCambio,2);
		$datos['basimp'] = round($this->formato_numerico_us($datos['basimp'],10)*$this->TasaCambio,2);
		$datos['monimp'] = round($this->formato_numerico_us($datos['monimp'],10)*$this->TasaCambio,2);
		$datos['porcret'] = round($this->formato_numerico_us($datos['porcret'],10)*$this->TasaCambio,2);
		$datos['monret'] = round($this->formato_numerico_us($datos['monret'],10)*$this->TasaCambio,2);
		
		return $datos;
	}
	
	function FormatdatosRetFactPresent($datos=array()){
		
		if(!$datos['feccomp']){$datos['feccomp']=date('Y/m/d');}
		else{$datos['feccomp']=$this->io_conexiones->formatea_fecha_normal($datos['feccomp']);}	
					
		if(!$datos['fecrecep']){$datos['fecrecep']=date('Y/m/d');}
		else{$datos['fecrecep']=$this->io_conexiones->formatea_fecha_normal($datos['fecrecep']);}
			
		$resp = $this->ConversionMoneda($datos);
		if($resp===false){return false;}				
		$datos['moning'] = number_format($datos['moning']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA
				
		$datos['porimp'] = number_format($datos['porimp'],2,',','.');
		$datos['basimp'] = number_format($datos['basimp']/$datos['tascam'],2,',','.');
		$datos['monimp'] = number_format($datos['monimp']/$datos['tascam'],2,',','.');
		$datos['porcret'] = number_format($datos['porcret'],2,',','.');
		$datos['monret'] = number_format($datos['monret']/$datos['tascam'],2,',','.');
		
		return $datos;
	}
	
	function GenerarNroRet($datos=array()){
				
			$metodo = 'GenerarNroRet';
			
			
			$ls_sql=" SELECT numretdoc::integer 
			           FROM cxc_cmp_ret 
					  WHERE tipdoc = '".$datos['tipdoc']."' 
					    AND id_doc = '".$datos['id_doc']."' 
				      ORDER BY numretdoc::integer DESC LIMIT 1";
					  					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->numretdoc = 1; return true;}
			
			$this->numretdoc = (integer)$rs_data->fields['numretdoc']+1;
			
			return true; 
			
	}
	
	function InsertarRetencionesFact($datos=array()){
		
		$metodo='InsertarRetencionesFact';
		 
		if(!$datos['codret'] or !$datos['codsuc'] or !$datos['codcaj'] or !$datos['id_doc'] or !$datos['nroing'] or !$datos['tipdoc']){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder insertar la información de la retención 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$this->nroing)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de ingreso				           			    
						<br><b>METODO:</b> InsertarRetencionesFact';
			$this->io_conexiones->mensajes_ajax($mensaje);																		
			return false;	
		}
		
		$datos['criterio']='por_codigo';
		$existe = $this->ConsultaDetRet($datos);
		if($existe===false){return false;}
		
		if($existe->RecordCount()){
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El código de retención '.$datos['codret'].' ya existe para la factura '.$existe->fields['numfact'].'. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																		
			return false;			
		}
		
		if($datos['monret']==0){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El monto de la retención no puede ser 0. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$this->nromovcob){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el N° de Movimiento de Cobro de la factura '.$existe->fields['numfact'].'. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$resp = $this->GenerarNroRet($datos);
		if($resp===false){return false;}
				
		$datos['contab']=0;
		
		switch($datos['tipret']){
							
				case 'I':
					$datos['totcmp_sin_iva'] = $this->DatosFact['subtot'];
					$datos['totcmp_con_iva'] = $this->DatosFact['total'];
					if(!$datos['codcar']){				
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código del cargo de la retención de iva de la factura '.$existe->fields['numfact'].'. 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}					
					break;
				
				case '1':
				case 'A':
				case 'M':
				case 'O':
				case 'S':
					$datos['totcmp_sin_iva'] = 0;
					$datos['totcmp_con_iva'] = 0;
					break;		
		}
		
		$datos['tipdoc'] = $datos['tipdoc']?$datos['tipdoc']:'FACT';
		$datos['id_doc'] = $datos['id_doc']?$datos['id_doc']:$this->id_fact;
		$datos['nromovcob'] = $datos['nromovcob']?$datos['nromovcob']:$this->nromovcob;		
		$datos['perfis'] = substr($datos['feccomp'],0,4).substr($datos['feccomp'],5,2);		
		$this->consigpos = $this->consigpos?$this->consigpos:0;
		$this->fecconsig = $this->fecconsig?$this->fecconsig:'1900-01-01';
		
		$ls_sql = "LOCK TABLE cxc_cmp_ret IN ACCESS EXCLUSIVE MODE;
				   INSERT INTO cxc_cmp_ret( codemp, codsuc, codcaj, codmon, tascam, tipdoc, id_doc, nromovcob, nroing, 
											id_clienteret, tipret, numretdoc, codret, numcom, feccomp, fecrecep, 
											perfis, totcmp_sin_iva, totcmp_con_iva, basimp, porimp, monimp, 
											porcret, monret,codcar, contab, consigpos, fecconsig, fecreg, usureg, horareg)
				   VALUES ('".$this->ls_codemp."', '".
							  $datos['codsuc']."', '".
							  $datos['codcaj']."', '".
							  $datos['codmon']."', '".
							  $datos['tascam']."', '".	
							  $datos['tipdoc']."', '".
							  $datos['id_doc']."', '".				  							 
							  $datos['nromovcob']."', '".
							  $this->nroing."', '".							  							  
							  $datos['id_cliente']."', '".								  
							  $datos['tipret']."', '".
							  $this->numretdoc."', '".				  							 
							  $datos['codret']."', '".
							  $datos['numcom']."', '".									  
							  $datos['feccomp']."', '".
							  $datos['fecrecep']."', '".							  																									  
							  $datos['perfis']."', '".
							  $datos['totcmp_sin_iva']."', '".
							  $datos['totcmp_con_iva']."', '".
							  $datos['basimp']."', '".
							  $datos['porimp']."', '".							 
							  $datos['monimp']."', '".							  															  
							  $datos['porcret']."','".									  
							  $datos['monret']."', '".
							  $datos['codcar']."', '".
							  $datos['contab']."', '".
							  $this->consigpos."', '".
							  $this->fecconsig."', '".									  
							  date("Y-m-d")."', '".
							  $_SESSION["la_logusr"]."', '".
							  date("H:i")."')";
		
		$this->rs_data=$this->io_sql->select($ls_sql);			
		//echo $ls_sql;
		if($this->rs_data==false){					
			$metodo = 'InsertarRetencionesFact';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;					
		}
			
		if($this->GenCmpRet){		
			$resp = $this->ProcContabRet($datos);
			if($resp===false){return false;}
		}
		
		$this->RetProcesada=true;
		return true;
	}
	
	
	function ConsultaDetRet($datos=array()){	
		
		switch($datos['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " WHERE cmp.codemp='".$this->ls_codemp."'
					                    AND cmp.numcom ".$this->postgres_ilike."LIKE('%".$datos['numcom']."%')
										AND cmp.cmpanu='0'
									  ORDER BY cmp.codret";
					break;	
			
			 case "por_factura":
					$sql_criterio = " WHERE cmp.codemp='".$this->ls_codemp."'
					                    AND cmp.id_doc='".$this->id_fact."'
										AND cmp.cmpanu='0'
									  ORDER BY cmp.codret";
					break;
			   	
			  case "por_codigo":
					$sql_criterio = " WHERE cmp.codemp='".$this->ls_codemp."'
					                    AND cmp.id_doc='".$this->id_fact."'
										AND cmp.codret='".$this->codret."'
									  ORDER BY cmp.codret";
					break;
								
		
		}
								   
		$ls_sql = "  SELECT cmp.*,f.numfact,f.total,f.subtot,f.iva,
		                    c.nombre_cliente,c.tipperrif||'-'||c.numpririf||'-'||c.numterrif as rifcli,d.dended             
				     FROM cxc_cmp_ret cmp 
				     INNER JOIN cxc_factura f ON f.codemp = cmp.codemp AND f.id_fact = cmp.id_doc 
					 INNER JOIN cxc_clientes c ON c.codemp = cmp.codemp AND c.id_cliente = cmp.id_clienteret
					 INNER JOIN sigesp_deducciones d ON d.codemp = cmp.codemp AND d.codded = cmp.codret
				  ".$sql_criterio;
		
		$rs_data=$this->io_sql->select($ls_sql);			
				
		if($rs_data===false){					
			$metodo = 'ConsultaDetRet';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;					
		}
		
		return $rs_data;			
	}
	
	function  InitObjIngresoFactDC($datos=array()){
			
			$metodo='InitObjIngresoFactDC';
			$this->IngresoFactura=false;
			//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
			$datos['detalle_cobro'] = stripslashes($datos['detalle_cobro']);
			$this->datosCobroFact = $this->json->decode($datos['detalle_cobro']);			
			
			//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
			$datos['detalle_nc'] = stripslashes($datos['detalle_nc']);
			$this->datosNcFact = $this->json->decode($datos['detalle_nc']);
			
			$datos['datos_movban'] = stripslashes($datos['datos_movban']);
			$this->datosMovBanFact = $this->json->decode($datos['datos_movban']);
						
			if(!$datos['detalle_cobro'] and !$datos['detalle_nc']){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No existen cobros de factura, retenciones o anticipos que procesar. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;
			}
			
			return true;
	}
	
	function  ProcIngresoCajaFactDC($datos=array()){
			
			$resp = $this->InitObjIngresoFactDC($datos);
			if($resp===false){return false;}
			
			$resp = $this->ProcDetCobroFact($datos);
			if($resp===false){return false;}
			
			$resp = $this->ProcDetNcFact($datos);
			if($resp===false){return false;}			
			
			$datos['tipdoc'] = 'FACT';
			$datos['id_doc'] = $this->id_fact;
			$resp = $this->ProcDetMovBcoFact($datos);
			if($resp===false){return false;}			
			
			$param['proc']='COBRADO';			
			$resp = $this->ActualizarFactura($param);
			if($resp===false){return false;}	
			
			return true;
	}
	
	
	function  ValidarTotCobFactDC($datos=array(),$datosdet=array()){
	    if(!$this->DatosFact['total'] or !$datos['id_fact'])
		{				
			$mensaje = 'Faltan datos para poder Verificar el Saldo de la cuenta x cobrar ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																
			return false;
		}		
	   
		$saldo = $this->SaldoFact($datos);
		$monmovcob = $this->formato_numerico_us($datosdet['monmovcob'])*$this->TasaCambio;
		$sobrante = $saldo-$monmovcob;
		if($saldo>$monmovcob){$sobrante=0;}
		$sobrante = abs($sobrante);	
		
		$this->MonMovCobNew = $monmovcob-$sobrante;
		if($this->MonMovCobNew<0){$this->MonMovCobNew=0;}
			
		return $sobrante;
	}
	
	
	
	function  ProcDetCobroFact($datos=array()){
		//$datos['id_fact'] = $this->id_fact;		
		
		foreach($this->datosCobroFact as $campo => $detalle){											
				$datosdet['id_fact'] =  $this->id_fact;
				$datosdet['id_doc'] =  $this->id_fact;
				$datosdet['numfact'] =  $this->numfact;
				$datosdet['codfact'] =  $this->codfact;
				$this->nro_documento=$this->numfact;
				$datosdet['tipdoc'] = 'FACT';											
				$datosdet['monmovcob'] =  $detalle->monmovcob;
				$datosdet['moning'] =  $detalle->monmovcob;
				$datosdet['codsuc'] = $datos['codsuc'];
				$datosdet['codcaj']	= $datos['codcaj'];
				$datosdet['codmon'] = $datos['codmon'];
				$datosdet['tascam'] = $datos['tascam'];
				$datosdet['fecmovcob'] = $this->io_conexiones->formatea_fecha_normal($datos['fecfact']);				
				$datosdet['fecing'] = $this->io_conexiones->formatea_fecha_normal($datos['fecfact']);
				$datosdet['id_cliente'] = $datos['id_cliente'];											
				$datosdet['codban'] = $detalle->codban;
				$datosdet['ctaban'] = $detalle->ctaban;
				$datosdet['codforpag'] = $detalle->codforpag;
				$datosdet['nrodocpag'] = $detalle->nrodocpag;
				$datosdet['nroconform'] = $detalle->nroconform;
				$datosdet['codbancli'] = $detalle->codbancli;
				$datosdet['nroctabancli'] = $detalle->nroctabancli;
				$datosdet['fecdocpag'] = $detalle->fecdocing;
				$datosdet['fecdocing'] = $detalle->fecdocing;
				$datosdet['nacperpag'] = $detalle->nacpering;
				$datosdet['cedperpag'] = $detalle->cedpering;
				$datosdet['nacpering'] = $detalle->nacpering;
				$datosdet['cedpering'] = $detalle->cedpering;
				$datosdet['estmovcob'] = "COB";
				$datosdet['obscob'] = $detalle->obsing;
				$datosdet['obsing'] = $detalle->obsing;
				$datosdet['datosRet'] = $datos['datosRet'];				
				
				$resp = $this->InsertarIngresoCaja($datosdet);
				if($resp===false){return false;}
				
				$sobrante=$this->ValidarTotCobFactDC($datos,$datosdet);
				if($sobrante===false){return false;}
				if($sobrante){				    				
					$datosdet['monmovcob'] = number_format(($this->MonMovCobNew/$this->TasaCambio),2,',','.');
					$datosdet['monrest'] = number_format(($sobrante/$this->TasaCambio),2,',','.');
					$resp = $this->CrearAnticipoRestoIngreso($datosdet);
					if($resp===false){return false;}
					$this->id_fact=$datosdet['id_fact'];	
					$this->numfact=$datosdet['numfact'];
					$this->codfact=$datosdet['codfact'];
					if($this->MonMovCobNew==0){continue;}					
				}
				
				$datosdet['nroing'] = $this->nroing;				
				$resul = $this->InsertarMovCobro($datosdet);
				if($resul===false){return false;}
				
			}	
	}
	
	function  ProcDetNcFact($datos=array()){
		
		foreach($this->datosNcFact as $campo => $detalle){
												
				$datosdet['id_fact'] =  $this->id_fact;
				$datosdet['numfact'] =  $this->numfact;
				$this->nro_documento=$this->numfact;
				$datosdet['tipdocapl'] = 'FACT';
				$datosdet['id_docapl'] =  $this->id_fact;
				$datosdet['codtipdoc'] = $detalle->codtipdoc;
				$datosdet['id_doc'] =  $detalle->id_doc;
				$datosdet['codsuc'] = $datos['codsuc'];
				$datosdet['codcaj']	= $datos['codcaj'];
				$datosdet['codmon'] = $datos['codmon'];
				$datosdet['tascam'] = $datos['tascam'];
				$datosdet['fecmovcob'] = $datos['fecfact'];				
				$datosdet['fecing'] = $datos['fecfact'];
				$datosdet['id_cliente'] = $datos['id_cliente'];
				$datosdet['monmovdoc'] =  $detalle->monaplicarnc;	
				$datosdet['fecmovdoc'] =  $datos['fecfact'];
														
				$resp = $this->InsertarMovDoc($datosdet);
				if($resp===false){return false;}
				
			}	
	}
	
	function  InsertarIngresoCaja($datos=array()){
				
				if(!$datos['codcaj'] or !$datos['codsuc'] or !$datos['id_cliente'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción del ingreso. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if(!$datos['codforpag'])
				{				
					$mensaje = 'Falta la forma de pago para generar del ingreso ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$this->nombre_cliente=$datos['nombre_cliente'];
				
				$resp = $this->GenerarNroIngreso($datos);
				if($resp===false){return false;}
				
				$datos = $this->FormatDatosIngresoCaja($datos);
				if($datos===false){return false;}
				
				$this->id_cliente=$datos['id_cliente'];
				$this->codsuc=$datos['codsuc'];
				$this->codcaj=$datos['codcaj'];				
				$this->fecing=$datos['fecing'];
				$this->moning=$datos['moning'];
				
				if(!$datos['moning'])
				{				
					$mensaje = 'El monto del ingreso no puede ser 0 ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				$datos['esting']='PROC';

				
				$ls_sql = "LOCK TABLE cxc_ingresos IN ACCESS EXCLUSIVE MODE;
						   INSERT INTO cxc_ingresos(codemp, codsuc, codcaj, nroing, id_cliente, esting, fecing, codforpag, 
												    codmon, tascam, moning, nrodocpag, nroconform, codbancli, nroctabancli, 
												    fecdocing, nacpering, cedpering, codban, ctaban, obsing, fecreg, 
												    usureg, horareg)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['codsuc']."', '".
									  $datos['codcaj']."', '".
									  $this->nroing."', '".	
									  $datos['id_cliente']."', '".
									  $datos['esting']."', '".				  							 
									  $datos['fecing']."', '".
									  $datos['codforpag']."', '".									  
									  $datos['codmon']."', '".
									  $datos['tascam']."', '".									  
									  $datos['moning']."', '".
									  $datos['nrodocpag']."', '".
									  $datos['nroconform']."', '".
									  $datos['codbancli']."', '".
									  $datos['nroctabancli']."', '".
									  $datos['fecdocing']."', '".
									  $datos['nacpering']."', '".
									  $datos['cedpering']."','".									  
									  $datos['codban']."', '".
									  $datos['ctaban']."', '".		
									  $datos['obsing']."', '".
									  date("Y-m-d")."', '".
									  $_SESSION["la_logusr"]."', '".
									  date("H:i")."')";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){					
					$metodo = 'InsertarIngresoCaja';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}			
				//$mensaje = 'El Ingreso se ha insertado con éxito. ';
				//$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  ModificarIngresoCaja($datos=array()){				
				
				if(!$datos['nroing'] or !$datos['id_cliente'] or !$datos['codsuc'] or !$datos['codcaj'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de Actualización del Ingreso de Caja. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if($datos['codbanasoc']){
					$mensaje = 'El Ingreso de Caja tiene un movimiento de banco asociado y no puede ser modificado. ';
					$this->io_conexiones->mensajes_ajax($mensaje);
					return true;
				}
				
				$this->GenCmpRet = true;
				
				$datos = $this->FormatDatosIngresoCaja($datos);
				if($datos===false){return false;}
				$this->nroing = $datos['nroing'];
									
				$ls_sql = "LOCK TABLE cxc_ingresos IN ACCESS EXCLUSIVE MODE;
				           UPDATE cxc_ingresos
     					   SET nrodocpag='".$datos['nrodocpag']."',
						       nroconform='".$datos['nroconform']."',
						  	   codbancli='".$datos['codbancli']."',
						       nroctabancli='".$datos['nroctabancli']."',
							   fecdocing='".$datos['fecdocing']."',
							   nacpering='".$datos['nacpering']."',
							   cedpering='".$datos['cedpering']."',								   		
							   obsing='".$datos['obsing']."',					   
							   fecmod='".date("Y-m-d")."',
							   usumod='".$_SESSION["la_logusr"]."',
							   horamod='".date("H:i")."'							
						   WHERE codemp='".$this->ls_codemp."' 
						     AND id_cliente='".$datos['id_cliente']."'
							 AND codsuc='".$datos['codsuc']."'
							 AND codcaj='".$datos['codcaj']."' 
							 AND nroing='".$datos['nroing']."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql;
				if($this->rs_data==false)
				{
					
					$metodo = 'ModificarIngresoCaja';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
				
				if($datos['datosRet']){
					$this->consigpos = 1;
					$this->fecconsig = date("Y-m-d");
					$this->tipdoc = 'FACT';				
					$resp = $this->ProcRetencionesIngresos($datos);
					if($resp===false){return false;}
				}
								
				$mensaje = 'El Ingreso ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function ProcDetIngresoCaja($datos=array()){			
				
				//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
				//$datos['datosGrid'] = stripslashes($datos['datosGrid']);
				//$ObjDataGrid = $this->json->decode($datos['datosGrid']);		
				
				//$this->datosGridFact ---->  SE CREA EL OBJETO DEL GRID EN LA VERIFICACIÓN DE DATOS Y SUSTITUYE LA ANTERIOR
				
				//SE CREA UN ONJETO JSON POR CADA FILA. LOS CAMPOS SE ACCESAN CON EL FORMATO: $obj_json[numero_fila]->nombre_campo
				//SE RECORREN LAS FILAS DEL OBJETO JSON: $obj_json[0], $obj_json[1], $obj_json[2], etc.		
				try{
						foreach($this->datosGridFact->datos as $detalle){						
					
								if($detalle->monmovcob==0){continue;}
								$datosdet['id'] =  $detalle->id;								
								$datosdet['id_fact'] =  $detalle->id_fact;
								$datosdet['id_doc'] =  $detalle->id_fact;
								$datosdet['numfact'] =  $detalle->numfact;
								$this->nro_documento=$detalle->numfact;
								$datosdet['tipdoc'] = 'FACT';	
								$TasaCambio = $this->formato_numerico_us($datos['tascam']);								
								if($detalle->codmon!=$datos['codmon']){$detalle->monmovcob = number_format(($this->formato_numerico_us($detalle->monmovcob)/$TasaCambio),10,',','.');}																		
								$datosdet['monmovcob'] =  $detalle->monmovcob;																				
								$datosdet['codsuc'] = $datos['codsuc'];
							    $datosdet['codcaj']	= $datos['codcaj'];		
								$datosdet['nroing']	= $this->nroing;							
							    $datosdet['codban'] = $datos['codban'];
							    $datosdet['ctaban'] = $datos['ctaban'];							    							 
							    $datosdet['fecmovcob'] = $datos['fecing'];
							    $datosdet['codforpag'] = $datos['codforpag'];									  
							    $datosdet['codmon'] = $datos['codmon'];
							    $datosdet['tascam'] = $datos['tascam'];						    
							    $datosdet['nrodocpag'] = $datos['nrodocpag'];
							    $datosdet['nroconform'] = $datos['nroconform'];
							    $datosdet['codbancli'] = $datos['codbancli'];
							    $datosdet['nroctabancli'] = $datos['nroctabancli'];
							    $datosdet['fecdocpag'] = $datos['fecdocing'];
							    $datosdet['nacperpag'] = $datos['nacpering'];
							    $datosdet['cedperpag'] = $datos['cedpering'];
							    $datosdet['estmovcob'] = "COB";
							    $datosdet['obscob'] = $datos['obsing'];
								$datosdet['datosRet'] = $datos['datosRet'];
								$this->RetProcesada=false;								
								$resul = $this->InsertarMovCobro($datosdet);
								if($resul===false){return false;}
								
								
						}
				}
				catch(ErrorException $e){return false;}
				
				return true;
		
	}
	
	function FormatPresentDetCobrosFact($datos=array()){
			
			$datos['fecing']=$this->io_conexiones->formatea_fecha_normal($datos['fecing']);
			$datos['fecdocing']=$this->io_conexiones->formatea_fecha_normal($datos['fecdocing']);
			$datos['fecanuing']=$this->io_conexiones->formatea_fecha_normal($datos['fecanuing']);
			$datos['fecmovcob']=$this->io_conexiones->formatea_fecha_normal($datos['fecmovcob']);
			$datos['fecdocpag']=$this->io_conexiones->formatea_fecha_normal($datos['fecdocpag']);			
			$datos['moning'] = number_format($datos['moning']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA
			$datos['monmovcob'] = number_format($datos['monmovcob']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA
								
			return $datos;
	}
	
	function ConsultaMovCobros($datos=array()){	
		$criterioSQL="";
		$campos=" * ";
		
		switch($datos['criterio']){
							  
			  case "por_numero":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.id_doc='".$datos['id_doc']."' 
										AND mc.tipdoc='".$datos['tipdoc']."' 
										AND mc.nromovcob='".$datos['nromovcob']."'";   
					break;
			
			case "por_movbanco":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.id_doc='".$datos['id_doc']."' 
										AND mc.tipdoc='".$datos['tipdoc']."'
										AND mc.codban='".$datos['codban']."'
										AND mc.ctaban='".$datos['ctaban']."'
										AND mc.nrodocpag='".$datos['nrodocpag']."'";   
					break;
			
			case "CobrosFactDeContado":
					$campos=" be.nomban,cbe.dencta,i.*,fp.*,caj.*,mc.* ";
					$sql_criterio = " INNER JOIN cxc_ingresos i ON i.codemp = mc.codemp 
															   AND i.codsuc = mc.codsuc 
															   AND i.codcaj = mc.codcaj 
															   AND i.nroing = mc.nroing
					                  INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.id_doc='".$datos['id_doc']."' 
										AND mc.tipdoc='FACT' 
									  ORDER BY mc.nromovcob
								    ";   
					break;		
			 
			  case "por_factura":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	 	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.id_doc='".$datos['id_doc']."'
										AND mc.tipdoc='".$datos['tipdoc']."' 
									  ORDER BY mc.id_doc,mc.nromovcob ";   
					break;				   
			  
			  case "por_documento":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	 	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.id_doc='".$datos['id_doc']."'
										AND mc.tipdoc='".$datos['tipdoc']."' 
									  ORDER BY mc.id_doc,mc.nromovcob ";   
					break;		
			  
			  case "por_ingresofact":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	 	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.id_doc='".$datos['id_doc']."'
										AND mc.tipdoc='".$datos['tipdoc']."'
										AND mc.codsuc='".$datos['codsuc']."'
									    AND mc.codcaj='".$datos['codcaj']."'
										AND mc.nroing='".$datos['nroing']."' 
									  ORDER BY mc.id_doc,mc.nromovcob ";   
					break;	
				
			case "por_ingreso":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	 	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.codsuc='".$datos['codsuc']."'
									    AND mc.codcaj='".$datos['codcaj']."'
										AND mc.nroing='".$datos['nroing']."' 
									  ORDER BY mc.id_doc,mc.nromovcob ";   
					break;	
			  
			  case "por_ingreso_fact":
					$sql_criterio = " INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag
					                  INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								      INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
									  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon	 	
									  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
									  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
									  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban 							   
					                  WHERE mc.codemp='".$this->ls_codemp."' 
									    AND mc.codsuc='".$datos['codsuc']."'
									    AND mc.codcaj='".$datos['codcaj']."'
										AND mc.nroing='".$datos['nroing']."' 
										AND mc.id_doc='".$datos['id_doc']."'
										AND mc.tipdoc='".$datos['tipdoc']."' 
									  ORDER BY mc.id_doc,mc.nromovcob ";   
					break;	
			  
			  case "por_listado":
			  							
					if($datos['orden']==""){$columna='nombre_cliente';}
					if($datos['codcliente']){$criterioSQL .= " AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
					if($datos['nombre_cliente']){$criterioSQL .= " AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
					if($datos['numpririf']){$criterioSQL .= " AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
					if($datos['clasif_cliente']){$criterioSQL .= " AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
					if($datos['sc_cuenta']){$criterioSQL .= " AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
					if($datos['cedularesp']){$criterioSQL .= " AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
					if($datos['tipperrif']){$criterioSQL .= " AND c.tipperrif = '".$datos['tipperrif']."' ";}					
					if($datos['id_tipo_cliente']){$criterioSQL .= " AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
					if($datos['id_zona']){$criterioSQL .= " AND c.id_zona = '".$datos['id_zona']."' ";}
					if($datos['id_vend']){$criterioSQL .= " AND c.id_vend = '".$datos['id_vend']."' ";}
					if($datos['estclient']){$criterioSQL .= " AND c.estclient = '".$datos['estclient']."' ";}		
					if($datos['fecregcliente_d']){
						if($datos['fecregcliente_h'] == ''){$datos['fecregcliente_h'] = $datos['fecregcliente_d'];}
						$criterioSQL .= " AND c.fecregcliente BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_h'])."'  ";
					}	
					if($datos['nombreresp']){$criterioSQL .= " AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
					if($datos['nombre_pais']){$criterioSQL .= " AND despai ".$this->postgres_ilike."LIKE('%".$datos['nombre_pais']."%') ";}
					if($datos['entidad_federal']){$criterioSQL .= " AND desest ".$this->postgres_ilike."LIKE('%".$datos['entidad_federal']."%') ";}
					if($datos['municipio']){$criterioSQL .= " AND denmun ".$this->postgres_ilike."LIKE('%".$datos['municipio']."%') ";}
					if($datos['parroquia']){$criterioSQL .= " AND denpar ".$this->postgres_ilike."LIKE('%".$datos['parroquia']."%') ";}
					if($datos['cedularesp']){$criterioSQL .= " AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
					if($datos['fecfact_d']){
						if($datos['fecfact_h'] == ''){$datos['fecfact_h'] = $datos['fecfact_d'];}
						$criterioSQL .= " AND f.fecfact BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_h'])."'  ";
					}
					if($datos['fecmovcob_d']){
						if($datos['fecmovcob_h'] == ''){$datos['fecmovcob_h'] = $datos['fecmovcob_d'];}
						$criterioSQL .= " AND mc.fecmovcob BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecmovcob_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecmovcob_h'])."'  ";
					}						 
					if($datos['id_transp']){$criterioSQL .= " AND f.id_transp = '".$datos['id_transp']."' ";}
					if($datos['codmon']){$criterioSQL .= " AND mc.codmon = '".$datos['codmon']."' ";}
					if($datos['id_estfact']){$criterioSQL .= " AND f.id_estfact = '".$datos['id_estfact']."' ";}
					if($datos['id_condpago']){$criterioSQL .= " AND f.id_condpago = '".$datos['id_condpago']."' ";}
					if($datos['numfact']){$criterioSQL .= " AND f.numfact = '".$datos['numfact']."' ";}
					if($datos['codfact']){$criterioSQL .= " AND f.codfact ".$this->postgres_ilike."LIKE('%".$datos['codfact']."%') ";}	
					if($datos['nomvend']){$criterioSQL .= " AND nomvend ".$this->postgres_ilike."LIKE('%".$datos['nomvend']."%') ";}			
					if($datos['numcont']){$criterioSQL .= " AND f.numcont ".$this->postgres_ilike."LIKE('%".$datos['numcont']."%') ";}					
					
					if($datos['codforpag']){$criterioSQL .= " AND mc.codforpag = '".$datos['codforpag']."' ";}
					if($datos['tipdoc']){$criterioSQL .= " AND mc.tipdoc = '".$datos['tipdoc']."' ";}
					if($datos['estmovcob']){$criterioSQL .= " AND mc.estmovcob = '".$datos['estmovcob']."' ";}
					if($datos['codsuc']){$criterioSQL .= " AND mc.codsuc = '".$datos['codsuc']."' ";}
					if($datos['codcaj']){$criterioSQL .= " AND mc.codcaj = '".$datos['codcaj']."' ";}
					if($datos['nroing']){$criterioSQL .= " AND mc.nroing = '".$datos['nroing']."' ";}				
					if($datos['cobrado']=='0' or $datos['cobrado']=='1'){$criterioSQL .= " AND f.cobrado = '".$datos['cobrado']."' ";}					
					if($datos['tipopecont']){$criterioSQL .= " AND f.tipopecont = '".$datos['tipopecont']."' ";}		
					if($datos['criterio']=="por_listado_anulacion"){$criterioSQL .= " AND anulado='0' "; $datos['criterio']="por_listado";}
					if($datos['criterio']=="por_listado_reverso_anulacion"){$criterioSQL .= " AND anulado='1' "; $datos['criterio']="por_listado";}
										
					if($datos['total']){
									
								if(!$datos['criterio_monto']){$datos['criterio_monto']='igual';}
								switch($datos['criterio_monto']){
										case 'igual':
											   $criterioSQL .= " AND f.total = '".$datos['total']."' ";
											   break;							
										case 'mayor':
											   $criterioSQL .= " AND f.total > '".$datos['total']."' ";
											   break;
										case 'menor':
											   $criterioSQL .= " AND f.total < '".$datos['total']."' ";
											   break;					
								}
								
					}
					
					
					if($datos['codmon']){$criterioSQL .= " AND mc.codmon = '".$datos['codmon']."' ";}
					
					if($datos['no_anulados']){$criterioSQL .= " AND mc.estmovcob != 'ANU' ";}
					
					if($datos['codart']){
							$criterioSQL .= " AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='ARTIC'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codart']."' 
																	  ) ";
					}
					
					if($datos['codser']){
							$criterioSQL .= " AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='SERVI'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codser']."' 
																	  ) ";
					}
					
					if($datos['codconfac']){
							$criterioSQL .= " AND f.id_fact IN (SELECT DISTINCT id_fact 
							                                            FROM cxc_detalle 
																	   WHERE id_tipodetalle='CONCE'
																	     AND codproceso='FACTURA'
																		 AND coddetalle='".$datos['codconfac']."' 
																	  ) ";
					}
					
					if($datos['estcxc'] == 'VENCIDO'){
						$criterioSQL .= " AND (cp.diascred - (now()::date - f.fecfact)::integer)::integer < 0
									      AND f.id_estfact!=4
										  AND f.tipopecont='DEV'
										  AND cp.operacion='DEV'
										   ";
					}
					
					if($datos['estcxc'] == 'VIGENTE'){
						$criterioSQL .= " AND (cp.diascred - (now()::date - f.fecfact)::integer)::integer >= 0
									   AND f.id_estfact!=4
									   AND f.tipopecont='DEV'
									   AND cp.operacion='DEV' ";
					}
					
					if($datos['estcxc'] == 'CERRADO'){
						$criterioSQL .= " AND f.id_estfact=4
						               AND f.tipopecont='DEV'
									   AND cp.operacion='DEV' ";
					}
					
					if($datos['omitcer']){
						$criterio .= " AND f.id_estfact!=4
						               AND f.tipopecont='DEV'
									   AND cp.operacion='DEV' ";
					}
					
					if($datos['fecing_d']){
						if($datos['fecing_h'] == ''){$datos['fecing_h'] = $datos['fecing_d'];}
						$criterioSQL .= " AND ing.fecing BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecing_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecing_h'])."'  ";
					}
											 
					if($datos['codsuc']){$criterioSQL .= " AND ing.codsuc = '".$datos['codsuc']."' ";}
					if($datos['codcaj']){$criterioSQL .= " AND ing.codcaj = '".$datos['codcaj']."' ";}
					if($datos['codmon']){$criterioSQL .= " AND ing.codmon = '".$datos['codmon']."' ";}					
					if($datos['codforpag']){$criterioSQL .= " AND ing.codforpag = '".$datos['codforpag']."' ";}
					if($datos['esting']){$criterioSQL .= " AND ing.esting = '".$datos['esting']."' ";}				
					if($datos['nroing']){$criterioSQL .= " AND ing.nroing = '".$datos['nroing']."' ";}					
					if($datos['moning']){
									
								if(!$datos['criterio_monto']){$datos['criterio_monto']='igual';}
								switch($datos['criterio_monto']){
										case 'igual':
											   $criterioSQL .= " AND ing.moning = '".$datos['moning']."' ";
											   break;							
										case 'mayor':
											   $criterioSQL .= " AND ing.moning > '".$datos['moning']."' ";
											   break;
										case 'menor':
											   $criterioSQL .= " AND ing.moning < '".$datos['moning']."' ";
											   break;					
								}
								
					}
					
			  		$campos=" mc.*,ing.*,ei.*,fp.*,suc.*,caj.*,mo.*,b.*,be.*,cbe.*,eant.denestant,
					          ant.idant, ant.nroant, ant.nroproy, ant.nrocontrato, ant.scg_cuenta_ant, 
							  ant.fecant, ant.conant, ant.porant, ant.monant, ant.estant, fecanuant, 
							  ant.conanuant, ant.fecregant, ant.usuregant, ant.horaregant, ant.codsucres, 
							  ant.codcajres, ant.resing ";
					
					$camposadd = " ,f.codproceso, f.numfact, f.codfact, f.numcont, f.id_cliente, 
								   f.id_transp, f.id_estfact, f.id_condpago, f.id_vend, 
								   f.codmon as codmonfact , 
								   f.tascam as tascamfact, 
								   f.tipopecont,
								   f.codsuc as codsucfact, 
								   f.codcaj as codcajfact,
								   sucf.sigsuc as sigsucfact,
								   f.fecfact, f.fecvenc, f.porcdesc, f.montodesc,
								   f.subtot, f.iva, f.otros,f. baseimp, f.total, f.descripfact, f.comentadifact, 
								   f.nummov, f.numorddes, f.codestpro1, f.codestpro2, f.codestpro3, f.codestpro4, 
								   f.codestpro5, f.estcla, f.devengado, f.cobrado, f.contabilizado, f.anulado, 
								   f.fecconta, f.fecanula, f.conanula, f.codunieje,							   
								   c.codcliente, c.tipperrif, c.numpririf, c.numterrif, 
       							   c.nitcli, c.id_tipo_cliente, c.nombre_cliente, c.cliente_abvr,								    
								   v.nomvend, v.codvend, codtransp, desctransp, 
								   mof.denmon as denmonfact, 
								   mof.abrmon as abrmonfact, 
								   desccondpago, cp.diascred as diascredito, 
					               descestfact,cp.operacion as opespi,
					               sucf.nomsuc as nomsucfact,
								   sucf.sucmatriz as sucmatrizfact,
								   cajf.nomcaj as nomcajfact,
								   cajf.scg_cuenta as scg_cajafact,
								   cajf.estcaj as estcajfact,
								   sucf.sigsuc as sigsucfact
								  ";
					$campos = $campos.$camposadd;
					
					$sql_criterio = "    INNER JOIN cxc_formapago fp ON fp.codforpag = mc.codforpag 
					                     INNER JOIN cxc_sucursales suc ON suc.codemp = mc.codemp 
									                              AND suc.codsuc = mc.codsuc
								         INNER JOIN cxc_cajas caj ON caj.codemp = mc.codemp 
																 AND caj.codsuc = mc.codsuc
																 AND caj.codcaj = mc.codcaj 
										  INNER JOIN cxc_ingresos ing ON ing.codemp = mc.codemp 
																     AND ing.codsuc = mc.codsuc
																     AND ing.codcaj = mc.codcaj
																     AND ing.nroing = mc.nroing
										  INNER JOIN cxc_esting ei ON ei.esting = ing.esting
										  LEFT JOIN sigesp_moneda mo ON mc.codmon = mo.codmon		
										  LEFT JOIN cxc_bancos b ON b.codban = mc.codban 
										  LEFT JOIN scb_banco be ON be.codemp = mc.codemp AND be.codban = mc.codban 
										  LEFT JOIN scb_ctabanco cbe ON cbe.codemp = mc.codemp AND cbe.codban = mc.codban AND cbe.ctaban = mc.ctaban										  
										  LEFT JOIN cxc_anticipos ant ON mc.codsuc = ant.codsucres 
																      AND mc.codcaj = ant.codcajres
																      AND mc.nroing = ant.resing
										  LEFT JOIN cxc_estanticipo eant ON ant.estant = eant.estant
										  LEFT JOIN cxc_factura f ON f.codemp = mc.codemp 
																 AND f.id_fact = mc.id_doc
																 AND mc.tipdoc='FACT'
										  LEFT JOIN cxc_sucursales sucf ON sucf.codemp = f.codemp 
																	  AND sucf.codsuc = f.codsuc
										  LEFT JOIN cxc_cajas cajf ON cajf.codemp = f.codemp 
																  AND cajf.codsuc = f.codsuc
																  AND cajf.codcaj = f.codcaj
										  LEFT JOIN cxc_clientes c ON c.id_cliente = ing.id_cliente
										  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
										  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
										  LEFT JOIN sigesp_moneda mof ON f.codmon = mof.codmon
										  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
										  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
										  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
										  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
										  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
										  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
										  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
										  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
										  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
										  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
										  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
										  WHERE mc.codemp='".$this->ls_codemp."'										   										 
											".$criterioSQL."
										  ORDER BY ing.codsuc,ing.codcaj,ing.nroing,mc.nromovcob ";
					break;
					
					

		}
		
		
								   
		$query_rs = "SELECT ".$campos." FROM cxc_dt_movcobro mc ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaMovCobros';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function  CrearAnticipoRestoIngreso($datos=array()){
			
			$metodo='CrearAnticipoRestoIngreso';
			
			if(!$datos['codcaj'] or !$datos['codsuc'] or !$datos['monrest'] or !$datos['id_cliente']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el anticipo por el resto del ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
			
			if($this->formato_numerico_us($datos['monrest'])<=0){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El monto del resto del ingreso debe ser mayor a 0. 
				            <br>RESTO: '.$datos['monrest'].'				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;					
			}
															
			$datosdet['id_cliente'] =  $datos['id_cliente'];
			$datos['nroproy'] = 0;
			$datos['nrocontrato'] = 'INGRESO00000'.$this->nroing;
			$datos['fecant']=$datos['fecing'];
			$datos['conant']="Saldo a favor creado por el sistema como resto del ingreso N° ".$this->nroing." en la Sucursal ".$datos['codsuc']." Caja ".$datos['codcaj'];
			$datos['porant']=100;
			$datos['monant']=$datos['monrest'];
			$datos['estant']='PEN';				
			$datos['codsucres']=$datos['codsuc'];
			$datos['codcajres']=$datos['codcaj'];
			$datos['resing']=$this->nroing;
	   
			$resp = $this->InsertarAnticipo($datos);
			if($resp===false){return false;}
			
			$datosdet['nroant'] =  $this->nroant;
			$datos['nroant'] =  $this->nroant;
			$datos['criterio'] = "por_numero";
			$rsant = $this->ConsultaAnticipo($datos);
			if($rsant===false){return false;}	
			
			if(!$rsant['rs']->RecordCount()){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron los datos del anticipo por el resto. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;					
			}
			
			if(!$rsant['rs']->fields['idant']){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontró el id del anticipo por el resto. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;					
			}
			
			$this->nro_documento=$this->nroant;
			$this->idant =  $rsant['rs']->fields['idant'];
			
			$datosdet['monacob'] = $datos['monrest'];
			$datosdet['monmovcob'] = $datos['monrest'];				
			$datosdet['idant'] = $this->idant; 
			$datosdet['id_doc'] = $this->idant;
			$datosdet['tipdoc'] = "ANTI";
			$datosdet['codcaj'] = $datos['codcaj'];
			$datosdet['codsuc'] = $datos['codsuc'];			
			$datosdet['nroing']	= $this->nroing;							
			$datosdet['codban'] = $datos['codban'];
			$datosdet['ctaban'] = $datos['ctaban'];							    							 
			$datosdet['fecmovcob'] = $datos['fecing'];
			$datosdet['codforpag'] = $datos['codforpag'];									  
			$datosdet['codmon'] = $datos['codmon'];
			$datosdet['tascam'] = $datos['tascam'];						    
			$datosdet['nrodocpag'] = $datos['nrodocpag'];
			$datosdet['nroconform'] = $datos['nroconform'];
			$datosdet['codbancli'] = $datos['codbancli'];
			$datosdet['nroctabancli'] = $datos['nroctabancli'];
			$datosdet['fecdocpag'] = $datos['fecdocing'];
			$datosdet['nacperpag'] = $datos['nacpering'];
			$datosdet['cedperpag'] = $datos['cedpering'];
			$datosdet['estmovcob'] = "COB";
			$datosdet['obscob'] = $datos['obsing'];												
			$resul = $this->InsertarMovCobro($datosdet);
			if($resul===false){return false;}			
			
			return true;
	}
	
	function  InsertarMovCobro($datos=array()){
				
				if(!$datos['codcaj'] or !$datos['codsuc'] or !$datos['id_doc'] or !$datos['tipdoc'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para insertar el movimiento de cobro 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				if(!$datos['codforpag']){				
					$mensaje = 'Falta la forma de pago para generar el cobro ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$this->codsuccob = $datos['codsuc'];
				
				$resp = $this->GenerarNroCobro($datos);
				if($resp===false){return false;}
				
				$datos = $this->FormatDatosMovCobro($datos);
				if($datos===false){return false;}
				
				if(!$datos['monmovcob'])
				{				
					$mensaje = 'El monto a cobrar no puede ser 0 ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if(!$this->nroing)
				{				
					$mensaje = 'Falta el número de ingreso.';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				$this->RetProcesada = false;
				$datos['estmovcob']='COB';
				
				$ls_sql = "LOCK TABLE cxc_dt_movcobro IN ACCESS EXCLUSIVE MODE;
						   INSERT INTO cxc_dt_movcobro(codemp, codsuc, codcaj, nroing, codban, ctaban, tipdoc, id_doc, nromovcob, fecmovcob, 
												    codforpag, codmon, tascam, monmovcob, nrodocpag, nroconform, codbancli, nroctabancli, 
												    fecdocpag, nacperpag, cedperpag,estmovcob,obscob,fecreg,usureg,horareg)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['codsuc']."', '".									  
									  $datos['codcaj']."', '".
									  $this->nroing."', '".								
									  $datos['codban']."', '".
									  $datos['ctaban']."', '".
									  $datos['tipdoc']."', '".
									  $datos['id_doc']."', '".
									  $this->nromovcob."', '".
									  $datos['fecmovcob']."', '".
									  $datos['codforpag']."', '".									  
									  $datos['codmon']."', '".
									  $datos['tascam']."', '".									  
									  $datos['monmovcob']."', '".
									  $datos['nrodocpag']."', '".
									  $datos['nroconform']."', '".
									  $datos['codbancli']."', '".
									  $datos['nroctabancli']."', '".
									  $datos['fecdocpag']."', '".
									  $datos['nacperpag']."', '".
									  $datos['cedperpag']."','".
									  $datos['estmovcob']."','".
									  $datos['obscob']."','".
									  date("Y-m-d")."','".
									  $_SESSION["la_logusr"]."','".
									  date("H:i")."')";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br><br>';
				if($this->rs_data==false){					
					$metodo = 'InsertarMovCobro';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				
				$this->tipdoc=$datos['tipdoc'];
				$this->id_doc=$datos['id_doc'];								
				$this->codsuc=$datos['codsuc'];
				$this->codcaj=$datos['codcaj'];				
				$this->fecmovcob=$datos['fecmovcob'];
				$this->monmovcob=$datos['monmovcob'];
						
				$this->MovCobro = true;
				
				if($this->tipdoc=='FACT' or $this->tipdoc=='NDEB'){				    				
					$resp = $this->ProcRetencionesIngresos($datos);
					if($resp===false){return false;}
					$resp = $this->ProcNotCreAplIngresos($datos);
					if($resp===false){return false;}
					$resp = $this->ProcAntAplIngresos($datos);
					if($resp===false){return false;}
				}
				
				if($this->tipopecont!="DC" or $this->tipdoc=='ANTI'){				   			    
					$resp = $this->ProcCmpMovCobroDoc($datos);
					if($resp===false){return false;}
				}
						
				$this->RetProcesada = false;
				//$mensaje = 'El movimiento de cobro del documento '.$this->nro_documento.' tipo '.$this->tipdoc.' se ha generado con exito. ';
				//$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function ProcCmpMovCobroDoc($datos=array()){
			
			switch($this->tipdoc){					
					
					case 'FACT':					    
					    $this->id_fact = $this->id_doc;
						$datos['id_fact'] = $this->id_doc;
						$datos['tipdoc'] = 'FACT';
						$this->tipdoc = 'FACT';
						$resp = $this->extraerdatos_factura($datos);
						if($resp===false){return false;}					
						$resp = $this->ContabilizarMovCobroFact($datos);
						if($resp===false){return false;}
						$resp = $this->ActualizarEstCobFact($datos);
						if($resp===false){return false;}						
						break;
						
					case 'ANTI':
					    $datos['tipdoc'] = 'ANTI';
						$this->tipdoc = 'ANTI';
					    $this->idant = $this->id_doc;
						$datos['idant'] = $this->id_doc;					
						$resp = $this->ContabilizarMovCobroAnt($datos);						
						if($resp===false){return false;}						
						$resp = $this->ActualizarEstCobAnt($datos);
					    if($resp===false){return false;}						
						break;
			}
			
			return true;
	}
	
	
	function ActualizarEstCobAnt($datos=array()){
		if(!$datos['idant']){				
			$mensaje = 'Faltan datos para poder Verificar actualizar el estatus del anticipo';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$saldo = $this->SaldoAnt($datos);
		$datos['estant']=$this->EstAnt;
				
		$resp = $this->ActualizarEstAnticipo($datos);
		if($resp===false){return false;}		
		return true;
	}
	
	
	
	function ActualizarEstCobFact($datos=array()){
				
				if(!$this->DatosFact['total'] or !$datos['id_fact'])
				{				
					$mensaje = 'Faltan datos para poder Verificar el Saldo de la cuenta x cobrar ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}					
								
				$saldo = $this->SaldoFact($datos);
				$param['proc']='COBRADO';										
				if($saldo>0){$param['proc']='NO_COBRADO';}			
				$resp = $this->ActualizarFactura($param);
				if($resp===false){return false;}	
				return true;
	}
	
	function BuscarMontoDocApliFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de documentos de crédito aplicados de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoDocApliFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT (
								 (SELECT COALESCE(sum(monmovdoc),0) as creditos 
								  FROM cxc_dt_movdoc 
								 WHERE tipdocapl='FACT'
								   AND id_docapl='".$datos['id_fact']."'
								   AND codtipdoc='NC'
								   AND estmovdoc!='ANU')
								  - 
								 (SELECT COALESCE(sum(monmovdoc),0) as debitos 
								  FROM cxc_dt_movdoc 
								 WHERE tipdocapl='FACT'
								   AND id_docapl='".$datos['id_fact']."'
								   AND codtipdoc='ND'
								   AND estmovdoc!='ANU')
							   ) AS montotdoc,
							   
							   (SELECT COALESCE(sum(monmovdoc),0) as creditos 
								  FROM cxc_dt_movdoc 
								 WHERE tipdocapl='FACT'
								   AND id_docapl='".$datos['id_fact']."'
								   AND codtipdoc='NC'
								   AND estmovdoc!='ANU') AS creditos,
								   
								(SELECT COALESCE(sum(monmovdoc),0) as debitos 
								  FROM cxc_dt_movdoc 
								 WHERE tipdocapl='FACT'
								   AND id_docapl='".$datos['id_fact']."'
								   AND codtipdoc='ND'
								   AND estmovdoc!='ANU') AS debitos
							   
							   ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoDocApliFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotDocAplFact = $this->rs_data->fields['montotdoc']?$this->rs_data->fields['montotdoc']:0;
				
				$this->CxcCreditosApl = $this->rs_data->fields['creditos'];
				$this->CxcDebitosApl = $this->rs_data->fields['debitos'];
				
				return $this->MonTotDocAplFact;
	}
	
	function BuscarMontoNotasApliFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de documentos de crédito aplicados de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoDocApliFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT (
								 (SELECT COALESCE(sum(total_doc),0) as creditos 
								  FROM cxc_documento 
								 WHERE id_fact='".$datos['id_fact']."'
								   AND codtipdoc='NC'
								   AND estdoccxc!='A')
								  - 
								 (SELECT COALESCE(sum(total_doc),0) as debitos 
								  FROM cxc_documento 
								 WHERE id_fact='".$datos['id_fact']."'
								   AND codtipdoc='ND'
								   AND estdoccxc!='A')
							   ) AS montotdoc,
							   
							   (SELECT COALESCE(sum(total_doc),0) as creditos 
								  FROM cxc_documento 
								 WHERE id_fact='".$datos['id_fact']."'
								   AND codtipdoc='NC'
								   AND estdoccxc!='A') AS creditos,
								   
								(SELECT COALESCE(sum(total_doc),0) as debitos 
								  FROM cxc_documento 
								 WHERE id_fact='".$datos['id_fact']."'
								   AND codtipdoc='ND'
								   AND estdoccxc!='A') AS debitos 
							   
							   ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoDocApliFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotDocAplFact = $this->rs_data->fields['montotdoc']?$this->rs_data->fields['montotdoc']:0;
				
				$this->CxcNotasCreditos = $this->rs_data->fields['creditos'];
				$this->CxcNotasDebitos = $this->rs_data->fields['debitos'];
				
				return $this->MonTotDocAplFact;
	}
	
	function BuscarSaldoDocApliFact($datos=array()){
							
				if(!$datos['id_fact'] or !$datos['codtipdoc'] or !$datos['id_doc']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el saldo del documento aplicado a la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoDocApliFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT COALESCE(sum(monmovdoc),0) as saldo 
								  FROM cxc_dt_movdoc 
								 WHERE codtipdoc='".$datos['codtipdoc']."'
							       AND id_doc='".$datos['id_doc']."'
							       AND tipdocapl='FACT'
								   AND id_docapl='".$datos['id_fact']."'
								   AND estmovdoc!='ANU'
							   ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarSaldoDocApliFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$saldoapl = $this->rs_data->fields['saldo']?$this->rs_data->fields['saldo']:0;
				
				return $saldoapl;
	}
	
	function  AplicadoFact($datos=array()){
		if(!$datos['id_fact'])
		{				
			$mensaje = 'Faltan datos para poder Verificar el Saldo de la Factura';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$MonCob = $this->BuscarMontoCobradoFact($datos);
		if($MonCob===false){return false;}
		$MonRet = $this->BuscarMontoRetencionesFact($datos);
		if($MonRet===false){return false;}		
		$MonApl = $this->BuscarMontoDocApliFact($datos);
		if($MonApl===false){return false;}
		$MonAnt = $this->BuscarMontoAntApliFact($datos);
		if($MonAnt===false){return false;}
					
		$aplicado = $MonCob+$MonRet+$MonApl+$MonAnt;
		$aplicado = $aplicado?$aplicado:0;		
		
		return $aplicado;
	
	}
	
	function  SaldoFact($datos=array()){		
		
		if(!$datos['id_fact'])
		{				
			$mensaje = 'Faltan datos para poder Verificar el Saldo de la Factura';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}	
		
		$MonTot = $this->BuscarMontoTotalFact($datos);
		if($MonCob===false){return false;}
		$MonCob = $this->BuscarMontoCobradoFact($datos);
		if($MonCob===false){return false;}
		$MonRet = $this->BuscarMontoRetencionesFact($datos);
		if($MonRet===false){return false;}		
		$MonApl = $this->BuscarMontoDocApliFact($datos);
		if($MonApl===false){return false;}
		$MonAnt = $this->BuscarMontoAntApliFact($datos);
		if($MonAnt===false){return false;}
		$MonNotas = $this->BuscarMontoNotasApliFact($datos);
		if($MonNotas===false){return false;}		
				
		$saldo = $MonTot-($MonCob+$MonRet+$MonApl+$MonAnt+$MonNotas);
		$saldo = round($saldo,3);
		$saldo = $saldo?$saldo:0;
		
		$this->SaldoMonTot = $MonTot;
		$this->SaldoMonCob = $MonCob;
		$this->SaldoMonRet = $MonRet;
		$this->SaldoMonApl = $MonApl;
		$this->SaldoMonNotas = $MonNotas;
		$this->SaldoMonAnt = $MonAnt;
		$this->CxcCreditos = $this->CxcCreditosApl + $this->CxcNotasCreditos;
		$this->CxcDebitos = $this->CxcDebitosApl + $this->CxcNotasDebitos;
		$this->SaldoCxc = $saldo;
					
		if($saldo<0){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b> 				           			    
						<br>El Saldo de la Factura es Negativo.
						<br><b>METODO:</b> SaldoFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		return $saldo;
	}
	
	function  SaldoAnt($datos=array()){		
		
		if(!$datos['idant'])
		{				
			$mensaje = 'Faltan datos para poder Verificar el Saldo del Anticipo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}	
		
		$datos['id_doc'] = $datos['idant'];
		$MonTot = $this->BuscarMontoTotalAnt($datos);
		if($MonCob===false){return false;}
		$MonCob = $this->BuscarMontoCobradoAnt($datos);
		if($MonCob===false){return false;}
				
		$saldo = $MonTot-$MonCob;
		$saldo = $saldo?$saldo:0;
		
		if($saldo==0){$this->EstAnt = 'COB';}
		if($saldo==$MonTot){$this->EstAnt = 'PEN';}
		if($saldo>0 and $saldo<$MonTot){$this->EstAnt = 'CPA';}
		
		if($saldo<0){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b> 				           			    
						<br>El Saldo del anticipo es Negativo.
						<br><b>METODO:</b> SaldoAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		return $saldo;
	}
		
	function  ModificarMovCobro($datos=array()){				
				
				if(!$datos['id_fact'] or !$datos['nromovcob'])
				{				
					$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$datos = $this->FormatDatosMovCobro($datos);
				if($datos===false){return false;}
									
				$ls_sql = "LOCK TABLE cxc_dt_movcobro IN ACCESS EXCLUSIVE MODE;
				           UPDATE cxc_dt_movcobro
     					   SET nrodocpag='".$datos['nrodocpag']."',
						       nroconform='".$datos['nroconform']."',
						  	   codbancli='".$datos['codbancli']."',
						       nroctabancli='".$datos['nroctabancli']."',
							   fecdocpag='".$datos['fecdocpag']."',
							   nacperpag='".$datos['nacperpag']."',
							   cedperpag='".$datos['cedperpag']."',	
							   estmovcob='".$datos['estmovcob']."',				
							   obscob='".$datos['obscob']."',					   
							   fecmod='".date("Y-m-d")."',
							   usumod='".$_SESSION["la_logusr"]."',
							   horamod='".date("H:i")."'							
						   WHERE codemp='".$this->ls_codemp."' 
						     AND id_doc='".$datos['id_fact']."' 
							 AND nromovcob='".$datos['nromovcob']."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql;
				if($this->rs_data==false)
				{
					
					$metodo = 'ModificarMovCobro';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El movimiento de cobro ha sido modificada con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function VerificarUltimoIngreso($datos=array()){
				
			$metodo = 'VerificarUltimoIngreso';
			
			$ls_sql=" SELECT nroing::integer FROM cxc_ingresos 
			           WHERE codemp = '".$this->ls_codemp."' 
					     AND codsuc = '".$datos['codsuc']."' 
						 AND codcaj = '".$datos['codcaj']."' 
					   ORDER BY nroing::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			$UltNroIng = $rs_data->fields['nroing'];
			
			if($UltNroIng>$datos['nroing']){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se pueden eliminar ingresos intermedios 				           			    
						<br><b>METODO:</b> VerificarUltimoIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);	
				return false;
			}
			
			return true; 
			
	}
	
	function  EliminarMovIngreso($datos=array()){
			
			if(!$datos['codsuc'] or !$datos['codcaj'] or !$datos['nroing']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el ingreso. 				           			    
							<br><b>METODO:</b> EliminarMovIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			if($datos['esting']=='ANU'){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se puede eliminar un movimiento en estatus anulado. 				           			    
							<br><b>METODO:</b> EliminarMovIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$this->id_cliente = $datos['id_cliente'];
			$this->nombre_cliente = $datos['nombre_cliente'];
			
			$resp = $this->VerificarUltimoIngreso($datos);
			if($resp===false){return false;}
			
			$datos['criterio'] = 'por_ingreso';
			$rsmov = $this->ConsultaMovCobros($datos);
			if($rsmov===false){return false;}
			
			if(!$rsmov['rs']->RecordCount()){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron movimientos de cobro para el ingreso. 				           			    
							<br><b>METODO:</b> EliminarMovIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			foreach($rsmov['rs'] as $datosmov){		
				$resp = $this->EliminarMovCobro($datosmov);
				if($resp===false){return false;}
				$resp = $this->EliminarMovBcoAsoc($datosmov);
				if($resp===false){return false;}				
			}
						
			$datos = $this->FormatDatosIngresoCaja($datos);
			if($datos===false){return false;}
								
			$ls_sql = "LOCK TABLE cxc_ingresos IN ACCESS EXCLUSIVE MODE;
			           DELETE FROM cxc_ingresos					
					   WHERE codemp='".$this->ls_codemp."'
						 AND codsuc='".$datos['codsuc']."'
						 AND codcaj='".$datos['codcaj']."' 
						 AND nroing='".$datos['nroing']."'
						 ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql;
			if($this->rs_data==false){				
				$metodo = 'EliminarMovIngreso';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;				
			}
			
			if($this->io_sql->conn->Affected_Rows()<1){
				$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;
			}
			
			$mensaje = 'El ingreso fué eliminado con exito. ';
			$this->io_conexiones->mensajes_ajax($mensaje);
			
			return true;
	}
	
	
	
	function  EliminarMovCobro($datos){
				
				if(!$datos['id_doc'] or !$datos['nromovcob'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codsuc']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Eliminación. 				           			    
							    <br><b>METODO:</b> EliminarMovCobro ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				//$datos = $this->FormatDatosMovCobro($datos);
				//if($datos===false){return false;}
									
				$ls_sql = " 
							LOCK TABLE cxc_dt_movdoc IN ACCESS EXCLUSIVE MODE;
				            DELETE FROM cxc_dt_movdoc
						     WHERE codemp='".$this->ls_codemp."'
						       AND tipdocapl='FACT'
							   AND id_docapl='".$datos['id_doc']."'
							   AND nromovcob='".$datos['nromovcob']."';							   
							 
							LOCK TABLE cxc_dt_anticipos IN ACCESS EXCLUSIVE MODE;
				            DELETE FROM cxc_dt_anticipos
						     WHERE id_fact = '".$datos['id_doc']."'
							   AND nromovcob = '".$datos['nromovcob']."';
							
							LOCK TABLE cxc_dt_movcobro IN ACCESS EXCLUSIVE MODE;
				            DELETE FROM cxc_dt_movcobro
						     WHERE codemp='".$this->ls_codemp."'
						       AND codsuc='".$datos['codsuc']."'
						       AND codcaj='".$datos['codcaj']."' 
						       AND nroing='".$datos['nroing']."'
						       AND tipdoc='".$datos['tipdoc']."' 
						       AND id_doc='".$datos['id_doc']."'
							   AND nromovcob='".$datos['nromovcob']."';  
						";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){					
					$metodo = 'EliminarMovCobro';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$this->tipdoc=$datos['tipdoc'];
				$this->id_doc=$datos['id_doc'];
				$this->nromovcob = $datos['nromovcob'];				
				$this->codsuc=$datos['codsuc'];
				$this->codsuccob=$datos['codsuc'];
				$this->codcaj=$datos['codcaj'];				
				$this->fecmovcob=$datos['fecmovcob'];
				$this->monmovcob=$datos['monmovcob'];
				$this->fecanucob=$datos['fecanucob'];
				
				$resp = $this->ProcCmpElimCob($datos);
				if($resp===false){return false;}
								
				//$mensaje = 'El movimiento de cobro ha sido anulado con exito. ';
				//$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  ProcCmpElimCob($datos=array()){
	
			switch($this->tipdoc){					
					
				case 'FACT':
					$this->id_fact=$this->id_doc;
					$datos['id_fact'] = $this->id_fact;
					$resp = $this->extraerdatos_factura($datos);
					if($resp===false){return false;}
					if($this->DatosFact['tipopecont']=='DC'){return true;}
					$resp = $this->EliminarCmpMovCob($datos);
					if($resp===false){return false;}						
					$resp = $this->ActualizarEstCobFact($datos);
					if($resp===false){return false;}
					$resp = $this->EliminarCmpRet($datos);
					if($resp===false){return false;}
					break;
					
				case 'ANTI':				    
					$this->idant = $this->id_doc;
					$datos['idant'] = $this->idant;					
					$resp = $this->ExtraerDatosAnticipo($datos);
					if($resp===false){return false;}
					$datos['nroant'] = $this->nroant;
					$datos['id_cliente'] = $this->DatosAnt['id_cliente'];										
					$resp = $this->EliminarCmpAnt($datos);
					if($resp===false){return false;}						
					$resp = $this->ActualizarEstCobAnt($datos);
					if($resp===false){return false;}
					if($this->resing){
						$resp = $this->ProcEliminaAnt($datos);
						if($resp===false){return false;}
					}					
					break;
			}
			
			return true;
	}
	
	function VerificarUltimoAnticipo($datos=array()){
							
			$metodo = 'GenerarNroAnticipo';
			$ls_sql=" SELECT nroant::integer 
			            FROM cxc_anticipos 
					   WHERE codemp='".$this->codemp."' 
					     AND id_cliente='".$datos['id_cliente']."'  
					  ORDER BY nroant::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			$UltNroAnt = $rs_data->fields['nroant'];
			
			if($UltNroAnt>$datos['nroant']){				
				return 'ANULAR';
			}
			
			return 'ELIMINAR'; 
			
	}
	
	function  ProcEliminaAnt($datos=array()){
		
		if(!$datos['id_cliente'] or !$datos['nroant'] or !$datos['idant']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Eliminación de Anticipo por Resto de Ingreso. 				           			    
						<br><b>METODO:</b> ProcEliminaAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
					
		$OPE = $this->VerificarUltimoAnticipo($datos);
		if($OPE===false){return false;}
		
		switch($OPE){					
					
				case 'ANULAR':
				    $datos['estant']='ANU';
					$resp = $this->ActualizarEstAnticipo($datos);
					if($resp===false){return false;}
					break;
					
				case 'ELIMINAR':
					$resp = $this->EliminarAnticipo($datos);
					if($resp===false){return false;}					
					break;
			}
	
	}
	
	function  EliminarCmpRet($datos=array()){			
			
			if(!$datos['id_doc'] or !$datos['nromovcob'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codsuc']){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar los comprobantes de retención de la factura. 				           			    
							<br><b>METODO:</b> EliminarCmpRet ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
		
			$ls_sql = "DELETE FROM cxc_cmp_ret										
						WHERE codemp='".$this->ls_codemp."'
						  AND codsuc='".$datos['codsuc']."'
						  AND codcaj='".$datos['codcaj']."'					 
						  AND tipdoc='".$datos['tipdoc']."' 
						  AND id_doc='".$datos['id_doc']."'
						  AND nromovcob='".$datos['nromovcob']."' ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->rs_data==false){				
				$metodo = 'EliminarCmpRet';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;				
			}
			
			return true;
	}
	
	function EliminarCmpCxc($datos=array()){
			
			$metodo = 'EliminarCmpCxc';
			$sqlcriterio="";
			$numretdoc = $this->numretdoc?$this->numretdoc:0;
			$nromovcob = $this->nromovcob?$this->nromovcob:0;
			
			switch($this->procede){
			
					case 'CXCANU':
					case 'CXCFAC':
							$procede='CXCFAC';
							$iddoc =$this->id_fact;
							$numretdoc = 0;
							$nromovcob = 0;
							break;
							
					case 'CXCANC':
					case 'CXCRCB':
							if(!$this->nromovcob){		   		
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el numero de movimiento de cobro de la factura para consultar el detalle contable				           			    
											<br><b>METODO:</b> ConsultaDetContable ';
								$this->io_conexiones->mensajes_ajax($mensaje);																	
								return false;
						   }
						   
							if(!$this->id_doc or !$this->comprobante)
							{				
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar el detalle contable. 				           			    
											<br><b>METODO:</b> '.$metodo;
								$this->io_conexiones->mensajes_ajax($mensaje);																	
								return false;
							}
							
							$procede='CXCRCB';
							$iddoc =$this->id_doc;				
							$numretdoc = 0;
							break;
							
					case 'CXCANR':
					case 'CXCRET':
						    $iddoc	= $this->id_doc;
						    if(!$this->id_doc or !$this->comprobante)
						    {				
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar el detalle contable. 				           			    
											<br><b>METODO:</b> '.$metodo;
								$this->io_conexiones->mensajes_ajax($mensaje);																	
								return false;
						    }
						   
						    if(!$this->nromovcob){		   		
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el numero de movimiento de cobro de la factura para consultar el detalle contable				           			    
											<br><b>METODO:</b> '.$metodo;
								$this->io_conexiones->mensajes_ajax($mensaje);																	
								return false;
						    }
						   
						    if(!$this->numretdoc){		   		
								$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el numero de retención de la factura para consultar el detalle contable				           			    
											<br><b>METODO:</b> '.$metodo;
								$this->io_conexiones->mensajes_ajax($mensaje);																	
								return false;
						    }
							break;
							
					case 'CXCACR':
					case 'CXCCRE':
							$procede='CXCCRE';
							$iddoc =$this->id_doc;
							$numretdoc = 0;
							$nromovcob = 0; 
							break;
				
			}
			
			
			$query_rs = "    DELETE FROM cxc_dt_scg 
							  WHERE codemp='".$this->ls_codemp."' 
								AND id_doc='".$iddoc."'
								AND nromovcob='".$nromovcob."'
								AND numretdoc='".$numretdoc."'
								AND procede='".$this->procede."'
								AND comprobante='".$this->comprobante."'
								AND fecha='".$this->fechacomp."'								
								AND cod_pro='----------'
								AND ced_bene='".$this->ced_bene."'
								AND tipo_destino='B' 
								".$sqlcriterio.";
								 
							DELETE FROM cxc_dt_spi 
							 WHERE codemp='".$this->ls_codemp."' 
								AND id_doc='".$iddoc."'
								AND nromovcob='".$nromovcob."'
								AND numretdoc='".$numretdoc."'
								AND procede='".$this->procede."'
								AND comprobante='".$this->comprobante."'
								AND fecha='".$this->fechacomp."'								
								AND cod_pro='----------'
								AND ced_bene='".$this->ced_bene."'
								AND tipo_destino='B' 
								".$sqlcriterio.";
								
							DELETE FROM cxc_dt_spg 
							  WHERE codemp='".$this->ls_codemp."' 
								AND id_doc='".$iddoc."'
								AND nromovcob='".$nromovcob."'
								AND numretdoc='".$numretdoc."'
								AND procede='".$this->procede."'
								AND comprobante='".$this->comprobante."'
								AND fecha='".$this->fechacomp."'								
								AND cod_pro='----------'
								AND ced_bene='".$this->ced_bene."'
								AND tipo_destino='B' 
								".$sqlcriterio.";
						";
			
			$this->rs_data=$this->io_sql->select($query_rs);			
		
			if($this->rs_data==false)
			{						
				
				$metodo = 'EliminarCmpCxc';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
					
										
			return true;
	}
	
	function EliminarCmpMovCob($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: EliminarCmpMovCob
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de eliminar los comprobantes presupuestario y Contable
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 20/08/2014							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		if($this->AnoFact!=$this->AnoPeriodoAct){
		    $msj = 'Los comprobantes contables y presupuestarios del cobro no serán eliminados por no pertenecer al año actual';
			$this->io_conexiones->mensajes_ajax($msj);
			return true;
		}	
		
		if($this->DatosFact['cxchist']){
		    $msj = 'Los comprobantes no contables y presupuestarios del cobro no serán eliminados por ser una factura histórica';
			$this->io_conexiones->mensajes_ajax($msj);
			return true;
		}	
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		
		if(!$this->id_fact or !$this->codsuc or !$this->codcaj or !$this->nromovcob or !$this->fecmovcob)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar la contabilidad del cobro. 				           			    
						<br><b>METODO:</b> EliminarCmpMovCob ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
				
		$metodo = 'EliminarCmpMovCob';
								
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		
		
		$this->procede='CXCRCB';
		$this->comprobante=$this->NroCmpCobro();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$this->fecmovcob;	
		$this->ced_bene=$this->CedBenefCobro;
		$this->descripcion="COBRO N° ".$this->nromovcob." DE LA FACTURA ".$this->DatosFact['numfact'];		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'TIPO_CONTABILIZA_CXC';
		$this->TipoAfectacion = $this->select_config($param);
		
		$this->classcmp->EsAjax = 1;
		
		$resp = $this->EliminarCmp($datos);
		if($resp===false){return false;}
		
		$resp = $this->EliminarCmpCxc($datos);
		if($resp===false){return false;}		
						
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se eleminó el comprobante de movimiento de cobro de la factura <b>".$this->numfact."</b> ";
		$this->guardar_seguridad();
		
		return true;	
	}
	
	function EliminarCmpAnt($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: EliminarCmpAnt
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de eliminar los comprobantes presupuestario y Contable
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 20/08/2014							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		if(!$this->id_doc or !$this->codsuc or !$this->codcaj or !$this->nromovcob or !$this->idant or !$this->fecmovcob)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para anular cobro del anticipo. 				           			    
						<br><b>METODO:</b> EliminarCmpAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;
		
		$metodo = 'EliminarCmpAnt';
		$this->fechacomp = $this->fecmovcob;
		
		$this->id_fact=0;	
		$this->numfact=0;
		$this->codfact=0;
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		if(!$this->CedBenefCobro){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se ha configurado ningun beneficiario de cobro por defecto . 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->procede='CXCRCB';
		$this->comprobante=$this->NroCmpCobroAnt();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$this->fecmovcob;	
		$this->ced_bene=$this->CedBenefCobro;		
		$this->descripcion="ELIMINACIÓN DEL COBRO N° ".$this->nromovcob." DEL DOCUMENTO TIPO ".$this->tipdoc."  N° DE DOCUMENTO ".$this->nroant;		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		$this->classcmp->EsAjax = 1;
		
		$resp = $this->EliminarCmp($datos);
		if($resp===false){return false;}
		
		$resp = $this->EliminarCmpCxc($datos);
		if($resp===false){return false;}
						
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se eleminó el comprobante de movimiento de cobro del anticipo <b>".$this->nroant." del cliente  ".$this->nombre_cliente."</b> ";
		$this->guardar_seguridad();
		
		return true;	
	}
	
	function ConsultaEstMovCob($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " ORDER BY estmovcob";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_estmovcob ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaEstMovCob';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboEstMovCob($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbestmovcob';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['estmovcob']){$carga = ' Registro '; $id_carga = '';}
				else{$carga = $opciones['descestmovcob'];  $id_carga = $opciones['estmovcob'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaEstMovCob($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["estmovcob"].'" '.$selected.'>'.$fila["descestmovcob"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function ConsultaEstIng($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " ORDER BY esting";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_esting ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaEstIng';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboEstIng($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbesting';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['esting']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['descesting'];  $id_carga = $opciones['esting'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaEstIng($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["esting"].'" '.$selected.'>'.$fila["descesting"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;
	}
	
	function ObtenerCtaCaja($datos=array()){			
										   
		$ls_sql = "SELECT scg_cuenta 
		               FROM cxc_cajas 
		              WHERE codsuc='".$this->codsuc."' 
					    AND codcaj='".$this->codcaj."' ";
		
		$rs_data=$this->io_sql->select($ls_sql);			
				
		if($rs_data===false){			
			$metodo = 'ObtenerCtaCaja';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;			
		}
		
		if(!$rs_data->RecordCount()){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se pudo obtener la cuenta contable de la caja'. 				           			    
					   '<br><b>METODO:</b> ObtenerCtaCaja ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		return $rs_data->fields['scg_cuenta'];
	}
	
	function BuscarScgRetenciones($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contables de las retenciones de la factura. 				           			    
						<br><b>METODO:</b> BuscarScgRetenciones ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT ded.sc_cuenta, sum(cmp.monret) as monto  
							FROM cxc_cmp_ret cmp
							INNER JOIN sigesp_deducciones ded ON ded.codded=cmp.codret
							WHERE cmp.id_doc = '".$datos['id_fact']."'
							  AND cmp.tipdoc='FACT'
							  AND cmp.cmpanu='0'
							GROUP BY ded.sc_cuenta ";
				
				$this->RsScgRet=$this->io_sql->select($ls_sql);			
				
				if($this->RsScgRet==false){
					$metodo = 'BuscarMontoRetencionesFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				return $this->RsScgRet;
	}
	
	function ContabilizarMovCobroFact($opciones=array()){	
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
				
		if(!$this->id_fact or !$this->codsuc or !$this->codcaj or !$this->nromovcob)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar la contabilidad del cobro. 				           			    
						<br><b>METODO:</b> ContabilizarMovCobroFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		$opciones['nromovcob']=$this->nromovcob;		
		$metodo = 'ContabilizarMovCobroFact';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		
		if(!$this->CedBenefCobro){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan la cédula del beneficiario de cobro por defecto 
				                                            para poder generar la contabilidad del cobro. 				           			    
						    <br><b>METODO:</b> ContabilizarMovCobroFact ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;		
		}
				
		$this->procede='CXCRCB';
		$this->comprobante=$this->NroCmpCobro();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$opciones['fecmovcob'];	
		$this->ced_bene=$this->CedBenefCobro;
		$this->descripcion="COBRO N° ".$this->nromovcob." DE LA FACTURA ".$this->DatosFact['numfact'];		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'TIPO_CONTABILIZA_CXC';
		$this->TipoAfectacion = $this->select_config($param);
				
		/**************************************************************************************************************************************/
		/****************************************** PRESUPUESTO DE INGRESO ********************************************************************/
		/**************************************************************************************************************************************/
		$totcred = $this->BuscarMontoNotCreApliMovCob($opciones);
		if($totcred===false){return false;}
		
		$totant = $this->BuscarMontoAntApliMovCob($opciones);
		if($totant===false){return false;}
		
		$saldo = $this->SaldoFact($opciones);
		if(!$this->RetProcesada){$this->MonTotRet=0;}
		$MontoTotCobrado = $this->monmovcob + $this->MonTotRet + $totant + $totcred;		
		$this->FactorCobroSpi = ($MontoTotCobrado)/$this->total;

		//SE OBTIENE EL DETALLE PRESUPUESTARIO DE LA FACTURA Y SE MULTIPILCA POR EL FACTOR DE COBRO		
		$this->procede='CXCFAC';
		$this->comprobante=$this->NroCmpFactura();
		$rsspi = $this->ConsultaDetSPI($this->DatosFact);
		if($rsspi===false){return false;}
				
		$this->procede='CXCRCB';
		$this->comprobante=$this->NroCmpCobro();		
		
		if($rsspi->RecordCount()){
			foreach($rsspi as $spi){							
					$spi['monto'] = round($spi['monto']*$this->FactorCobroSpi,2);
					//echo 'SPI: '.$spi['spi_cuenta'].'-'.$spi['sc_cuenta'].'='.$spi['monto'].'<br>';						
					$ctavalid = $this->ValidarDigIngreso($spi);
					if($ctavalid===false){return false;}			
					$resp = $this->InsertDetSpi($spi);
					if($resp===false){return false;}				
			}
		}		
		
		/**************************************************************************************************************************************/
		/****************************************** CONTABILIDAD ******************************************************************************/
		/**************************************************************************************************************************************/
		//MONTO QUE ENTRA A CAJA POR EL DEBE
		$scg['sc_cuenta'] = $this->ObtenerCtaCaja($opciones);
		$scg['debhab'] = 'D';
		$scg['monto'] = $opciones['monmovcob'];
		//echo 'SCG CAJA: '.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}
		
		//MONTO QUE SE COMPENSA POR RETENCIONES POR EL DEBE
		$rsscgret = $this->BuscarScgRetenciones($opciones);
		if($rsscgret===false){return false;}		
		if($rsscgret->RecordCount() and  $this->RetProcesada){
			foreach($rsscgret as $scgret){									
				$scg['sc_cuenta'] = $scgret['sc_cuenta'];
				$scg['debhab'] = 'D';
				$scg['monto'] = $scgret['monto'];
				//echo 'SCG RET: '.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
				$resp = $this->InsertDetCont($scg);
				if($resp===false){return false;}				
			}
		}
		
		//MONTO QUE SE COMPENSA POR ANTICIPOS POR EL DEBE
		$rsscgant = $this->BuscarScgAntAplicados($opciones);
		if($rsscgant===false){return false;}		
		if($rsscgant->RecordCount()){
			foreach($rsscgant as $scgant){									
				$scg['sc_cuenta'] = $scgant['sc_cuenta'];
				$scg['debhab'] = 'D';
				$scg['monto'] = $scgant['monto'];
				//echo 'SCG ANT: '.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
				$resp = $this->InsertDetCont($scg);
				if($resp===false){return false;}				
			}
		}			
		
		//MONTO DE LAS NOTAS DE CRÉDITO APLICADAS POR EL DEBE		
		if($totcred){
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';		
			$param['entry'] = 'CUENTA_CONTABLE_NOTCRE_APLI';
			$scg['sc_cuenta'] = $this->select_config($param);
			$scg['debhab'] = 'D';
			$scg['monto'] = $totcred;
			//echo 'SCG NC: '.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
			$resp = $this->InsertDetCont($scg);
			if($resp===false){return false;}
		}
		
		$scg['sc_cuenta'] = $this->DatosFact['scg_cliente'];
		$scg['debhab'] = 'H';
		$scg['monto'] = $MontoTotCobrado;
		//echo 'SCG CXC: '.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}
		
		//SI ES EL REGISTRO DE UNA FACTURA HISTÓRICA NO LA CONTABILIZA YA QUE PERTENECE A OTRO EJERCICIO.
		if($this->cxchist){return true;}
							
		$this->cmpspi->EsAjax = 1;		
		
		$resp = $this->GenerarCmp($datos);
		if($resp===false){return false;}
										
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Generó la factura <b>".$this->numfact."</b> ".
						                "Monto: <b>".number_format($opciones['monmovcob'],2,",",".")."</b>";
		$this->guardar_seguridad();
		
		
		return true;
	}
	
	
	
	
	function  AnularIngreso($datos=array()){
			
			if(!$datos['codsuc'] or !$datos['codcaj'] or !$datos['nroing']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder anular el ingreso. 				           			    
							<br><b>METODO:</b> AnularIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$this->id_cliente = $datos['id_cliente'];
			$this->nombre_cliente = $datos['nombre_cliente'];
			
			$datos['criterio'] = 'por_ingreso';
			$rsmov = $this->ConsultaMovCobros($datos);
			if($rsmov===false){return false;}
			
			if(!$rsmov['rs']->RecordCount()){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron movimientos de cobro para el ingreso. 				           			    
							<br><b>METODO:</b> AnularIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			foreach($rsmov['rs'] as $datosmov){				
				$datosmov['fecanucob'] = $datos['fecanuing'];
				$datosmov['conanucob'] = $datos['conanuing'];
				$resp = $this->AnularMovCobro($datosmov);
				if($resp===false){return false;}				
			}
			
			$comp = $this->io_conexiones->compara_fechas($datos['fecanucob'],$datos['fecmovcob']);
			if($comp<0){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La fecha de anulación no puede ser anterior a la fecha de ingreso a caja. 				           			    
							<br><b>METODO:</b> AnularIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$datos = $this->FormatDatosIngresoCaja($datos);
			if($datos===false){return false;}
											
			$ls_sql = "UPDATE cxc_ingresos
					   SET esting='ANU',
						   fecanuing='".$datos['fecanuing']."',				
						   conanuing='".$datos['conanuing']."',					   
						   fecreganu='".date("Y-m-d")."',
						   usureganu='".$_SESSION["la_logusr"]."',
						   horareganu='".date("H:i")."'							
					   WHERE codemp='".$this->ls_codemp."'
						 AND codsuc='".$datos['codsuc']."'
						 AND codcaj='".$datos['codcaj']."' 
						 AND nroing='".$datos['nroing']."'
						 ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql;
			if($this->rs_data==false)
			{
				
				$metodo = 'AnularIngreso';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			if($this->io_sql->conn->Affected_Rows()<1){
					$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
					$this->io_conexiones->mensajes_ajax($mensaje);				
					return false;
			}
			
			//$mensaje = 'El ingreso fué anulado con exito. ';
			//$this->io_conexiones->mensajes_ajax($mensaje);			
			return true;
	}
	
	
	function  AnularMovCobro($datos=array()){				
				
				if(!$datos['id_doc'] or !$datos['nromovcob'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codsuc']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Anulación. 				           			    
							    <br><b>METODO:</b> AnularMovCobro ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				
				if(!$datos['fecanucob']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la fecha de Anulación del cobro. 				           			    
							    <br><b>METODO:</b> AnularMovCobro ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				if(!$datos['conanucob']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el concepto de Anulación del cobro. 				           			    
							    <br><b>METODO:</b> AnularMovCobro ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				$datos['fecmovcob'] = $this->io_conexiones->formatea_fecha_normal($datos['fecmovcob']);		
				$comp = $this->io_conexiones->compara_fechas($datos['fecanucob'],$datos['fecmovcob']);
				if($comp<0){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La fecha de anulación '.$datos['fecanucob'].' no puede ser anterior a la fecha movimiento de cobro '.$this->io_conexiones->formatea_fecha_normal($datos['fecmovcob']).'. 				           			    
								<br><b>METODO:</b> AnularMovCobro ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$datos = $this->FormatDatosMovCobro($datos);
				if($datos===false){return false;}
				
				$resp = $this->AnularMovBcoFact($datos);
				if($resp===false){return false;}
				
													
				$ls_sql = "
						   UPDATE cxc_dt_anticipos
     					   SET estdesc='A'
						   WHERE id_fact = '".$datos['id_doc']."'
							 AND nromovcob = '".$datos['nromovcob']."';
						   
						   UPDATE cxc_dt_movdoc
     					   SET estmovdoc='ANU'
						   WHERE codemp='".$this->ls_codemp."'
						     AND tipdocapl='".$datos['tipdoc']."'
						     AND id_docapl='".$datos['id_doc']."'
						     AND nromovcob='".$datos['nromovcob']."';
						   
						   UPDATE cxc_cmp_ret
     					   SET cmpanu='1',
						       fecanu='".$datos['fecanucob']."',
							   usuanu='".$_SESSION["la_logusr"]."',
							   horaanu='".date("H:i")."'	
						   WHERE codemp='".$this->ls_codemp."'
						     AND tipdoc='".$datos['tipdoc']."'
						     AND id_doc='".$datos['id_doc']."'
						     AND nromovcob='".$datos['nromovcob']."';
						  						   
						   UPDATE cxc_dt_movcobro
     					   SET estmovcob='ANU',
						       fecanucob='".$datos['fecanucob']."',				
							   conanucob='".$datos['conanucob']."',					   
							   fecreganu='".date("Y-m-d")."',
							   usureganu='".$_SESSION["la_logusr"]."',
							   horareganu='".date("H:i")."'							
						   WHERE codemp='".$this->ls_codemp."'
						     AND codsuc='".$datos['codsuc']."'
						     AND codcaj='".$datos['codcaj']."' 
						     AND nroing='".$datos['nroing']."'
						     AND tipdoc='".$datos['tipdoc']."' 
						     AND id_doc='".$datos['id_doc']."'
							 AND nromovcob='".$datos['nromovcob']."' 
						 
						 
						 
						 ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false)
				{
					
					$metodo = 'AnularMovCobro';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$this->tipdoc=$datos['tipdoc'];
				$this->id_doc=$datos['id_doc'];
				$this->nromovcob = $datos['nromovcob'];				
				$this->codsuc=$datos['codsuc'];
				$this->codsuccob=$datos['codsuc'];
				$this->codcaj=$datos['codcaj'];				
				$this->fecmovcob=$datos['fecmovcob'];
				$this->monmovcob=$datos['monmovcob'];
				$this->fecanucob=$datos['fecanucob'];
				
				$resp = $this->ProcCmpAnuCob($datos);
				if($resp===false){return false;}
								
				//$mensaje = 'El movimiento de cobro ha sido anulado con exito. ';
				//$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  ProcCmpAnuCob($datos=array()){
	
			switch($this->tipdoc){					
					
					case 'FACT':
					    $this->id_fact=$this->id_doc;
						$datos['id_fact'] = $this->id_fact;
						$resp = $this->extraerdatos_factura($datos);
						if($resp===false){return false;}
						if($this->DatosFact['tipopecont']=='DEV'){
							$resp = $this->CmpAnulaCobro($datos);
							if($resp===false){return false;}
						}						
						$resp = $this->ActualizarEstCobFact($datos);
						if($resp===false){return false;}
						if($this->DatosFact['tipopecont']=='DEV'){
							$resp = $this->AnularCmpRet($datos);
							if($resp===false){return false;}
						}
						break;
						
					case 'ANTI':
					    $this->idant = $this->id_doc;
						$datos['idant'] = $this->idant;									
						$resp = $this->ExtraerDatosAnticipo($datos);
						$datos['nroant'] = $this->nroant;
						$datos['id_cliente'] = $this->DatosAnt['id_cliente'];
						if($resp===false){return false;}
						$resp = $this->CmpAnulaCobroAnt($datos);
						if($resp===false){return false;}					
						if($this->resing){
							$datos['estant']='ANU';
							$resp = $this->ActualizarEstAnticipo($datos);
							if($resp===false){return false;}
						}
						else{
							$resp = $this->ActualizarEstCobAnt($datos);
							if($resp===false){return false;}
						}						
						break;
			}
			
			return true;
	
	}
	
	function  AnularCmpRet($datos=array()){
			
			if(!$datos['id_doc'] or !$datos['nromovcob'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codsuc']){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder anular los comprobantes de retención de la factura. 				           			    
							<br><b>METODO:</b> AnularCmpRet ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
		
			$ls_sql = "UPDATE cxc_cmp_ret
						  SET cmpanu='1',					 			   
							  fecanu='".date("Y-m-d")."',
							  usuanu='".$_SESSION["la_logusr"]."',
							  horaanu='".date("H:i")."'							
						WHERE codemp='".$this->ls_codemp."'
						  AND codsuc='".$datos['codsuc']."'
						  AND codcaj='".$datos['codcaj']."'					 
						  AND tipdoc='".$datos['tipdoc']."' 
						  AND id_doc='".$datos['id_doc']."'
						  AND nromovcob='".$datos['nromovcob']."' ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->rs_data==false)
			{
				
				$metodo = 'AnularCmpRet';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return true;
	}
	
	function CmpAnulaCobro($opciones=array()){	
				
		if(!$this->id_fact or !$this->codsuc or !$this->codcaj or !$this->nromovcob or !$this->fecanucob)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar la contabilidad de la anulación cobro. 				           			    
						<br><b>METODO:</b> CmpAnulaCobro ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;
		
		$metodo = 'CmpAnulaCobro';
		$this->fechacomp = $this->fecanucob;		
					
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		
		$this->procede='CXCANC';
		$this->comprobante=$this->NroCmpCobro();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$this->fecanucob;	
		$this->ced_bene=$this->CedBenefCobro;
		$this->descripcion="ANULACIÓN DEL COBRO N° ".$this->nromovcob." DEL DOCUMENTO TIPO ".$this->tipdoc."  N° DE DOCUMENTO ".$this->numfact;		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		//ESTABLECE QUE ES UN COMPROBANTE DE ANULACIÓN
		$this->CmpAnula=true;
				
		$this->cmpspi->EsAjax = 1;
		
		$resp = $this->GenerarCmp($opciones);
		if($resp===false){return false;}
				
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Anulo la factura <b>".$this->numfact."</b> ".
						                "Monto: <b>".number_format($this->total,2,",",".")."</b>";
		$this->guardar_seguridad();
		
		
		return true;
	}		
	
	
	function CmpAnulaCobroAnt($opciones=array()){	
				
		if(!$this->id_doc or !$this->codsuc or !$this->codcaj or !$this->nromovcob or !$this->idant)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para anular cobro del anticipo. 				           			    
						<br><b>METODO:</b> CmpAnulaCobroAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;
		
		$metodo = 'CmpAnulaCobroAnt';
		$this->fechacomp = $this->fecanucob;
		
		$this->id_fact=0;	
		$this->numfact=0;
		$this->codfact=0;	
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		if(!$this->CedBenefCobro){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se ha configurado ningun beneficiario de cobro por defecto . 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->procede='CXCANC';
		$this->comprobante=$this->NroCmpCobroAnt();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$this->fecanucob;	
		$this->ced_bene=$this->CedBenefCobro;		
		$this->descripcion="ANULACIÓN DEL COBRO N° ".$this->nromovcob." DEL DOCUMENTO TIPO ".$this->tipdoc."  N° DE DOCUMENTO ";		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		//ESTABLECE QUE ES UN COMPROBANTE DE ANULACIÓN
		$this->CmpAnula=true;
				
		$this->cmpspi->EsAjax = 1;
		
		$resp = $this->GenerarCmp($opciones);
		if($resp===false){return false;}
		
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Anulo la factura <b>".$this->numfact."</b> ".
						                "Monto: <b>".number_format($this->total,2,",",".")."</b>";
		$this->guardar_seguridad();
				
		return true;
	}	
	
	
	
	
	function ContabilizarMovCobroAnt($datos=array()){
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		
		if(!$this->id_doc or !$this->codsuc or !$this->codcaj or !$this->nromovcob or !$this->idant or !$this->nroant )
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar la contabilidad del cobro. 				           			    
						<br><b>METODO:</b> ContabilizarMovCobroAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
				
		$metodo = 'ContabilizarMovCobroAnt';
				
		$this->id_fact=0;	
		$this->numfact=0;
		$this->codfact=0;
						
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		if(!$this->CedBenefCobro){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se ha configurado ningun beneficiario de cobro por defecto . 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CUENTA_CONTABLE_ANTICIPO';
		$this->ScgAnticipo = $this->select_config($param);
		if(!$this->ScgAnticipo){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se ha configurado ninguna cuenta de contable de anticipo por defecto . 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->procede='CXCRCB';
		$this->comprobante=$this->NroCmpCobroAnt($datos);
		if($this->comprobante===false){return false;}
		$this->fechacomp=$datos['fecmovcob'];	
		$this->ced_bene=$this->CedBenefCobro;
		$this->descripcion="COBRO N° ".$this->nromovcob." DEL ANTICIPO N°".$this->nroant." DEL CLIENTE ".$this->nombre_cliente;		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		/**************************************************************************************************************************************/
		/****************************************** CONTABILIDAD ******************************************************************************/
		/**************************************************************************************************************************************/
		//MONTO QUE ENTRA A CAJA POR EL DEBE
		$scg['sc_cuenta'] = $this->ObtenerCtaCaja($opciones);
		$scg['debhab'] = 'D';
		$scg['monto'] = $datos['monmovcob'];
		//echo 'SCG CAJA: '.$this->comprobante.'---->'.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}
				
		//MONTO DEL ANTICIPO POR EL HABER DE LA CUENTA
		$scg['sc_cuenta'] = $this->ScgAnticipo;
		$scg['debhab'] = 'H';
		$scg['monto'] = $datos['monmovcob'];
		//echo 'SCG ANT: '.$this->comprobante.'---->'.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}
							
		$this->cmpspi->EsAjax = 1;		
		
		$resp = $this->GenerarCmp($datos);
		if($resp===false){return false;}
						
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Generó y contabilizó:   <b>".$this->descripcion."</b> ".
						                "Monto: <b>".number_format($opciones['monmovcob'],2,",",".")."</b>";
		$this->guardar_seguridad();
		//echo 'ok';
		return true;
	}
	
	function  CalcularVencimientoCxc($datos=array()){
			
			if($datos['opespi']!='DEV'){
			    $this->DiasVenCxc=0;
				$this->DescEstVenCxc = "NO ES CXC";
				$this->ColorEstVenCxc='#FFFFFF';
				return true;
			}
			
			if(!$datos['fecfact']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la fecha de la factura. 				           			    
					<br><b>METODO:</b> CalcularVencimientoCxc ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			if(!$datos['diascredito']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan los días de crédito de la condición de pago de la factura. 				           			    
					<br><b>METODO:</b> CalcularVencimientoCxc ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			if(!$datos['id_estfact']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el estatus de la factura para poder calcular el vencimiento de la misma. 				           			    
					<br><b>METODO:</b> CalcularVencimientoCxc ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$DiasVenCxc=0;
			$this->DiasVenCxc=0;
			$this->DescEstVenCxc = "VIGENTE";
			$this->ColorEstVenCxc='#FFFFFF';
			$fecfact = $this->io_conexiones->formatea_fecha_normal($datos['fecfact']);
			$diasfact = $this->io_conexiones->calcula_dias($fecfact,date("d/m/Y"));			
			$calcven = $datos['diascredito']-$diasfact;
			
			$DiasVenCxc = $calcven>=0?0:abs($calcven);
									
			if($DiasVenCxc>0 and $datos['id_estfact']!=4){
					$this->DiasVenCxc=$DiasVenCxc;
					$this->DescEstVenCxc = "VENCIDO";
					$this->ColorEstVenCxc='#FFFFBB';
			}
			
			if($datos['id_estfact']==4){
				$this->DescEstVenCxc = "CERRADO";
				$this->ColorEstVenCxc='#DAE9F3';			
			}
			
			return true;
	}
	
	
	
	
	
	function EncabezadoRepLisCxc($parametro=array()){	
	
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> LISTADO DE CUENTAS POR COBRAR '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N°</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FECHA </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CLIENTE </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">EST. FACT.</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">EST. CXC.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">COND</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TASCAM</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONTO'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][10].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONTO COB.'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][11].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CRED.'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][12].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">DEBIT.'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][13].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">SALDO'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepLisCxc($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['total_monto'] = number_format($datos['total_monto']/$this->TasaCambio,2,',','.');
			$datos['total_cobrado'] = number_format($datos['total_cobrado']/$this->TasaCambio,2,',','.');
			$datos['total_cred'] = number_format($datos['total_cred']/$this->TasaCambio,2,',','.');
			$datos['total_debit'] = number_format($datos['total_debit']/$this->TasaCambio,2,',','.');
			$datos['total_saldo'] = number_format($datos['total_saldo']/$this->TasaCambio,2,',','.');
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8];
			$fin_tabla = '   <tr>
							   <td colspan="9"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][9]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_monto'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][10]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_cobrado'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_cred'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][12]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_debit'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][13]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_saldo'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepLisCxc($datos){			
			
			
			$datos['creditos'] = number_format($datos['creditos'],2,',','.');
			$datos['debitos'] = number_format($datos['debitos'],2,',','.');
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nombre_cliente']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['descestfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($this->DescEstVenCxc).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['desccondpago']).'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['abrmon']).'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['tascam']).'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['total']).'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['moncob']).'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['creditos']).'</font></td>
							<td width="'.$this->RepParam['ancho'][12].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['debitos']).'</font></td>
							<td width="'.$this->RepParam['ancho'][13].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['saldo']).'</font></td>
						 </tr>';
			
			return $filas;
	}
	
	
	function RepLisCxc($datos=array()){
			
			
			$datos['criterio']='por_listado_cxc';
			$resul = $this->consulta_facturas($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return "";}
			
			$total=0;
			$total['total_monto']=0;
			$total['total_cobrado']=0;
			$total['total_saldo']=0;
					
			foreach($resul['rs'] as $datosFila){
				
				
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				
				$datosFila['id_fact'] = $datosFila['id_fact']?$datosFila['id_fact']:$datosFila['id_doc'];
				
				//$aplicado = $this->AplicadoFact($datosFila);
				$Saldo = $this->SaldoFact($datosFila);
				if($Saldo===false){return false;}
				
				$datosFila['moncob'] = $this->SaldoMonCob;
				$datosFila['saldo'] = $Saldo;
				
				$datosFila['creditos'] = $this->CxcCreditos;
				$datosFila['debitos'] = $this->CxcDebitos;
				
				$totales['total_monto'] += $datosFila['total'];
				$totales['total_cobrado'] += $datosFila['moncob'];
				$totales['total_cred'] += $datosFila['creditos'];
				$totales['total_debit'] += $datosFila['debitos'];
				$totales['total_saldo'] += $datosFila['saldo'];
				
				$this->CalcularVencimientoCxc($datosFila);
				
				if($this->DiasVenCxc){$color_fila='style="background-color:'.$this->ColorEstVenCxc.'"';}
				
				$DatosFac = $this->FormatDatosFactPresent($datosFila);
				
				$filas .= $this->FilaRepLisCxc($DatosFac);			
			}
			
			$this->TotalRepLisCxc['total_monto'] += $totales['total_monto'];
			$this->TotalRepLisCxc['total_cobrado'] += $totales['total_cobrado'];
			$this->TotalRepLisCxc['total_cred'] += $totales['total_cred'];
			$this->TotalRepLisCxc['total_debit'] += $totales['total_debit'];
			$this->TotalRepLisCxc['total_saldo'] += $totales['total_saldo'];
													
			$reporte = $this->EncabezadoRepLisCxc().$filas.$this->FinTablaRepLisCxc($totales);
						
			return $reporte;
	
	}
	
	function TotalesRepLisCxcMultimon($datos=array()){	
			
			$datos['total_monto'] = number_format($this->TotalRepLisCxc['total_monto'],2,',','.');
			$datos['total_cobrado'] = number_format($this->TotalRepLisCxc['total_cobrado'],2,',','.');
			$datos['total_cred'] = number_format($this->TotalRepLisCxc['total_cred'],2,',','.');
			$datos['total_debit'] = number_format($this->TotalRepLisCxc['total_debit'],2,',','.');
			$datos['total_saldo'] = number_format($this->TotalRepLisCxc['total_saldo'],2,',','.');
						
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8]+
						$this->RepParam['ancho'][9];
			
			$fin_tabla = '  <p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1"> 
							<tr bgcolor="#DDDDDD">
							   <td bgcolor="#FFFFFF" colspan="9"  width="'.($TotAncho).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES ('.$this->AbrMonDef.'):</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][10]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['total_monto'].'</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['total_cobrado'].'</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][12]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['total_saldo'].'</b></font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	
	function RepLisCxcMultimon($datos=array()){
			
			if(!$this->RepMultiMon){
				$infoRep = $this->RepLisCxc($datos);
				return $infoRep;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'VALIDACIÓN DE DATOS: No se encontraron facturas !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
			
			$this->TotalRepLisCxc['total_monto'] = 0;
			$this->TotalRepLisCxc['total_cobrado'] = 0;
			$this->TotalRepLisCxc['total_saldo'] = 0;
			
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$infoRep = $this->RepLisCxc($datos);	
				if($infoRep===false){return false;}				
				if($infoRep){$rep = $rep.$infoRep.'<br />';}		
			}
			
			return $rep.$this->TotalesRepLisCxcMultimon();
					
	}
	
	function EncabezadoRepLisCxcExcel($parametro=array()){	
	    
		$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
		$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)
		$this->PHPExcel->ColorLinea('A','P','FFEEEEEE');
		$this->PHPExcel->CeldaTitulo('D','LISTADO DE CXC '.$TxtMoneda,false,20,'left','FFEEEEEE',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->CeldaTitulo('A','N°',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('B','FECHA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('C','CLIENTE',false,20,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('D','CONCEPTO',false,20,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('E','EST. FACT.',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('F','EST. CXC',true,0,'center','FFCCCCCC',true);		
		$this->PHPExcel->CeldaTitulo('G','COND',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('H','MON',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('I','TASA CAMB.',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('J','MONTO'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('K','MON. COB.'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('L','RETEN.'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('M','ANTICIP.'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('N','CRED.'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('O','DEBIT.'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('P','SALDO'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->nroFila++;					
		return true; 
	}
	
	function FinTablaRepLisCxcExcel($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
			$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			
			$datos['total_monto'] = round($datos['total_monto']/$this->TasaCambio,2);
			$datos['total_cobrado'] = round($datos['total_cobrado']/$this->TasaCambio,2);
			$datos['total_ret'] = round($datos['total_ret']/$this->TasaCambio,2);
			$datos['total_ant'] = round($datos['total_ant']/$this->TasaCambio,2);
			$datos['total_cred'] = round($datos['total_cred']/$this->TasaCambio,2);
			$datos['total_debit'] = round($datos['total_debit']/$this->TasaCambio,2);
			$datos['total_saldo'] = round($datos['total_saldo']/$this->TasaCambio,2);
			
			$this->PHPExcel->CeldaTitulo('I','TOTALES:'.$TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('J',$datos['total_monto'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('K',$datos['total_cobrado'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('L',$datos['total_ret'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('M',$datos['total_ant'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('N',$datos['total_cred'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('O',$datos['total_debit'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('P',$datos['total_saldo'],true,0,'number','FFCCCCCC');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}
	
	function FilaRepLisCxcExcel($datos){			
			
			$datos['abrmon'] =$datos['abrmon']=='€'?'EURO':$datos['abrmon'];		
			$this->PHPExcel->CeldaTitulo('A',$datos['numfact'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('B',$datos['fecfact'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('C',$datos['nombre_cliente'],false,20,'left');
			$this->PHPExcel->CeldaTitulo('D',$datos['descripfact'],false,20,'left');
			$this->PHPExcel->CeldaTitulo('E',$datos['descestfact'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('F',$this->DescEstVenCxc,true,0,'left');
			$this->PHPExcel->CeldaTitulo('G',$datos['desccondpago'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('H',$datos['abrmon'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('I',$this->formato_numerico_us($datos['tascam']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('J',$this->formato_numerico_us($datos['total']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('K',$this->formato_numerico_us($datos['moncob']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('L',$datos['reten'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('M',$datos['anticipos'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('N',$datos['creditos'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('O',$datos['debitos'],true,0,'number');
			$this->PHPExcel->CeldaTitulo('P',$this->formato_numerico_us($datos['saldo']),true,0,'number');
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
	
	
	function RepLisCxcExcel($datos=array()){
						
			$datos['criterio']='por_listado_cxc';
			$resul = $this->consulta_facturas($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return 0;}
			
			$total=0;
			$totales['total_monto']=0;
			$totales['total_cobrado']=0;
			$totales['total_saldo']=0;
			
			$resp = $this->EncabezadoRepLisCxcExcel();
			if($resp===false){return false;}
					
			foreach($resul['rs'] as $datosFila){
										
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
								
				//$aplicado = $this->AplicadoFact($datosFila);
				$Saldo = $this->SaldoFact($datosFila);
				if($Saldo===false){return false;}
				
				$datosFila['moncob'] = $this->SaldoMonCob;
				$datosFila['saldo'] = $Saldo;
				
				$datosFila['creditos'] = $this->CxcCreditos;
				$datosFila['debitos'] = $this->CxcDebitos;
				$datosFila['reten'] = $this->SaldoMonRet;
				$datosFila['anticipos'] = $this->SaldoMonAnt;
				
				$totales['total_monto'] += $datosFila['total'];
				$totales['total_cobrado'] += $datosFila['moncob'];
				$totales['total_ret'] += $datosFila['reten'];
				$totales['total_ant'] += $datosFila['anticipos'];
				$totales['total_cred'] += $datosFila['creditos'];
				$totales['total_debit'] += $datosFila['debitos'];
				$totales['total_saldo'] += $datosFila['saldo'];
				
				$this->CalcularVencimientoCxc($datosFila);
				
				if($this->DiasVenCxc){$color_fila='style="background-color:'.$this->ColorEstVenCxc.'"';}
				
				$DatosFac = $this->FormatDatosFactPresent($datosFila);
				
				$resp=$this->FilaRepLisCxcExcel($DatosFac);
				if($resp===false){return false;}			
			}
			
			$this->TotalRepLisCxc['total_monto'] += $totales['total_monto'];
			$this->TotalRepLisCxc['total_cobrado'] += $totales['total_cobrado'];
			$this->TotalRepLisCxc['total_ret'] += $totales['total_ret'];
			$this->TotalRepLisCxc['total_ant'] += $totales['total_ant'];
			$this->TotalRepLisCxc['total_cred'] += $totales['total_cred'];
			$this->TotalRepLisCxc['total_debit'] += $totales['total_debit'];
			$this->TotalRepLisCxc['total_saldo'] += $totales['total_saldo'];
			
			$resp=$this->FinTablaRepLisCxcExcel($totales);									
			if($resp===false){return false;}
						
			return true;
	
	}
	
	function TotalesRepLisCxcMultimonExcel($datos=array()){	
			
			$datos['total_monto'] = round($this->TotalRepLisCxc['total_monto'],2);
			$datos['total_cobrado'] = round($this->TotalRepLisCxc['total_cobrado'],2);
			$datos['total_ret'] = round($this->TotalRepLisCxc['total_ret'],2);
			$datos['total_ant'] = round($this->TotalRepLisCxc['total_ant'],2);
			$datos['total_cred'] = round($this->TotalRepLisCxc['total_cred'],2);
			$datos['total_debit'] = round($this->TotalRepLisCxc['total_debit'],2);
			$datos['total_saldo'] = round($this->TotalRepLisCxc['total_saldo'],2);
						
			$this->PHPExcel->CeldaTitulo('I','TOTALES('.$this->AbrMonDef.'):',true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('J',$datos['total_monto'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('K',$datos['total_cobrado'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('L',$datos['total_ret'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('M',$datos['total_ant'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('N',$datos['total_cred'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('O',$datos['total_debit'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('P',$datos['total_saldo'],true,0,'number','FFFFFFDD',true);
		    $this->PHPExcel->nroFila++;	
			return true; 
			
	}
		
	function RepLisCxcMultimonExcel($datos=array()){
			
			if(!$this->RepMultiMon){
				$resp = $this->RepLisCxcExcel($datos);
				if($resp===false){return false;}
				return true;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'VALIDACIÓN DE DATOS: No se encontraron Cuentas por Cobrar !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
			
			$this->TotalRepLisCxc['total_monto'] = 0;
			$this->TotalRepLisCxc['total_cobrado'] = 0;
			$this->TotalRepLisCxc['total_saldo'] = 0;
			
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$resp = $this->ConfPresentMoneda($moneda);
				if($resp===false){return false;}							
				$resp = $this->RepLisCxcExcel($datos);	
				if($resp===false){return false;}	
				$this->PHPExcel->nroFila++;	
			}
			
			$resp=$this->TotalesRepLisCxcMultimonExcel();
			if($resp===false){return false;}
			
			return true;					
	}
	
	function EncabezadoRepMovCob($parametro=array()){	
	
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado']['tamaño'].'">					            
								<b> MOVIMIENTO DE COBRO '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">SUC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CAJA </font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NUMDOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CLIENTE</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TIPDOC</font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MOV</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FECHA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FORM. COB.</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NUMDOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][10].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">EST</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][11].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][12].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TASA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][13].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONTO ('.$this->AbrMonDef.') </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][14].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONEXT'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepMovCob($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['totmonloc'] = number_format($datos['totmonloc'],2,',','.');
			$datos['totmonext'] = number_format($datos['totmonext'],2,',','.');
			
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8]+
						$this->RepParam['ancho'][9]+
						$this->RepParam['ancho'][10]+
						$this->RepParam['ancho'][11]+
						$this->RepParam['ancho'][12];
									
			$fin_tabla = '   <tr>
							   <td colspan="12"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][13]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonloc'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][14]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonext'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepMovCob($datos){	
			
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['sigsuc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['codcaj']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nombre_cliente']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['tipdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nromovcob']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][7].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecmovcob']).'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['denforpag']).'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nrodocpag']).'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['estmovcob']).'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['abrmon']).'</font></td>
							<td width="'.$this->RepParam['ancho'][12].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['tascam']).'</font></td>
							<td width="'.$this->RepParam['ancho'][13].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['totmonloc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][14].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['totmonext']).'</font></td>
						 </tr>';
			
			return $filas;
	}
	
	
	function RepMovCob($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->ConsultaMovCobros($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return "";}
			
			$total=0;
			$total['totmonloc']=0;
			$total['totmonext']=0;
								
			foreach($resul['rs'] as $datosFila){
			
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				
				$datosFila['totmonloc'] = $datosFila['monmovcob'];//MONTO EN MONEDA LOCAL
				$datosFila['totmonext'] = ($this->CodMonDef==$datosFila['codmon'])?0:($datosFila['monmovcob']/$this->TasaCambio);//MONTO EN MONEDA EXTRANJERA
												
				$totales['totmonloc'] += $datosFila['totmonloc'];
				$totales['totmonext'] += $datosFila['totmonext'];
				$totales['totmonextloc'] += ($datosFila['totmonext']*$this->TasaCambio);
								
				$datosRow = $this->FormatDatosCobPresent($datosFila);				
				$filas .= $this->FilaRepMovCob($datosRow);			
			}
			
			$this->TotalMovCob['totmonloc'] += $totales['totmonloc'];
			$this->TotalMovCob['totmonext'] += $totales['totmonextloc'];
																
			$reporte = $this->EncabezadoRepMovCob().$filas.$this->FinTablaRepMovCob($totales);
						
			return $reporte;
	
	}
	
	function TotalesRepMovCobMultimon($datos=array()){	
			
			$datos['totmonext'] = number_format($this->TotalMovCob['totmonext'],2,',','.');
			$datos['totmonloc'] = number_format($this->TotalMovCob['totmonloc'],2,',','.');
						
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8]+
						$this->RepParam['ancho'][9]+
						$this->RepParam['ancho'][10]+
						$this->RepParam['ancho'][11]+
						$this->RepParam['ancho'][12];
			
			$fin_tabla = '  <p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1"> 
							<tr bgcolor="#DDDDDD">
							   <td bgcolor="#FFFFFF" colspan="12"  width="'.($TotAncho).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES ('.$this->AbrMonDef.'):</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][13]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['totmonloc'].'</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][14]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"><b>'.$datos['totmonext'].'</b></font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	
	function RepMovCobMultimon($datos=array()){
			
			if(!$this->RepMultiMon){
				$infoRep = $this->RepMovCob($datos);
				return $infoRep;
			}
			
			$rsm = $this->ConsultarMonedasMovCob($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'VALIDACIÓN DE DATOS: No se encontraron Movimientos de Cobro !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
			
			$this->TotalMovCob['totmonext'] = 0;
			$this->TotalMovCob['totmonloc'] = 0;
			
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$infoRep = $this->RepMovCob($datos);	
				if($infoRep===false){return false;}				
				if($infoRep){$rep = $rep.$infoRep.'<br />';}		
			}
			
			return $rep.$this->TotalesRepMovCobMultimon();
					
	}
	
	function ConsultarMonedasMovCob($datos=array()){
			$criterio="";
			if($datos['codmon']){$criterio = $criterio." AND mc.codmon = '".$datos['codmon']."' ";}
			if($datos['codart']){
					$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
																FROM cxc_detalle 
															   WHERE id_tipodetalle='ARTIC'
																 AND codproceso='FACTURA'
																 AND coddetalle='".$datos['codart']."' 
															  ) ";
			}
			
			if($datos['codser']){
					$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
																FROM cxc_detalle 
															   WHERE id_tipodetalle='SERVI'
																 AND codproceso='FACTURA'
																 AND coddetalle='".$datos['codser']."' 
															  ) ";
			}
			
			if($datos['codconfac']){
					$criterio = $criterio." AND f.id_fact IN (SELECT DISTINCT id_fact 
																FROM cxc_detalle 
															   WHERE id_tipodetalle='CONCE'
																 AND codproceso='FACTURA'
																 AND coddetalle='".$datos['codconfac']."' 
															  ) ";
			}
			if($datos['codsuc']){$criterio = $criterio." AND mc.codsuc = '".$datos['codsuc']."' ";}
		    if($datos['codcaj']){$criterio = $criterio." AND mc.codcaj = '".$datos['codcaj']."' ";}			
			if($datos['id_transp']){$criterio = $criterio." AND f.id_transp = '".$datos['id_transp']."' ";}
			if($datos['codmon']){$criterio = $criterio." AND mc.codmon = '".$datos['codmon']."' ";}
			if($datos['id_estfact']){$criterio = $criterio." AND f.id_estfact = '".$datos['id_estfact']."' ";}
			if($datos['id_condpago']){$criterio = $criterio." AND f.id_condpago = '".$datos['id_condpago']."' ";}
			if($datos['numfact']){$criterio = $criterio." AND f.numfact = '".$datos['numfact']."' ";}
			if($datos['codfact']){$criterio = $criterio." AND f.codfact ".$this->postgres_ilike."LIKE('%".$datos['codfact']."%') ";}				
			if($datos['numcont']){$criterio = $criterio." AND f.numcont ".$this->postgres_ilike."LIKE('%".$datos['numcont']."%') ";}
			
			$ls_sql = " SELECT DISTINCT ON (mc.codmon) mc.codmon,m.denmon,m.abrmon 
			            FROM cxc_dt_movcobro mc
			            INNER JOIN sigesp_moneda m ON m.codmon=mc.codmon
						INNER JOIN cxc_factura f ON f.codemp = mc.codemp AND f.id_fact = mc.id_doc
						WHERE mc.codmon!=''
						".$criterio."
						ORDER BY mc.codmon
					  ";
			
			$this->RsMultiMon=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->RsMultiMon==false)
			{
				
				$metodo = 'ConsultarMonedasFacturas';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return $this->RsMultiMon;
	}
	
	function EncabezadoRepMovCobExcel($parametro=array()){	
	    
		$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
		$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)
		$this->PHPExcel->ColorLinea('A','T','FFEEEEEE');
		$this->PHPExcel->CeldaTitulo('G','MOVIMIENTOS DE COBRO'.$TxtMoneda,false,10,'left','FFEEEEEE',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->ColorLinea('A','T','FFF3F3FF');
		$this->PHPExcel->CeldaTitulo('G','DATOS MOV. COBRO',false,10,'left','FFF3F3FF',true);
		//$this->PHPExcel->ColorLinea('N','X','FFFAFAEE');
		//$this->PHPExcel->CeldaTitulo('R','DATOS MOV. COBRO',false,10,'left','FFFAFAEE',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->CeldaTitulo('A','SUC',false,10,'center','FFCCCCCC',true);		
		$this->PHPExcel->CeldaTitulo('B','CAJA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('C','NROING',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('D','TIPO',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('E','DOC',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('F','N° CONT',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('G','FEC. DOC',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('H','EST. DOC',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('I','MONTO DOC',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('J','MOV',true,0,'center','FFCCCCCC',true);		
		$this->PHPExcel->CeldaTitulo('K','FEC COB',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('L','CLIENTE',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('M','FORM. COB.',false,10,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('N','NUMDOC',false,10,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('O','EST',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('P','MON',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('Q','OBSERV.',false,10,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('R','TASA',false,10,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('S','MONTO('.$this->AbrMonDef.')',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('T','MONEXT'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->nroFila++;					
		return true; 
	}
	
	function FinTablaRepMovCobExcel($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
			$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
						
			$this->PHPExcel->CeldaTitulo('R','TOTALES:'.$TxtMoneda,false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('S',$datos['totmonloc'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('T',$datos['totmonext'],true,0,'number','FFCCCCCC');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}

	function FilaRepMovCobExcel($datos){			
			
			$datos['abrmon'] =$datos['abrmon']=='€'?'EURO':$datos['abrmon'];		
						
			$this->PHPExcel->CeldaTitulo('A',$datos['sigsuc'],false,10,'center');
			$this->PHPExcel->CeldaTitulo('B'," ".$datos['codcaj'],false,10,'center');
			$this->PHPExcel->CeldaTitulo('C',$datos['nroing'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('D',$datos['tipdoc'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('E',$datos['nro_docm'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('F',$datos['cont_docm'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('G',$datos['fec_docm'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('H',$datos['est_docm'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('I',$datos['monto_docm'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('O',$datos['nromovcob'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('K',$datos['fecmovcob'],true,0,'center');			
			$this->PHPExcel->CeldaTitulo('L',$datos['nombre_cliente'],true,0,'left');	
			$this->PHPExcel->CeldaTitulo('M',$datos['denforpag'],false,10,'center');
			$this->PHPExcel->CeldaTitulo('N',$datos['nrodocpag'],false,10,'center');
			$this->PHPExcel->CeldaTitulo('O',$datos['estmovcob'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('P',$datos['abrmon'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('Q',$datos['obscob'],false,10,'center');
			$this->PHPExcel->CeldaTitulo('R',$this->formato_numerico_us($datos['tascam']),false,10,'number');
			$this->PHPExcel->CeldaTitulo('S',$this->formato_numerico_us($datos['totmonloc']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('T',$this->formato_numerico_us($datos['totmonext']),true,0,'number');
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
	
	
	function RepMovCobExcel($datos=array()){
						
			$datos['criterio']='por_listado';
			$resul = $this->ConsultaMovCobros($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return "";}
			
			$total=0;
			$total['totmonloc']=0;
			$total['totmonext']=0;
			
			$resp = $this->EncabezadoRepMovCobExcel();
			if($resp===false){return false;}
								
			foreach($resul['rs'] as $datosFila){
			
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				
				$datosFila['id_fact'] = $datosFila['id_fact']?$datosFila['id_fact']:$datosFila['id_doc'];
								
				$cobrado = $this->SaldoFact($datosFila);
				if($cobrado===false){return false;}				
				$datosFila['moncobfact'] = $cobrado;
				$datosFila['saldofact'] = $datosFila['total'] - $cobrado;								
				$this->CalcularVencimientoCxc($datosFila);
				$DatosFac = $this->FormatDatosFactPresent($datosFila);
								
				$datosFila['totmonloc'] = $datosFila['monmovcob'];//MONTO EN MONEDA LOCAL
				$datosFila['totmonext'] = ($this->CodMonDef==$datosFila['codmon'])?0:($datosFila['monmovcob']/$this->TasaCambio);//MONTO EN MONEDA EXTRANJERA
												
				$totales['totmonloc'] += $datosFila['totmonloc'];
				$totales['totmonext'] += $datosFila['totmonext'];
				$totales['totmonextloc'] += ($datosFila['totmonext']*$this->TasaCambio);
				
				switch($datosFila['tipdoc']){
						case 'ANTI':
						    $datosFila['nro_docm'] = $datosFila['nroant'];
							$datosFila['cont_docm'] = $datosFila['nrocontrato'];
							$datosFila['monto_docm'] = $datosFila['monant'];
							$datosFila['fec_docm'] = $datosFila['fecant'];
							$datosFila['est_docm'] = $datosFila['denestant'];
							break;
							
						case 'FACT':
						 	$datosFila['nro_docm'] = $datosFila['numfact'];
							$datosFila['cont_docm'] = $datosFila['numcont'];
							$datosFila['monto_docm'] = $datosFila['total'];
							$datosFila['fec_docm'] = $datosFila['fecfact'];
							$datosFila['est_docm'] = $datosFila['descestfact'];
							break;
				}	
						
							
				$datosRow = $this->FormatDatosCobPresent($datosFila);
				
				$resp=$this->FilaRepMovCobExcel($datosRow);
				if($resp===false){return false;}			
			}
			
			$this->TotalMovCob['totmonloc'] += $totales['totmonloc'];
			$this->TotalMovCob['totmonext'] += $totales['totmonextloc'];
			
			$resp=$this->FinTablaRepMovCobExcel($totales);									
			if($resp===false){return false;}
						
			return true;
	
	}
	
	function TotalesRepMovCobMultimonExcel($datos=array()){	
			
			$datos['totmonloc'] = $this->TotalMovCob['totmonloc'];
			$datos['totmonext'] = $this->TotalMovCob['totmonext'];
									
			$this->PHPExcel->CeldaTitulo('R','TOTALES('.$this->AbrMonDef.'):',false,10,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('S',$datos['totmonloc'],true,0,'number','FFFFFFDD',true);
			$this->PHPExcel->CeldaTitulo('T',$datos['totmonext'],true,0,'number','FFFFFFDD',true);			
		    $this->PHPExcel->nroFila++;	
			return true; 
			
	}
		
	function RepMovCobMultimonExcel($datos=array()){
			
			if(!$this->RepMultiMon){
				$resp = $this->RepMovCobExcel($datos);
				if($resp===false){return false;}
				return true;
			}
			
			$rsm = $this->ConsultarMonedasMovCob($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'VALIDACIÓN DE DATOS: No se encontraron Movimientos de Cobro !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
			
			$this->TotalMovCob['totmonext'] = 0;
			$this->TotalMovCob['totmonloc'] = 0;
			
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$resp = $this->ConfPresentMoneda($moneda);
				if($resp===false){return false;}							
				$resp = $this->RepMovCobExcel($datos);	
				if($resp===false){return false;}	
				$this->PHPExcel->nroFila++;	
			}
			
			$resp=$this->TotalesRepMovCobMultimonExcel();
			if($resp===false){return false;}
			
			return true;					
	}
	
	
	function EncabezadoRepIngresos($parametro=array()){	
	
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> LISTADO DE INGRESOS A CAJA '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">SUC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CAJA </font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NUM</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CLIENTE</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">EST</font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TIP COB</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° DOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FECHA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][10].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TASA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][11].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONTO ('.$this->AbrMonDef.') </font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][12].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONEXT'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepIngresos($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['totmonloc'] = number_format($datos['totmonloc'],2,',','.');
			$datos['totmonext'] = number_format($datos['totmonext'],2,',','.');
			
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8]+
						$this->RepParam['ancho'][9]+
						$this->RepParam['ancho'][10];
									
			$fin_tabla = '   <tr>
							   <td colspan="12"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonloc'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][12]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonext'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepIngresos($datos){	
			
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['sigsuc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['codcaj']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nroing']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nombre_cliente']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['esting']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['denforpag']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][7].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nrodocpag']).'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecing']).'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['abrmon']).'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['tascam']).'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['totmoningloc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][12].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['monext']).'</font></td>
						 </tr>';
			
			return $filas;
	}
	
	
	function RepIngresos($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->ConsultaIngresosCaja($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return "";}
			
			$total=0;
			$total['totmonloc']=0;
			$total['totmonext']=0;
								
			foreach($resul['rs'] as $datosFila){
			
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				
				$datosFila['totmonloc'] = $datosFila['moning'];//MONTO EN MONEDA LOCAL
				$datosFila['totmonext'] = ($this->CodMonDef==$datosFila['codmon'])?0:($datosFila['moning']/$this->TasaCambio);//MONTO EN MONEDA EXTRANJERA
												
				$totales['totmonloc'] += $datosFila['totmonloc'];
				$totales['totmonext'] += $datosFila['totmonext'];
				$totales['totmonextloc'] += ($datosFila['totmonext']*$this->TasaCambio);
								
				$datosRow = $this->FormatDatosIngresoCajaPresent($datosFila);
				$datosRow['monext'] = ($this->CodMonDef==$datosFila['codmon'])?0:($datosRow['moning']);//MONTO EN MONEDA EXTRANJERA				
				$filas .= $this->FilaRepIngresos($datosRow);			
			}
			
			$this->TotalMovCob['totmonloc'] += $totales['totmonloc'];
			$this->TotalMovCob['totmonext'] += $totales['totmonextloc'];
																
			$reporte = $this->EncabezadoRepIngresos().$filas.$this->FinTablaRepIngresos($totales);
						
			return $reporte;
	
	}
	
	
	
	function ValidaNroControl($datos=array()){
			
			//Providencia Administrativa N° 0592 articulo 8
			$metodo="ValidaNroControl";
			
			if(!$datos['codsuc']){				
				$mensaje = 'Falta el código de la sucursal para poder procesar el número de control de facturación.';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			if(!$datos['numcont']){	 			
				$mensaje = 'Falta el número de control.';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';
			$param['entry'] = 'VALIDA_NUMERO_CONTROL';
			$this->ValidaNroContTalonario = $this->select_config($param); 
			
			$formatcontrol = explode('-',$datos['numcont']);
			
			$this->Identificador = $formatcontrol[0];// Dos dígitos
			$this->Secuencial = $formatcontrol[1];//Hasta 8 dígitos
			
			$this->LongIdent = strlen($this->Identificador);
			$this->LongSecuencial = strlen($this->Secuencial);
			
			if($this->LongIdent==0){
				$mensaje = '<b>ERROR:</b> El formato del número de control no cumple con la Providencia Administrativa N° 0592. 
				                     <br>No se encontro el número identificador. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;	
			}
			
			if($this->LongSecuencial==0){
				$mensaje = '<b>ERROR:</b> Los dígitos del Secuencial no cumplen con la Providencia Administrativa N° 0592.
				                      <br>No se encontro el número Secuencial. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;	
			}
			
			if($this->LongIdent!=2){
				$mensaje = '<b>ERROR:</b> Los dígitos del identificador no cumplen con la Providencia Administrativa N° 0592. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;	
			}
			
			if($this->LongSecuencial>8){
				$mensaje = '<b>ERROR:</b> Los dígitos del Secuencial no cumplen con la Providencia Administrativa N° 0592. 
				                      <br>No puede ser mayor de 8 dígitos. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;	
			}
			
			//SI ES EL REGISTRO DE UNA FACTURA HISTÓRICA NO VALIDA EL TALONARIO.
		    if($this->cxchist){return true;}
			
			if($this->ValidaNroContTalonario){
			    
				if(!$datos['tiptal']){
				    $mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo de talonario que desea validar. 				           			    
							    <br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				$datos['criterio'] = "por_nrocont";
				$datos['nrocont'] = $datos['numcont'];
				$rstal = $this->ConsultaDetTalonario($datos);
				if($rstal['rs']===false){return false;}	
				
				if(!$rstal['rs']->RecordCount()){
					$mensaje = '<b>ERROR:</b> No se encontro una factura libre con el número de control: '.$datos['numcont'];
					$this->io_conexiones->mensajes_ajax($mensaje);	
					return false;	
				}
				
				if($rstal['rs']->fields['estdoctal']!='D'){
					$mensaje = '<b>ERROR:</b> La factura libre con el número de control: '.$datos['numcont'].' no esta disponible.';
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;	
				}
				
				if($rstal['rs']->fields['esttal']!='ACT'){
					$mensaje = '<b>ERROR:</b> El talonario de facturas N° '.$rstal->fields['nrotal'].' no está disponible !.';
					$this->io_conexiones->mensajes_ajax($mensaje);	
					return false;
				}
				
				$datos['criterio'] = "IMPRESO";
				$datos['nrocont'] = $datos['numcont'];						
				$resp = $this->ActualizarDtTalonario($datos);
				if($resp===false){return false;}
				
			}
						
			return true;
	}
	
	
	function ConsultaEstAnt($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " ORDER BY estant";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_estanticipo ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaEstAnt';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboEstAnt($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbestant';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['estant']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['denestant'];  $id_carga = $opciones['estant'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaEstAnt($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["estant"].'" '.$selected.'>'.$fila["denestant"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;
	}
	
	function ConsultaAnticipo($opciones=array()){	
		$criterioSQL="";
		$campos=" * ";
		switch($opciones['criterio']){
			  case "por_numero":
					$sql_criterio = " INNER JOIN cxc_clientes cl ON cl.id_cliente = a.id_cliente
					                  INNER JOIN cxc_estanticipo e ON e.estant = a.estant
					                   LEFT JOIN sigesp_moneda mo ON a.codmon = mo.codmon	
					                  WHERE a.codemp='".$this->codemp."' AND a.nroant='".$opciones['nroant']."' AND a.id_cliente='".$opciones['id_cliente']."' ";
					break;	
					
			  case "por_cliente":
					$sql_criterio = " INNER JOIN cxc_clientes cl ON cl.id_cliente = a.id_cliente
					                  INNER JOIN cxc_estanticipo e ON e.estant = a.estant
					                   LEFT JOIN sigesp_moneda mo ON a.codmon = mo.codmon	
					                  WHERE a.codemp='".$this->codemp."' AND a.id_cliente='".$opciones['id_cliente']."' ";
					break;
								   
			  case "por_listado":
			        if($opciones['id_cliente']){$criterioSQL .= " AND a.id_cliente = '".$opciones['id_cliente']."' ";}
					if($opciones['estant']){$criterioSQL .= " AND a.estant = '".$opciones['estant']."' ";}
					if($opciones['fecant']){$criterioSQL .= " AND a.fecant = '".$opciones['fecant']."' ";}
					
					$campos=" a.*,cl.*,mo.*,e.*,
					         (
									a.monant
									-
									( SELECT COALESCE(sum(montodesc),0) 
									  FROM cxc_dt_anticipos da 
									  WHERE da.codemp=a.codemp 
									  AND da.id_cliente=a.id_cliente
									  AND da.nroant=a.nroant
									  AND estdesc='P'
									 )
							
							) AS saldo_ant
						   
						    ";
					
					$sql_criterio = "  INNER JOIN cxc_clientes cl ON cl.id_cliente = a.id_cliente
					                   INNER JOIN cxc_estanticipo e ON e.estant = a.estant
					                    LEFT JOIN sigesp_moneda mo ON a.codmon = mo.codmon	
					                   WHERE a.conant ".$this->postgres_ilike."LIKE('%".$opciones['conant']."%') 
									   ".$criterioSQL." 
									   ORDER BY a.id_cliente, a.nroant ";
					break;
			
			case "por_id":			        
					$sql_criterio = "  INNER JOIN cxc_clientes cl ON cl.id_cliente = a.id_cliente
					                   INNER JOIN cxc_estanticipo e ON e.estant = a.estant
					                   LEFT JOIN sigesp_moneda mo ON a.codmon = mo.codmon
									   LEFT JOIN cxc_sucursales suc ON suc.codemp = a.codemp 
									                              AND suc.codsuc = a.codsucres
									   LEFT JOIN cxc_cajas caj ON caj.codemp = a.codemp 
																 AND caj.codsuc = a.codsucres
																 AND caj.codcaj = a.codcajres	
					                   WHERE a.idant = '".$opciones['idant']."' ";
					break;
				
			case "por_pendientes":
			        if($opciones['id_cliente']){$criterioSQL .= " AND a.id_cliente = '".$opciones['id_cliente']."' ";}
					$sql_criterio = "  INNER JOIN cxc_clientes cl ON cl.id_cliente = a.id_cliente
					                   INNER JOIN cxc_estanticipo e ON e.estant = a.estant
					                    LEFT JOIN sigesp_moneda mo ON a.codmon = mo.codmon	
					                   WHERE (a.estant='PEN' OR a.estant='CPA')
									   ".$criterioSQL." 
									   ORDER BY a.id_cliente, a.nroant ";
					break;
					
			case "por_ingreso":
			        if($opciones['id_cliente']){$criterioSQL .= " AND a.id_cliente = '".$opciones['id_cliente']."' ";}
					$sql_criterio = "  INNER JOIN cxc_clientes cl ON cl.id_cliente = a.id_cliente
					                   INNER JOIN cxc_estanticipo e ON e.estant = a.estant
					                    LEFT JOIN sigesp_moneda mo ON a.codmon = mo.codmon	
					                   WHERE a.idant IN (
									   			SELECT id_doc 
												  FROM cxc_dt_movcobro
												 WHERE nroing = '".$opciones['nroing']."'
												   AND codsuc = '".$opciones['codsuc']."' 
						 						   AND codcaj = '".$opciones['codcaj']."'
												   AND estmovcob != 'ANU' 
												   AND tipdoc='ANTI'												 
									   )
									   ".$criterioSQL." 
									   ORDER BY a.id_cliente, a.nroant ";
					break;			
		}
								   
		$query_rs = "SELECT ".$campos." FROM cxc_anticipos a ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaAnticipo';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function FormatDatosAnt($datos=array()){
				
			
				if(!$datos['fecant']){$datos['fecant']=date('Y/m/d');}
				else{$datos['fecant']=$this->io_conexiones->formatea_fecha_bd($datos['fecant']);}	
				if(!$datos['fecanuant']){$datos['fecanuant']=date('Y/m/d');}
				else{$datos['fecanuant']=$this->io_conexiones->formatea_fecha_bd($datos['fecanuant']);}			
				$datos['tascam'] = $this->formato_numerico_us($datos['tascam']);
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}				
				
				$datos['monant'] = round($this->formato_numerico_us($datos['monant'],10)*$this->TasaCambio,2);
				$datos['porant'] = $this->formato_numerico_us($datos['porant']);
				//$resp = $this->ConversionMoneda($datos);
				//if($resp===false){return false;}
								
				return $datos;
	}
	
	function FormatDatosAntPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
					
					$resp = $this->MonedaPorDefecto($datos);
					if($resp===false){return false;}
								
					$datos['fecant']=$this->io_conexiones->formatea_fecha_normal($datos['fecant']);
					$datos['fecanuant']=$this->io_conexiones->formatea_fecha_normal($datos['fecanuant']);
					
					$datos['porant'] = number_format($datos['porant'],2,',','.');//MONTO EN MONEDA LOCAL
					$datos['monant'] = number_format($datos['monant']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA
					$datos['monantext'] = ($datos['codmon']!=$this->DatosMonedaDef['codmon'])?$datos['monant']:'0,00';
					//$datos['totmonext'] = $datos['monmovcob'];
					//$datos['totmonext'] = number_format(($this->DatRow['monmovcob']/$this->DatRow['tascam']),2,',','.');
					$datos['rif_completo'] = $datos['tipperrif'].'-'. $datos['numpririf'].'-'.$datos['numterrif'];
					$datos['infocaj'] = '('.$datos['codcaj'].') - '.$datos['nomcaj'];
					$datos['infosuc'] = '('.$datos['codsuc'].') - '.$datos['nomsuc'];
					$datos['tascam'] = number_format($datos['tascam'],2,',','.');
										
					return $datos;	
	}
	
	function GenerarNroAnticipo($datos=array()){
				
			$metodo = 'GenerarNroAnticipo';
			$ls_sql=" SELECT nroant::integer 
			            FROM cxc_anticipos 
					   WHERE codemp='".$this->codemp."' 
					     AND id_cliente='".$datos['id_cliente']."'  
					  ORDER BY nroant::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->nroant = str_pad('1',$this->nroant,'0',STR_PAD_LEFT); return true;}
			
			$this->nroant = str_pad(((integer)$rs_data->fields['nroant']+1),$this->nroant,'0',STR_PAD_LEFT);
			
			return true;
	}
	
	function  InsertarAnticipo($datos=array()){
				
				if(!$datos['id_cliente'] or !$datos['fecant'] or !$datos['conant'] or !$datos['monant']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder Insertar el anticipo del cliente.				           			    
						<br><b>METODO:</b> InsertarAnticipo ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				
				$resp = $this->GenerarNroAnticipo($datos);
				if($resp===false){return false;}
				
				$param['codsis'] = 'CXC';
				$param['seccion'] = 'CONFIG';
				$param['entry'] = 'CUENTA_CONTABLE_ANTICIPO';
				$this->CtaAnticipo = $this->select_config($param);
				
				$datos = $this->FormatDatosAnt($datos);
				if($datos===false){return false;}
				
				if(!$this->CtaAnticipo){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No hay cta de anticipo por defecto configurada.				           			    
						<br><b>METODO:</b> InsertarAnticipo ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				$datos['nroproy'] = $datos['nroproy']==""?0:$datos['nroproy'];
				
				
				$ls_sql = "SELECT reset_sequencia('cxc_anticipos','idant');
				           INSERT INTO cxc_anticipos( codemp, id_cliente, nroant, nroproy, nrocontrato, scg_cuenta_ant, 
													  fecant, conant, porant, codmon, tascam, 
													  monant, estant, 
													  fecregant, usuregant, horaregant)
						   VALUES ('".$this->ls_codemp."', 
						           '".$datos['id_cliente']."', 
								   '".$this->nroant."', 
								   '".$datos['nroproy']."', 
								   '".$datos['nrocontrato']."', 
								   '".$this->CtaAnticipo."', 
								   '".$datos['fecant']."', 
								   '".$datos['conant']."', 
								   '".$datos['porant']."', 
								   '".$datos['codmon']."', 
								   '".$datos['tascam']."', 
								   '".$datos['monant']."', 
								   '".$datos['estant']."', 								   
								   '".date("Y-m-d")."', 
								   '".$_SESSION["la_logusr"]."', 
								   '".date("H:i")."'); ";
				
				if($datos['resing']){
				
					$ls_sql = "SELECT reset_sequencia('cxc_anticipos','idant');
							   INSERT INTO cxc_anticipos( codemp, id_cliente, nroant, nroproy, nrocontrato, scg_cuenta_ant, 
														  fecant, conant, porant, codmon, tascam, 
														  monant, estant,codsucres,codcajres,resing,
														  fecregant, usuregant, horaregant)
							   VALUES ('".$this->ls_codemp."', 
									   '".$datos['id_cliente']."', 
									   '".$this->nroant."', 
									   '".$datos['nroproy']."', 
									   '".$datos['nrocontrato']."', 
									   '".$this->CtaAnticipo."', 
									   '".$datos['fecant']."', 
									   '".$datos['conant']."', 
									   '".$datos['porant']."', 
									   '".$datos['codmon']."', 
									   '".$datos['tascam']."', 
									   '".$datos['monant']."', 
									   '".$datos['estant']."',									   
									   '".$datos['codsucres']."', 
									   '".$datos['codcajres']."', 
									   '".$datos['resing']."',									   								   
									   '".date("Y-m-d")."', 
									   '".$_SESSION["la_logusr"]."', 
									   '".date("H:i")."'); ";
				}
								
				//echo $ls_sql;				
				$this->rsAnt=$this->io_sql->select($ls_sql);			
				
				if($this->rsAnt==false){					
					$metodo = 'InsertarAnticipo';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				$mensaje = 'El Anticipo ha sido agregado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return $nuevo_id;
	
	}
	
	function  ModificarAnticipo($datos=array()){				
				
				if(!$datos['id_cliente'] or !$datos['nroant'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder Modificar el anticipo del cliente.				           			    
						        <br><b>METODO:</b> ModificarAnticipo ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
						
				$ls_sql = "UPDATE cxc_anticipos
     					     SET nrocontrato='".$datos['nrocontrato']."', 
							     conant='".$datos['conant']."' 
						   WHERE codemp='".$this->ls_codemp."'
						     AND id_cliente='".$datos['id_cliente']."'
						     AND nroant='".$datos['nroant']."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'ModificarAnticipo';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$mensaje = 'El Anticipo ha sido modificado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	
	}
	
	function  EliminarAnticipo($datos){
				
				if(!$datos['id_cliente'] or !$datos['nroant'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder Eliminar el anticipo del cliente.				           			    
						        <br><b>METODO:</b> EliminarAnticipo ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				/*
				$param = $datos;
				$param['criterio'] = 'por_ant';
				$resp = $this->ConsultaDetAnticipo($param);
				if($resp['cantidad']){
						$mensaje = 'ERROR: No se puede eliminar un anticipo que posee detalles de cobro ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}				
				*/
							
				$ls_sql = "DELETE FROM cxc_anticipos 
				            WHERE codemp='".$this->ls_codemp."'
						      AND id_cliente='".$datos['id_cliente']."'
						      AND nroant='".$datos['nroant']."'
						  ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false)
				{
					
					$metodo = 'EliminarAnticipo';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' Anticipos';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	function  RevAnuIngreso($datos=array()){
			
			if(!$datos['codsuc'] or !$datos['codcaj'] or !$datos['nroing']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder anular el ingreso. 				           			    
							<br><b>METODO:</b> AnularIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			if($datos['esting']!='ANU'){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El ingreso debe estar anulado para reversar la anulación. 				           			    
							<br><b>METODO:</b> RevAnuIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$this->id_cliente = $datos['id_cliente'];
			$this->nombre_cliente = $datos['nombre_cliente'];
			
			$datos['criterio'] = 'por_ingreso';
			$rsmov = $this->ConsultaMovCobros($datos);
			if($rsmov===false){return false;}
			
			if(!$rsmov['rs']->RecordCount()){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontraron movimientos de cobro para reversar la anulación del ingreso. 				           			    
							<br><b>METODO:</b> RevAnuIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			foreach($rsmov['rs'] as $datosmov){				
				$datosmov['fecanucob'] = $datos['fecanuing'];
				$datosmov['conanucob'] = $datos['conanuing'];
				$resp = $this->RevAnuMovCobro($datosmov);
				if($resp===false){return false;}				
			}
						
			$datos = $this->FormatDatosIngresoCaja($datos);
			if($datos===false){return false;}
			
								
			$ls_sql = "UPDATE cxc_ingresos
					   SET esting='PROC',
						   fecanuing=NULL,				
						   conanuing='',					   
						   fecreganu=NULL,
						   usureganu=NULL,
						   horareganu=NULL							
					   WHERE codemp='".$this->ls_codemp."'
						 AND codsuc='".$datos['codsuc']."'
						 AND codcaj='".$datos['codcaj']."' 
						 AND nroing='".$datos['nroing']."'
						 ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql;
			if($this->rs_data==false)
			{
				
				$metodo = 'RevAnuIngreso';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			if($this->io_sql->conn->Affected_Rows()<1){
					$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
					$this->io_conexiones->mensajes_ajax($mensaje);				
					return false;
			}
			
			//$mensaje = 'La anulación del ingreso fué reversada con exito. ';
			//$this->io_conexiones->mensajes_ajax($mensaje);			
			return true;
	}
	
	
	function  RevAnuMovCobro($datos=array()){				
				
				if(!$datos['id_doc'] or !$datos['nromovcob'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codsuc']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Anulación. 				           			    
							    <br><b>METODO:</b> RevAnuMovCobro ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				
				if(!$datos['fecanucob']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la fecha de Anulación del cobro. 				           			    
							    <br><b>METODO:</b> RevAnuMovCobro ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}				
				
				//$datos = $this->FormatDatosMovCobro($datos);
				//if($datos===false){return false;}
				
				$resp = $this->ReversarAnuMovBcoFact($datos);
				if($resp===false){return false;}
								
				$ls_sql = " UPDATE cxc_dt_anticipos
						       SET estdesc='P'
						     WHERE id_fact = '".$datos['id_doc']."'
							   AND nromovcob = '".$datos['nromovcob']."';
						   
						   UPDATE cxc_dt_movdoc
     					   SET estmovdoc='COB'
						   WHERE codemp='".$this->ls_codemp."'
						     AND tipdocapl='".$datos['tipdoc']."'
						     AND id_docapl='".$datos['id_doc']."'
						     AND nromovcob='".$datos['nromovcob']."';
						   
						   UPDATE cxc_cmp_ret
     					   SET cmpanu='0',
						       fecanu=NULL,
							   usuanu=NULL,
							   horaanu=NULL	
						   WHERE codemp='".$this->ls_codemp."'
						     AND tipdoc='".$datos['tipdoc']."'
						     AND id_doc='".$datos['id_doc']."'
						     AND nromovcob='".$datos['nromovcob']."';
				
							UPDATE cxc_dt_movcobro
							   SET estmovcob='COB',
								   fecanucob=NULL,				
								   conanucob='',					   
								   fecreganu=NULL,
								   usureganu=NULL,
								   horareganu=NULL							
							   WHERE codemp='".$this->ls_codemp."'
								 AND codsuc='".$datos['codsuc']."'
								 AND codcaj='".$datos['codcaj']."' 
								 AND nroing='".$datos['nroing']."'
								 AND tipdoc='".$datos['tipdoc']."' 
								 AND id_doc='".$datos['id_doc']."'
								 AND nromovcob='".$datos['nromovcob']."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false)
				{
					
					$metodo = 'RevAnuMovCobro';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$this->tipdoc=$datos['tipdoc'];
				$this->id_doc=$datos['id_doc'];
				$this->nromovcob = $datos['nromovcob'];				
				$this->codsuc=$datos['codsuc'];
				$this->codcaj=$datos['codcaj'];	
				$this->codsuccob=$datos['codsuc'];			
				$this->fecmovcob=$datos['fecmovcob'];
				$this->monmovcob=$datos['monmovcob'];
				$this->fecanucob=$datos['fecanucob'];
				
				$resp = $this->ProcRevCmpAnuCob($datos);
				if($resp===false){return false;}
								
				//$mensaje = 'El movimiento de cobro ha sido anulado con exito. ';
				//$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function  ProcRevCmpAnuCob($datos=array()){
	
			switch($this->tipdoc){					
					
					case 'FACT':
					    $this->id_fact=$this->id_doc;
						$datos['id_fact'] = $this->id_fact;
						$resp = $this->extraerdatos_factura($datos);
						if($resp===false){return false;}
						if($this->DatosFact['tipopecont']=='DEV'){
							$resp = $this->EliminarCmpAnuCobFact($datos);
							if($resp===false){return false;}
						}						
						$resp = $this->ActualizarEstCobFact($datos);
						if($resp===false){return false;}
						if($this->DatosFact['tipopecont']=='DEV'){
							$resp = $this->RevAnuCmpRet($datos);
							if($resp===false){return false;}
						}
						break;
						
					case 'ANTI':
					    $this->idant = $this->id_doc;
						$datos['idant'] = $this->idant;	
						$resp = $this->ExtraerDatosAnticipo($datos);
						$datos['nroant'] = $this->nroant;
						$datos['id_cliente'] = $this->DatosAnt['id_cliente'];					
						$resp = $this->EliminarCmpAnuCobAnt($datos);
						if($resp===false){return false;}						
						$resp = $this->ActualizarEstCobAnt($datos);
						if($resp===false){return false;}
						break;
			}
			
			return true;
	
	}
	
	function  RevAnuCmpRet($datos=array()){
			
			if(!$datos['id_doc'] or !$datos['nromovcob'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codsuc']){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder reversar la anulación de los comprobantes de retención de la factura. 				           			    
							<br><b>METODO:</b> RevAnuCmpRet ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
		
			$ls_sql = "UPDATE cxc_cmp_ret
						  SET cmpanu='0',					 			   
							  fecanu=NULL,
							  usuanu='',
							  horaanu=NULL						
						WHERE codemp='".$this->ls_codemp."'
						  AND codsuc='".$datos['codsuc']."'
						  AND codcaj='".$datos['codcaj']."'					 
						  AND tipdoc='".$datos['tipdoc']."' 
						  AND id_doc='".$datos['id_doc']."'
						  AND nromovcob='".$datos['nromovcob']."' ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->rs_data==false)
			{
				
				$metodo = 'RevAnuCmpRet';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return true;
	}
	
	
	function EliminarCmpAnuCobFact($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: EliminarCmpAnuCobFact
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de eliminar los comprobantes presupuestario y Contable
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 20/08/2014							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		
		if(!$this->id_fact or !$this->codsuc or !$this->codcaj or !$this->nromovcob or !$this->fecmovcob)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el comprobante de anulación de cobro. 				           			    
						<br><b>METODO:</b> EliminarCmpAnuCobFact ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
				
		$metodo = 'EliminarCmpAnuCobFact';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
				
		$this->procede='CXCANC';
		$this->comprobante=$this->NroCmpCobro();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$this->fecanucob;	
		$this->ced_bene=$this->CedBenefCobro;
		$this->descripcion="REVERSO DE LA ANULACIÓN DEL COBRO N° ".$this->nromovcob." DE LA FACTURA ".$this->DatosFact['numfact'];		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'TIPO_CONTABILIZA_CXC';
		$this->TipoAfectacion = $this->select_config($param);
		
		$this->classcmp->EsAjax = 1;
		
		$resp = $this->EliminarCmp($datos);
		if($resp===false){return false;}
		
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se eleminó el comprobante de movimiento de cobro de la factura <b>".$this->numfact."</b> ";
		$this->guardar_seguridad();
		
		return true;	
	}
	
	function EliminarCmpAnuCobAnt($datos=array())
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//	     Function: EliminarCmpAnuCobAnt
		//         Access: public  
		//      Argumento: $datos
		//	      Returns: Retorna un Booleano
		//	  Description: Función que se encarga de eliminar los comprobantes presupuestario y Contable
		//	   Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 20/08/2014							Fecha Última Modificación :
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		if(!$this->id_doc or !$this->codsuc or !$this->codcaj or !$this->nromovcob or !$this->idant or !$this->fecmovcob)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para anular cobro del anticipo. 				           			    
						<br><b>METODO:</b> EliminarCmpAnuCobAnt ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;
		
		$metodo = 'EliminarCmpAnt';
		$this->fechacomp = $this->fecmovcob;
		
		$this->id_fact=0;	
		$this->numfact=0;
		$this->codfact=0;	
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		if(!$this->CedBenefCobro){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se ha configurado ningun beneficiario de cobro por defecto . 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->procede='CXCANC';
		$this->comprobante=$this->NroCmpCobroAnt();
		if($this->comprobante===false){return false;}
		$this->fechacomp=$this->fecanucob;	
		$this->ced_bene=$this->CedBenefCobro;		
		$this->descripcion="REVERSO DE ANULACIÓN DEL COBRO N° ".$this->nromovcob." DEL DOCUMENTO TIPO ".$this->tipdoc."  N° DE DOCUMENTO ".$this->nroant;		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		$this->classcmp->EsAjax = 1;
		
		$resp = $this->EliminarCmp($datos);
		if($resp===false){return false;}
		
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se eleminó el comprobante de movimiento de cobro del anticipo <b>".$this->nroant." del cliente  ".$this->nombre_cliente."</b> ";
		$this->guardar_seguridad();
		
		return true;	
	}
	
	function BuscarScgRetencionConsig($datos=array()){
							
				if(!$datos['codret']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contable de la retencion de la factura. 				           			    
						<br><b>METODO:</b> BuscarScgRetencionConsig ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT sc_cuenta
							FROM sigesp_deducciones 
							WHERE codded='".$datos['codret']."'
						  ";
				
				$rs=$this->io_sql->select($ls_sql);			
				
				if($rs==false){
					$metodo = 'BuscarScgRetencionConsig';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if(!$rs->RecordCount() or !$rs->fields['sc_cuenta']){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontró la cuenta contable de la retención '.$datos['codret'].' consignada. 				           			    
						        <br><b>METODO:</b> BuscarScgRetencionConsig ';
					$this->io_conexiones->mensajes_ajax($mensaje);		
					return false;
					
				}
				
				return $rs->fields['sc_cuenta'];
	}
	
	function ProcContabRet($datos=array()){
		
		if(!$datos['id_doc'] or
		   !$datos['tipdoc'] or 
		   !$datos['codcaj'] or 
		   !$datos['codsuc'] or 
		   !$datos['nromovcob'] or 
		   !$this->fecconsig or 
		   !$datos['monret'] or 
		   !$this->numretdoc or
		   !$datos['codret'] or 
		   !$datos['numretdoc'] or
		   !$datos['monret']
		   ){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder procesar la contabilidad de la retención. 				           			    
						<br><b>METODO:</b> ProcContabRet ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$this->id_fact=$datos['id_doc'];
		$datos['id_fact'] = $datos['id_doc'];
		$this->tipdoc=$datos['tipdoc'];
		$this->id_doc=$datos['id_doc'];
		$this->codcaj=$datos['codcaj'];
		$this->codsuc=$datos['codsuc'];
		$this->nromovcob=$datos['nromovcob'];		
		$resp = $this->extraerdatos_factura($datos);
		if($resp===false){return false;}
		$resp = $this->ContabilizarRet($datos);
		if($resp===false){return false;}						
		$resp = $this->ActualizarEstCobFact($datos);
		if($resp===false){return false;}			
		return true;
	}
	
	
	function ContabilizarRet($datos=array()){
		
		$this->cmpspi->DisableTrans = $this->io_sql->DisableTrans;		
		
		if(!$this->id_doc or 
		   !$this->codsuc or 
		   !$this->codcaj or 
		   !$this->nromovcob or 
		   !$this->fecconsig or 
		   !$datos['monret'] or 
		   !$datos['codret'] or 
		   !$this->numretdoc
		   ){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar la contabilidad de la retención. 				           			    
						<br><b>METODO:</b> ContabilizarRet ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
				
		$metodo = 'ContabilizarRet';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'CED_BENEFCOBRO_DEFECTO';
		$this->CedBenefCobro = $this->select_config($param);
		
		$this->fechacomp=$this->fecconsig;	
		$this->ced_bene=$this->CedBenefCobro;
		$this->descripcion="CONSIGNACIÓN DE LA RETENCIÓN DEL COBRO DE LA FACTURA ".$this->DatosFact['numfact'];		
		$this->operacion='COB';
		$this->tipoProvBen = 'B';
		
		$param['codsis'] = 'CXC';
		$param['seccion'] = 'CONFIG';
		$param['entry'] = 'TIPO_CONTABILIZA_CXC';
		$this->TipoAfectacion = $this->select_config($param);
				
		/**************************************************************************************************************************************/
		/****************************************** PRESUPUESTO DE INGRESO ********************************************************************/
		/**************************************************************************************************************************************/
		$this->FactorCobroSpi = $datos['monret']/$this->total;
			
		//SE OBTIENE EL DETALLE PRESUPUESTARIO DE LA FACTURA Y SE MULTIPILCA POR EL FACTOR DE COBRO
		
		$this->procede='CXCFAC';
		$this->comprobante=$this->NroCmpFactura($datos);
		$rsspi = $this->ConsultaDetSPI($this->DatosFact);
		if($rsspi===false){return false;}
		
		$this->procede='CXCRET';
		$this->comprobante=$this->NroCmpRet($datos);		
		
		if($rsspi->RecordCount()){
			foreach($rsspi as $spi){							
				$spi['monto'] = round($spi['monto']*$this->FactorCobroSpi,2);
				//echo 'SPI: '.$spi['spi_cuenta'].'-'.$spi['sc_cuenta'].'='.$spi['monto'].'<br>';						
				$ctavalid = $this->ValidarDigIngreso($spi);
				if($ctavalid===false){return false;}			
				$resp = $this->InsertDetSpi($spi);
				if($resp===false){return false;}				
			}
		}		
		
		/**************************************************************************************************************************************/
		/****************************************** CONTABILIDAD ******************************************************************************/
		/**************************************************************************************************************************************/
				
		//MONTO QUE SE COMPENSA POR RETENCIONES POR EL DEBE
		$scg['sc_cuenta'] = $this->BuscarScgRetencionConsig($datos);
		if($scg['sc_cuenta']===false){return false;}
		$scg['debhab'] = 'D';
		$scg['monto'] = $datos['monret'];
		//echo 'SCG RET: '.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}				
						
		//CUENTA POR COBRAR DEL CLIENTE POR EL HABER
		$scg['sc_cuenta'] = $this->DatosFact['scg_cliente'];
		$scg['debhab'] = 'H';
		$scg['monto'] = $datos['monret'];
		//echo 'SCG CXC: '.$scg['sc_cuenta'].'-'.$scg['debhab'].'='.$scg['monto'].'<br>';
		$resp = $this->InsertDetCont($scg);
		if($resp===false){return false;}
							
		$this->cmpspi->EsAjax = 1;		
		
		$resp = $this->GenerarCmp($datos);
		if($resp===false){return false;}
		
								
		$this->seguridad["evento"]="INSERT";
		$this->seguridad["descripcion"]="Se Generó y contabilizó:   <b>".$this->descripcion."</b> ".
						                "Monto: <b>".number_format($opciones['monmovcob'],2,",",".")."</b>";
		$this->guardar_seguridad();
		
		return true;
	}
	
   
	function RepDocInfoScg($datos=array()){
			
			if(!$datos['id_doc'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contable				           			    
						   <br><b>METODO:</b> RepDocInfoScg ';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			
			$this->id_doc=$datos['id_fact'];
			
			$resp = $this->extraerdatos_documento($datos);
			if($resp===false){return false;}
			
			$this->procede='CXCCRE';
			$this->comprobante = $this->NroCmpNC();
			if($this->comprobante===false){return false;}
			if($datos['abrmon']=='E'){$datos['abrmon']='€';}
			$this->denmon=$datos['denmon'];
			$this->abrmon=$datos['abrmon'];
			if($this->CargarMonedaLocal){$this->TasaCambio=1;}
			$this->TxtMoneda = ($this->MonedaExtranjera and !$this->CargarMonedaLocal)?'('.$this->abrmon.')':'';
			
			$resul = $this->ConsultaDetContable($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$total=0;
			
			foreach($resul as $datosFila){					
					$totalDebe += $datosFila['debhab']=='D'?$datosFila['monto']/$this->TasaCambio:0;
					$totalHaber += $datosFila['debhab']=='H'?$datosFila['monto']/$this->TasaCambio:0;	
					$montoDebe=$datosFila['debhab']=='D'?$datosFila['monto']/$this->TasaCambio:0;						        
					$montoHaber=$datosFila['debhab']=='H'?$datosFila['monto']/$this->TasaCambio:0;
							
					$datosFila['montoDebe'] = $montoDebe?number_format($montoDebe/$this->TasaCambio,2,',','.'):'';
					$datosFila['montoHaber'] = $montoHaber?number_format($montoHaber/$this->TasaCambio,2,',','.'):'';
																				
					$filas .= $this->FilaRepInfoScg($datosFila);			
			}
						
			$totales['totalDebe'] = number_format($totalDebe/$this->TasaCambio,2,',','.');	
			$totales['totalHaber'] = number_format($totalHaber/$this->TasaCambio,2,',','.');						
			$reporte = $this->EncabezadoRepInfoScg().$filas.$this->FinTablaRepInfoScg($totales);
						
			return $reporte;
	
	}
		
	
	function RepDocInfoSpi($datos=array()){
			
			if(!$datos['id_doc'])
			{				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información presupuestaria				           			    
						   <br><b>METODO:</b> RepInfoDocSpi ';
				$this->io_mensajes->message($mensaje);																
				return false;
			}
			if($datos['abrmon']=='E'){$datos['abrmon']='€';}
			
			$this->id_doc=$datos['id_doc'];
			$this->denmon=$datos['denmon'];
			$this->abrmon=$datos['abrmon'];
			
			$resp = $this->extraerdatos_documento($datos);
			if($resp===false){return false;}
			
			$this->procede='CXCCRE';
			$this->comprobante = $this->NroCmpNC();
			if($this->comprobante===false){return false;}
			
			$resul = $this->ConsultaDetSPI($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return 0;}
			
			$total=0;
			
			foreach($resul as $datosFila){
				$total += $datosFila['monto'];
				if($this->CargarMonedaLocal){$this->TasaCambio=1;}
				$datosFila['monto'] = number_format($datosFila['monto']/$this->TasaCambio,2,',','.');
				$filas .= $this->FilaRepInfoSpi($datosFila);			
			}
						
			$totales['total'] = number_format($total/$this->TasaCambio,2,',','.');							
			$reporte = $this->EncabezadoRepInfoSpi().$filas.$this->FinTablaRepInfoSpi($totales);
						
			return $reporte;
	
	}
	
	
	function BuscarMontoTotalDoc($datos=array()){
							
				if(!$datos['id_doc'] or !$datos['codtipdoc']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto total de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoTotalDoc ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT total_doc 
				              FROM cxc_documento
							 WHERE id_doc='".$datos['id_doc']."'
							   AND codtipdoc='".$datos['codtipdoc']."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoTotalDoc';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotDoc = $this->rs_data->fields['total_doc']?$this->rs_data->fields['total_doc']:0;
				
				return $this->MonTotDoc;
	}
	
	function BuscarMontoAplicadoDoc($datos=array()){
							
				if(!$datos['id_doc'] or !$datos['codtipdoc']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto cobrado de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoAplicadoDoc ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT sum(monmovdoc) as monmovdoc 
				              FROM cxc_dt_movdoc 
							 WHERE codtipdoc='".$datos['codtipdoc']."'
							   AND id_doc='".$datos['id_doc']."'
							   AND estmovdoc!='ANU'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoAplicadoDoc';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotApl = $this->rs_data->fields['monmovdoc']?$this->rs_data->fields['monmovdoc']:0;
				
				return $this->MonTotApl;
	}
	
	function ActualizarEstatusDocumento($datos=array()){
		$metodo = 'ActualizarEstatusDocumento';
		if(!$datos['id_doc'] or !$datos['codtipdoc'] or !$datos['proc'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el estatus del documento. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}		
				
		switch($datos['proc']){
				case 'DATOS_CONTABILIZACION':
					$ls_sql=" UPDATE cxc_documento SET contabilizado_doc='1', fecconta_doc='".$this->fechacomp."' WHERE codtipdoc='".$datos['codtipdoc']."' AND id_doc='".$datos['id_doc']."'; ";
					break;
					
				case 'DATOS_ANULACION':
					$ls_sql=" UPDATE cxc_documento SET estdoccxc='A', anulado_doc='1', fecanula_doc='".$this->fecanula."', conanula_doc='".$this->conanula."' WHERE codtipdoc='".$datos['codtipdoc']."' AND id_doc='".$datos['id_doc']."'; ";
					break;
					
				case 'DATOS_REVANULACION':
					$ls_sql=" UPDATE cxc_documento SET estdoccxc='P', anulado_doc='0', fecanula_doc='1900-01-01', conanula_doc='' WHERE codtipdoc='".$datos['codtipdoc']."' AND id_doc='".$datos['id_doc']."'; ";
					break;
				
				case 'CERRADO':
					$ls_sql=" UPDATE cxc_documento SET estdoccxc='C' WHERE codtipdoc='".$datos['codtipdoc']."' AND id_doc='".$datos['id_doc']."'; ";
					break;
					
				case 'NO_CERRADO':
					$ls_sql=" UPDATE cxc_documento SET estdoccxc='P' WHERE codtipdoc='".$datos['codtipdoc']."' AND id_doc='".$datos['id_doc']."'; ";
					break;
		}		
		
		$this->rs_data=$this->io_sql->select($ls_sql);
		//echo $ls_sql.'<br>';	
		if($this->rs_data===false){						
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;
			echo $this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;						
		}
		
		if($this->io_sql->conn->Affected_Rows()<1){		      
				$mensaje = 'ERROR:->ERROR: No se pudo Actualizar la información del Documento !. No hay filas afectadas por la operación.';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;
		}		
		
		return true;
	
	}
	
	function ActualizarEstAplDoc($datos=array()){
				
				if(!$datos['id_doc'] or !$datos['codtipdoc'])
				{	
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el estatus de cierre del documento. 				           			    
								<br><b>METODO:</b> ActualizarEstAplDoc';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
					
				}					
								
				$saldo = $this->SaldoDoc($datos);
				$datos['proc']='CERRADO';								
				if($saldo>0){$datos['proc']='NO_CERRADO';}			
				$resp = $this->ActualizarEstatusDocumento($datos);
				if($resp===false){return false;}	
				return true;
	}
	
	function  SaldoDoc($datos=array()){		
		
		if(!$datos['id_doc'] or !$datos['codtipdoc'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el saldo del documento. 				           			    
						<br><b>METODO:</b> ActualizarEstAplDoc';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		$MonTotDoc = $this->BuscarMontoTotalDoc($datos);
		if($MonTotDoc===false){return false;}
		$MonAplDoc = $this->BuscarMontoAplicadoDoc($datos);
		if($MonAplDoc===false){return false;}
							
		$saldo = $MonTotDoc-$MonAplDoc;
		$saldo = $saldo?$saldo:0;
		
		if($saldo<0){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b> 				           			    
						<br>El Saldo Aplicado del documento es Negativo.
						<br><b>METODO:</b> SaldoDoc ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		return $saldo;
	}
	
	function GenerarNroMovDoc($datos=array()){
				
			$metodo = 'GenerarNroMovDoc';
			
			$ls_sql=" SELECT nromovdoc::integer 
			           FROM cxc_dt_movdoc 
					  WHERE codtipdoc = '".$datos['codtipdoc']."' 
					    AND id_doc = '".$datos['id_doc']."' 
				      ORDER BY nromovdoc::integer DESC LIMIT 1";
					  					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->nromovdoc = 1; return true;}
			
			$this->nromovdoc = (integer)$rs_data->fields['nromovdoc']+1;
			
			return true; 
			
	}
	
	function FormatDatosMovDoc($datos=array()){
				
			
				if(!$datos['fecmovdoc']){$datos['fecmovdoc']=date('Y/m/d');}
				else{$datos['fecmovdoc']=$this->io_conexiones->formatea_fecha_bd($datos['fecmovdoc']);}				
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}				
				
				$datos['monmovdoc'] = $this->formato_numerico_us($datos['monmovdoc'])*$this->TasaCambio;
				
				//$resp = $this->ConversionMoneda($datos);
				//if($resp===false){return false;}
								
				return $datos;
	}
	
	function FormatDatosMovDocPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
					
					$resp = $this->MonedaPorDefecto($datos);
					if($resp===false){return false;}
								
					$datos['fecmovdoc']=$this->io_conexiones->formatea_fecha_normal($datos['fecmovdoc']);
					$datos['fecreg']=$this->io_conexiones->formatea_fecha_normal($datos['fecreg']);
					$datos['fecmod']=$this->io_conexiones->formatea_fecha_normal($datos['fecmod']);
					
					$datos['monmovdoc'] = number_format($datos['monmovdoc']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA
					
										
					return $datos;	
	}
	
	function  InsertarMovDoc($datos=array()){
				
				if(!$datos['codcaj'] or 
				   !$datos['codsuc'] or 
				   !$datos['codtipdoc'] or 
				   !$datos['id_doc'] or
				   !$datos['fecmovdoc'] or
				   !$datos['monmovdoc'] or 				   
				   !$datos['id_docapl'] or 
				   !$datos['tipdocapl'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para insertar el movimiento de documento 				           			    
								<br><b>METODO:</b> InsertarMovDoc';
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				if(!$this->nroing)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de ingreso				           			    
								<br><b>METODO:</b> InsertarMovDoc';
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				$resp = $this->GenerarNroMovDoc($datos);
				if($resp===false){return false;}
				
				$datos = $this->FormatDatosMovDoc($datos);
				if($datos===false){return false;}
				
				if(!$datos['monmovdoc'])
				{				
					$mensaje = 'El monto a aplicar del documento de '.$datos['codtipdoc'].' no puede ser 0 ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$datos['estmovdoc']='APL';
				
				$ls_sql = "LOCK TABLE cxc_dt_movdoc IN ACCESS EXCLUSIVE MODE;
						   INSERT INTO cxc_dt_movdoc( codemp, codsuc, codcaj, codtipdoc, id_doc, nromovdoc, nromovcob, nroing, fecmovdoc, 
													  estmovdoc, codmon, tascam, monmovdoc, tipdocapl, id_docapl, fecreg, 
													  usureg, horareg)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['codsuc']."', '".									  
									  $datos['codcaj']."', '".
									  $datos['codtipdoc']."', '".
									  $datos['id_doc']."', '".									 
									  $this->nromovdoc."', '".
									  $this->nromovcob."', '".
									  $this->nroing."', '".
									  $datos['fecmovdoc']."', '".
									  $datos['estmovdoc']."', '".
									  $datos['codmon']."', '".
									  $datos['tascam']."', '".									  
									  $datos['monmovdoc']."', '".
									  $datos['tipdocapl']."', '".
									  $datos['id_docapl']."', '".
									  date("Y-m-d")."','".
									  $_SESSION["la_logusr"]."','".
									  date("H:i")."')";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){					
					$metodo = 'InsertarMovDoc';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				$resp = $this->ActualizarEstAplDoc($datos);
				if($resp===false){return false;}
					
				return true;
	}
	
	
	function ProcNotCreAplIngresos($datos=array()){
			
			if(!$this->datosNcApl){return true;}
			
			$metodo='ProcNotCreAplIngresos';
			if(!$this->nromovcob){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan el Número de Movimiento de cobro para poder procesar las Notas de Crédito aplicadas. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;
			}
			
			foreach($this->datosNcApl->datos as $id_doc => $DatosDet){
					
					if($this->MovCobro){
						//SI ES UN INGRESO DE CAJA NUEVO SE PROCESA SOLO LAS RETENCIONES PERTENECIENTES AL MOVIMIENTO DE COBRO QUE SE ESTA PROCESANDO							
						if($this->id_doc!=$id_doc){continue;}
					}
					else{
						$this->id_doc = $id_doc;
					}						
					$this->DatosNC = $DatosDet;
					$datos['criterio']='por_ingresofact';
					$datos['id_doc'] = $this->id_doc;
					$datos['tipdoc'] = $this->tipdoc;
					$datos['nroing'] = $this->nroing;
					$rsmovcob = $this->ConsultaMovCobros($datos);
					if($rsmovcob===false){return false;}
					if(!$rsmovcob['rs']->RecordCount()){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontro el movimiento de cobro del documento tipo: '.$datos['tipdoc'].' id:'.$tipdoc.'. 
									<br>N° Ingreso:'.$this->nroing.'. 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																		
						return false;			
					}						
					$this->nromovcob = $rsmovcob['rs']->fields['nromovcob'];
					
					$datos['id_fact'] = ($datos['tipdoc']=='FACT')?$datos['id_doc']:$datos['id_fact'];												
					$resp = $this->extraerdatos_factura($datos); 
					if($resp===false){return false;}
					
					$resp = $this->ProcDetNotCreApl($datos);
					if($resp===false){return false;}
			}
						
			return true;
	}
	
	function ProcDetNotCreApl($datos=array()){
			
			foreach($this->DatosNC as $datonc){				 		
				 $datosdet['codsuc'] = $this->codsuc;
				 $datosdet['codcaj'] = $this->codcaj;
				 $datosdet['id_doc'] = $datonc->id_doc;
				 $datosdet['codtipdoc'] = $datonc->codtipdoc;
				 $datosdet['fecmovdoc'] = $this->io_conexiones->formatea_fecha_normal($this->fecmovcob);
				 $datosdet['codmon'] = $datos['codmon'];
				 $datosdet['tascam'] = $datos['tascam'];
				 $datosdet['monmovdoc'] = number_format($datonc->saldoapl,2,',','.');
				 $datosdet['tipdocapl'] = $datonc->tipdocapl;
				 $datosdet['id_docapl'] = $datonc->id_docapl;
				 					
				 $resp = $this->InsertarMovDoc($datosdet);
				 if($resp===false){return false;}
				 
			}
			return true;	
	}
	
		
	function BuscarMontoAplicadoAnt($datos=array()){
							
				if(!$datos['id_cliente'] or !$datos['nroant']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto cobrado de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoAplicadoAnt ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT sum(montodesc) as montodesc 
				              FROM cxc_dt_anticipos 
							 WHERE id_cliente='".$datos['id_cliente']."'
							   AND nroant='".$datos['nroant']."'
							   AND estdesc='P'";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoAplicadoAnt';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotAplAnt = $this->rs_data->fields['montodesc']?$this->rs_data->fields['montodesc']:0;
				
				return $this->MonTotAplAnt;
	}
	
	
	
	function ActualizarEstAplAnt($datos=array()){
				
			if(!$datos['id_cliente'] or !$datos['nroant'] or !$datos['idant'])
			{	
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el estatus de cierre del Anticipo. 				           			    
							<br><b>METODO:</b> ActualizarEstAplAnt';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
				
			}					
							
			$saldo = $this->SaldoAntApl($datos);
			$datos['estant']='CER';								
			if($saldo>0){$datos['estant']='COB';}
			
			$resp = $this->ActualizarEstAnticipo($datos);
			if($resp===false){return false;}
			return true;
	}
	
	function  SaldoAntApl($datos=array()){		
		
		if(!$datos['id_cliente'] or !$datos['nroant'] or !$datos['idant'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el saldo aplicado del anticipo. 				           			    
						<br><b>METODO:</b> SaldoAntApl';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		$MonTotAnt = $this->BuscarMontoTotalAnt($datos);
		if($MonTotAnt===false){return false;}
		$MonAplAnt = $this->BuscarMontoAplicadoAnt($datos);
		if($MonAplAnt===false){return false;}
							
		$saldo = $MonTotAnt-$MonAplAnt;
		$saldo = $saldo?$saldo:0;
		
		if($saldo<0){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b> 				           			    
						<br>El Saldo Aplicado del anticipo es Negativo.
						<br><b>METODO:</b> SaldoAntApl ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		return $saldo;
	}
	
	function GenerarNroMovAnt($datos=array()){
				
			$metodo = 'GenerarNroMovAnt';
			
			$ls_sql=" SELECT nrodesc::integer 
			           FROM cxc_dt_anticipos 
					  WHERE id_cliente='".$datos['id_cliente']."'
					    AND nroant='".$datos['nroant']."' 
				      ORDER BY nrodesc::integer DESC LIMIT 1";
					  					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->nrodescant = 1; return true;}
			
			$this->nrodescant = (integer)$rs_data->fields['nrodesc']+1;
			
			return true; 
			
	}
	
	function FormatDatosMovAnt($datos=array()){
				
			
				if(!$datos['fecdesc']){$datos['fecdesc']=date('Y/m/d');}
				else{$datos['fecdesc']=$this->io_conexiones->formatea_fecha_bd($datos['fecdesc']);}				
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}				
				
				$datos['montodesc'] = $this->formato_numerico_us($datos['montodesc'])*$this->TasaCambio;
				
				//$resp = $this->ConversionMoneda($datos);
				//if($resp===false){return false;}
								
				return $datos;
	}
	
	function FormatDatosMovAntPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
					
					$resp = $this->MonedaPorDefecto($datos);
					if($resp===false){return false;}
								
					$datos['fecdesc']=$this->io_conexiones->formatea_fecha_normal($datos['fecdesc']);
					$datos['fecregdet']=$this->io_conexiones->formatea_fecha_normal($datos['fecregdet']);
										
					$datos['montodesc'] = number_format($datos['montodesc']/$datos['tascam'],2,',','.');//MONTO EN MONEDA EXTRANJERA
									
					return $datos;	
	}
	
	function  InsertarMovAnt($datos=array()){
				
				if(!$datos['id_cliente'] or 
				   !$datos['nroant'] or 
				   !$datos['idant'] or 
				   !$datos['id_fact'] or
				   !$datos['fecdesc'] or
				   !$datos['montodesc'] or 				   
				   !$datos['sc_cuenta_descant'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para insertar el movimiento de anticipo 				           			    
								<br><b>METODO:</b> InsertarMovAnt';
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				if(!$this->nroing)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de ingreso				           			    
								<br><b>METODO:</b> InsertarMovAnt';
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				$resp = $this->GenerarNroMovAnt($datos);
				if($resp===false){return false;}
				
				$datos = $this->FormatDatosMovAnt($datos);
				if($datos===false){return false;}
				
				if(!$datos['montodesc'])
				{				
					$mensaje = 'El monto a aplicar del Anticipo N° '.$datos['nroant'].' del cliente '.$datos['id_cliente'].' no puede ser 0 ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$datos['estdesc']='P';
				
				$ls_sql = "LOCK TABLE cxc_dt_anticipos IN ACCESS EXCLUSIVE MODE;
						   INSERT INTO cxc_dt_anticipos(codemp, id_cliente, nroant, nrodesc, id_fact, codsuc, codcaj,  nromovcob, nroing, fecdesc, 
														codmon, tascam, montodesc, concepdesc, sc_cuenta_descant, estdesc, 
														fecregdet, usuregdet, horaregdet)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['id_cliente']."', '".									  
									  $datos['nroant']."', '".
									  $this->nrodescant."', '".
									  $datos['id_fact']."', '".	
									  $this->codsuc."', '".
									  $this->codcaj."', '".								 
									  $this->nromovcob."', '".
									  $this->nroing."', '".
									  $datos['fecdesc']."', '".
									  $datos['codmon']."', '".
									  $datos['tascam']."', '".									 								  
									  $datos['montodesc']."', '".
									  $datos['concepdesc']."', '".
									  $datos['sc_cuenta_descant']."', 
									  'P', '".
									  date("Y-m-d")."','".
									  $_SESSION["la_logusr"]."','".
									  date("H:i")."')";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){					
					$metodo = 'InsertarMovAnt';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				$resp = $this->ActualizarEstAplAnt($datos);
				if($resp===false){return false;}
					
				return true;
	}
	
	
	function ProcAntAplIngresos($datos=array()){
			
			if(!$this->datosAntApl){return true;}
			
			$metodo='ProcAntAplIngresos';
			if(!$this->nromovcob){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan el Número de Movimiento de cobro para poder procesar los anticipos aplicados. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;
			}
			
			foreach($this->datosAntApl->datos as $id_doc => $DatosDet){
					
					if($this->MovCobro){
						//SI ES UN INGRESO DE CAJA NUEVO SE PROCESA SOLO LAS RETENCIONES PERTENECIENTES AL MOVIMIENTO DE COBRO QUE SE ESTA PROCESANDO							
						if($this->id_doc!=$id_doc){continue;}
					}
					else{
						$this->id_doc = $id_doc;
					}						
					$this->DatosMovAnt = $DatosDet;
					$datos['criterio']='por_ingresofact';
					$datos['id_doc'] = $this->id_doc;
					$datos['tipdoc'] = $this->tipdoc;
					$datos['nroing'] = $this->nroing;
					$rsmovcob = $this->ConsultaMovCobros($datos);
					if($rsmovcob===false){return false;}
					if(!$rsmovcob['rs']->RecordCount()){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontro el movimiento de cobro del documento tipo: '.$datos['tipdoc'].' id:'.$tipdoc.'. 
									<br>N° Ingreso:'.$this->nroing.'. 				           			    
									<br><b>METODO:</b> '.$metodo;
						$this->io_conexiones->mensajes_ajax($mensaje);																		
						return false;			
					}						
					$this->nromovcob = $rsmovcob['rs']->fields['nromovcob'];
					
					$datos['id_fact'] = ($datos['tipdoc']=='FACT')?$datos['id_doc']:$datos['id_fact'];												
					$resp = $this->extraerdatos_factura($datos); 
					if($resp===false){return false;}
					
					$resp = $this->ProcDetAntApl($datos);
					if($resp===false){return false;}
			}
						
			return true;
	}
	
	function ProcDetAntApl($datos=array()){
						
			foreach($this->DatosMovAnt as $datosmov){	
						 		
				 $datosdet['idant'] = $datosmov->idant;
				 $datosdet['id_cliente'] = $datosmov->id_cliente;
				 $datosdet['nroant'] = $datosmov->nroant;
				 $datosdet['id_fact'] = $datosmov->id_fact;
				 $datosdet['fecdesc'] = $this->io_conexiones->formatea_fecha_normal($this->fecmovcob);
				 $datosdet['montodesc'] = number_format($datosmov->saldoapl,2,',','.');
				 $datosdet['concepdesc'] = $datosmov->concepdesc;
				 $datosdet['codmon'] = $datos['codmon'];
				 $datosdet['tascam'] = $datos['tascam'];				
				 $datosdet['sc_cuenta_descant'] = $datosmov->sc_cuenta_descant;				 		 					
				 $resp = $this->InsertarMovAnt($datosdet);
				 if($resp===false){return false;}
				 
			}
			return true;	
	}
	
	function BuscarMontoAntApliFact($datos=array()){
							
				if(!$datos['id_fact']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de anticipos aplicados de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoAntApliFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT COALESCE(sum(montodesc),0) as montotapl
				              FROM cxc_dt_anticipos 
							 WHERE id_fact='".$datos['id_fact']."'
							   AND estdesc='P'
						  ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoAntApliFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotAntAplFact = $this->rs_data->fields['montotapl']?$this->rs_data->fields['montotapl']:0;
				
				return $this->MonTotAntAplFact;
	}
	
	function SaldoAntApliFact($datos=array()){
							
			if(!$datos['id_fact']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de anticipos aplicados de la factura. 				           			    
					<br><b>METODO:</b> BuscarMontoAntApliFact ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$ls_sql = " SELECT COALESCE(sum(montodesc),0) as montotapl
						  FROM cxc_dt_anticipos 
						 WHERE id_fact='".$datos['id_fact']."'
						   AND id_cliente='".$datos['id_cliente']."'
						   AND nroant='".$datos['nroant']."'
						   AND estdesc='P'
					  ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->rs_data==false){
				$metodo = 'SaldoAntApliFact';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			$this->SalTotAntAplFact = $this->rs_data->fields['montotapl']?$this->rs_data->fields['montotapl']:0;
			
			return $this->SalTotAntAplFact;
	}
	
	function BuscarScgAntAplicados($datos=array()){
							
				if(!$datos['id_fact'] or !$this->nromovcob){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar la información contables de las retenciones de la factura. 				           			    
						<br><b>METODO:</b> BuscarScgAntAplicados ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT da.sc_cuenta_descant as sc_cuenta, COALESCE(sum(da.montodesc),0) as monto  
							FROM cxc_dt_anticipos da							
							WHERE da.id_fact = '".$datos['id_fact']."'
							  AND da.nromovcob = '".$this->nromovcob."'
							  AND da.estdesc='P'
							GROUP BY da.sc_cuenta_descant ";
				
				$this->RsScgRet=$this->io_sql->select($ls_sql);			
				
				if($this->RsScgRet==false){
					$metodo = 'BuscarScgAntAplicados';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				return $this->RsScgRet;
	}
	
	function BuscarMontoAntApliMovCob($datos=array()){
							
				if(!$datos['id_fact'] or !$this->nromovcob){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de documentos de crédito aplicados de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoAntApliMovCob ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT COALESCE(sum(da.montodesc),0) as monto 
						     FROM cxc_dt_anticipos da							
							WHERE da.id_fact = '".$datos['id_fact']."'
							  AND da.nromovcob = '".$this->nromovcob."'
							  AND da.estdesc='P'
							   ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoAntApliMovCob';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotNotCreApliMovCob = $this->rs_data->fields['monto']?$this->rs_data->fields['monto']:0;
				
				return $this->MonTotNotCreApliMovCob;
	}
	
	function BuscarMontoNotCreApliMovCob($datos=array()){
							
				if(!$datos['id_fact'] or !$this->nromovcob){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el monto de documentos de crédito aplicados de la factura. 				           			    
						<br><b>METODO:</b> BuscarMontoNotCreApliMovCob ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$ls_sql = " SELECT COALESCE(sum(monmovdoc),0) as monto 
								  FROM cxc_dt_movdoc 
								 WHERE tipdocapl='FACT'
								   AND id_docapl='".$datos['id_fact']."'
								   AND nromovcob='".$this->nromovcob."'
								   AND codtipdoc='NC'
								   AND estmovdoc!='ANU'
							   ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br>';
				if($this->rs_data==false){
					$metodo = 'BuscarMontoNotCreApliMovCob';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				$this->MonTotNotCreApliMovCob = $this->rs_data->fields['monto']?$this->rs_data->fields['monto']:0;
				
				return $this->MonTotNotCreApliMovCob;
	}
	
	
	function consulta_estcotped($opciones=array()){	
		
		switch($opciones['criterio']){
				  
			  case "por_id":
					$sql_criterio = " WHERE  estcotped='".$opciones['estcotped']."'";
					break;							  
			  case "por_desc":
					$sql_criterio = " WHERE denestcotped ".$this->postgres_ilike."LIKE('%".$opciones['denestcotped']."%')  ";   
					break;
			 case "por_codigo":
					" WHERE  codemp = '".$this->ls_codemp."' AND estcotped='".$opciones['estcotped']."'";   
					break;				   
			  case "por_listado":
					$sql_criterio = " WHERE  denestcotped ".$this->postgres_ilike."LIKE('%".$opciones['denestcotped']."%')									  
									  ORDER BY denestcotped ";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_estatuscotped ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'consulta_estcotped';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	
	function combo_estcotped($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbestcotped';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['estcotped']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['denestcotped'];  $id_carga = $opciones['estcotped'];}
				
				global $obj_sql;
				
				$datos["criterio"]='por_listado';
				$resultado = $this->consulta_estcotped($datos);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				do {					
					$combo .= '<option value="'.$resultado['fila']["estcotped"].'">'.$resultado['fila']["denestcotped"].'</option>';								
				} while ($resultado['fila'] = $obj_sql->fetch_row($resultado['rs'])); 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	
	function consulta_cotped($propiedades=array()){	
		
		if($_SESSION['autent_administrador']!=1){		
					
		}
		//print_r($propiedades);
		$joinadd='';
		$datos = $propiedades;
		$columna = $datos['orden'];
		if($datos['orden']==""){$columna='nombre_cliente';}
		if($datos['codcliente']){$criterio = $criterio." AND c.codcliente ".$this->postgres_ilike."LIKE('%".$datos['codcliente']."%') ";}
		if($datos['nombre_cliente']){$criterio = $criterio." AND c.nombre_cliente ".$this->postgres_ilike."LIKE('%".$datos['nombre_cliente']."%') ";}
		if($datos['numpririf']){$criterio = $criterio." AND c.numpririf ".$this->postgres_ilike."LIKE('%".$datos['numpririf']."%') ";}
		if($datos['clasif_cliente']){$criterio = $criterio." AND clasif_cliente ".$this->postgres_ilike."LIKE('%".$datos['clasif_cliente']."%') ";}
		if($datos['sc_cuenta']){$criterio = $criterio." AND c.sc_cuenta ".$this->postgres_ilike."LIKE('%".$datos['sc_cuenta']."%') ";}
		if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['tipperrif']){$criterio = $criterio." AND c.tipperrif = '".$datos['tipperrif']."' ";}
		if($datos['codsuc']){$criterio = $criterio." AND f.codsuc = '".$datos['codsuc']."' ";}
		if($datos['codcaj']){$criterio = $criterio." AND f.codcaj = '".$datos['codcaj']."' ";}
		if($datos['id_tipo_cliente']){$criterio = $criterio." AND c.id_tipo_cliente = '".$datos['id_tipo_cliente']."' ";}
		if($datos['id_zona']){$criterio = $criterio." AND c.id_zona = '".$datos['id_zona']."' ";}
		if($datos['id_vend']){$criterio = $criterio." AND c.id_vend = '".$datos['id_vend']."' ";}
		if($datos['id_cliente']){$criterio = $criterio." AND f.id_cliente = '".$datos['id_cliente']."' ";}
		if($datos['estclient']){$criterio = $criterio." AND c.estclient = '".$datos['estclient']."' ";}			
		if($datos['nombreresp']){$criterio = $criterio." AND c.nombreresp ".$this->postgres_ilike."LIKE('%".$datos['nombreresp']."%') ";}
		if($datos['nombre_pais']){$criterio = $criterio." AND despai ".$this->postgres_ilike."LIKE('%".$datos['nombre_pais']."%') ";}
		if($datos['entidad_federal']){$criterio = $criterio." AND desest ".$this->postgres_ilike."LIKE('%".$datos['entidad_federal']."%') ";}
		if($datos['municipio']){$criterio = $criterio." AND denmun ".$this->postgres_ilike."LIKE('%".$datos['municipio']."%') ";}
		if($datos['parroquia']){$criterio = $criterio." AND denpar ".$this->postgres_ilike."LIKE('%".$datos['parroquia']."%') ";}
		if($datos['cedularesp']){$criterio = $criterio." AND c.cedularesp ".$this->postgres_ilike."LIKE('%".$datos['cedularesp']."%') ";}
		if($datos['fecfact_d']){if($datos['fecfact_h'] == ''){$datos['fecfact_h'] = $datos['fecfact_d'];}$criterio = $criterio." AND f.feccotped BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecfact_h'])."'  ";}
		if($datos['id_transp']){$criterio = $criterio." AND f.id_transp = '".$datos['id_transp']."' ";}
		if($datos['codmon']){$criterio = $criterio." AND f.codmon = '".$datos['codmon']."' ";}
		if($datos['estcotped']){$criterio = $criterio." AND f.estcotped = '".$datos['estcotped']."' ";}
	   	if($datos['id_condpago']){$criterio = $criterio." AND f.id_condpago = '".$datos['id_condpago']."' ";}
		if($datos['numcotped']){$criterio = $criterio." AND f.numcotped = '".$datos['numcotped']."' ";}
		if($datos['nomvend']){$criterio = $criterio." AND nomvend ".$this->postgres_ilike."LIKE('%".$datos['nomvend']."%') ";}
		
		if($datos['fecregcliente_d']){
			if($datos['fecregcliente_h'] == ''){$datos['fecregcliente_h'] = $datos['fecregcliente_d'];}
			$criterio = $criterio." AND c.fecregcliente BETWEEN '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_d'])."' AND '".$this->io_conexiones->formatea_fecha_bd($datos['fecregcliente_h'])."'  ";
		 }	
		
		if($datos['total']){
						
					if(!$datos['criterio_monto']){$datos['criterio_monto']='igual';}
					switch($datos['criterio_monto']){
							case 'igual':
							       $criterio = $criterio." AND f.total = '".$datos['total']."' ";
								   break;							
							case 'mayor':
							       $criterio = $criterio." AND f.total > '".$datos['total']."' ";
								   break;
							case 'menor':
							       $criterio = $criterio." AND f.total < '".$datos['total']."' ";
								   break;					
					}
					
		}
			 	 
		$campos = ' * ';
		if(!$propiedades['id_cotped']){$propiedades['id_cotped']=0;}
		
		if(!$this->codproc){$this->codproc = $propiedades['codproc']?$propiedades['codproc']:'COT';}
		
		switch($propiedades['criterio']){
				  
			  case "por_id":
			        $campos = " f.*, c.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, 
					            cp.diascred as diascredito, 
					            denestcotped,cp.operacion as opespi,
					            suc.nomsuc,suc.sucmatriz,suc.sigsuc,
								e.desest
							   ";
					$sql_criterio = " LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
					                  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente									  
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatuscotped es ON es.estcotped = f.estcotped
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE f.codemp = '".$this->ls_codemp."' 
									    AND f.codproc='".$this->codproc."' 
									    AND f.id_cotped='".$propiedades['id_cotped']."'";
					break;							  
			  case "por_codigo":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.numcotped ".$this->postgres_ilike."LIKE('%".$propiedades['numcotped']."%') AND f.codproceso='".$this->codproc."'  ";   
					break;
			    case "por_id_solo":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_fact='".$propiedades['id_fact']."' AND f.codproc='".$this->codproc."' ";   
					break;
			   case "por_condpago":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_condpago='".$propiedades['id_condpago']."' AND f.codproc='".$this->codproc."'  ";   
					break;
			   case "por_transp":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_transp='".$propiedades['id_transp']."' AND f.codproc='".$this->codproc."'  ";   
					break;
			  case "por_vend":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' AND f.id_vend='".$propiedades['id_vend']."' AND f.codproc='".$this->codproc."'  ";   
					break;
			  case "por_ultimo_num":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
					                    AND f.codproc='".$this->codproc."'  
									  ORDER BY f.numcotped DESC LIMIT 1 ";   
					break;
			case "por_ultimo_num_sucursal":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."'  
					                    AND f.codproc='".$this->codproc."'
										 AND f.codsuc='".$this->codsuc."'  
									  ORDER BY f.numcotped DESC LIMIT 1 ";   
					break;
			case "validar_update":
					$sql_criterio = " WHERE f.codemp = '".$this->ls_codemp."' 
									  AND f.codproc='".$this->codproc."' 
									  AND f.numcotped='".$propiedades['numcotped']."'								 
									  AND f.id_cotped!='".$propiedades['id_cotped']."'";   
					break;				   
			 			 
			  case "por_listado":
			  
			  		if($datos['codart']){
							$criterio = $criterio." AND f.id_cotped IN (SELECT DISTINCT id_cotped 
							                                            FROM cxc_dt_cotiza_pedidos 
																	   WHERE id_tipodetalle='ARTIC'
																	     AND codproc=''".$this->codproc."'
																		 AND coddetalle='".$datos['codart']."' 
																	  ) ";
					}
					
					if($datos['codser']){
							$criterio = $criterio." AND f.id_cotped IN (SELECT DISTINCT id_cotped 
							                                            FROM cxc_dt_cotiza_pedidos 
																	   WHERE id_tipodetalle='SERVI'
																	     AND codproc='".$this->codproc."'
																		 AND coddetalle='".$datos['codser']."' 
																	  ) ";
					}
					
					if($datos['codconfac']){
							$criterio = $criterio." AND f.id_cotped IN (SELECT DISTINCT id_cotped 
							                                            FROM cxc_dt_cotiza_pedidos 
																	   WHERE id_tipodetalle='CONCE'
																	     AND codproc='".$this->codproc."'
																		 AND coddetalle='".$datos['codconfac']."' 
																	  ) ";
					}
					
					if($datos['estcot'] == 'VENCIDO'){
						$criterio .= " AND ((now()::date - f.fecvencotped)::integer - (now()::date - f.feccotped)::integer)::integer < 0
									   AND f.cxc_estatuscotped!='ANU'
									   AND f.cxc_estatuscotped!='PRO' ";
					}
					
					if($datos['estcot'] == 'VIGENTE'){
						$criterio .= " AND ((now()::date - f.fecvencotped)::integer - (now()::date - f.feccotped)::integer)::integer >= 0
									   AND f.cxc_estatuscotped!='ANU'
									    AND f.cxc_estatuscotped!='PRO'
									  ";
					}
					
					if($datos['estcot'] == 'CERRADO'){
						$criterio .= " AND f.cxc_estatuscotped='PRO' ";
					}
					
					if($datos['omitcer']){
						$criterio .= " AND f.cxc_estatuscotped!='PRO' ";
					}
					
					$campos = " f.*, c.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago, cp.diascred as diascredito, 
					            denestcotped,cp.operacion as opespi,
					            suc.nomsuc,suc.sucmatriz,suc.sigsuc,
								(now()::date - f.feccotped) as diasemicot, 							
							    (CASE WHEN ((now()::date - f.fecvencotped)::integer - (now()::date - f.feccotped)::integer)::integer<0 AND f.estcotped!='ANU'  
									   THEN abs(((now()::date - f.fecvencotped)::integer - (now()::date - f.feccotped)::integer)::integer)
								 ELSE 0
								 END) as diasvencot
							 ";
					$sql_criterio =   $joinadd."
									  LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
									                              AND suc.codsuc = f.codsuc
									  LEFT JOIN cxc_clientes c ON c.id_cliente = f.id_cliente
									  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
									  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
									  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
									  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
									  LEFT JOIN cxc_estatuscotped es ON es.estcotped = f.estcotped
									  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = c.id_tipo_cliente
									  LEFT JOIN cxc_zonas z ON z.id_zona = c.id_zona
									  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = c.id_clasif_cliente
									  LEFT JOIN cxc_vendedores vc ON vc.id_vend = c.id_vend
									  LEFT JOIN scg_cuentas cu ON cu.codemp = c.codemp AND cu.sc_cuenta = c.sc_cuenta AND status='C'
									  LEFT JOIN sigesp_pais p ON p.codpai = c.codpai
									  LEFT JOIN sigesp_estados e ON e.codpai = c.codpai AND e.codest = c.codest 
									  LEFT JOIN sigesp_municipio m ON m.codpai = c.codpai AND m.codest = c.codest AND m.codmun = c.codmun
									  LEFT JOIN sigesp_parroquia pa ON pa.codpai = c.codpai AND pa.codest = c.codest AND pa.codmun = c.codmun AND pa.codpar = c.codpar
									  WHERE f.codemp = '".$this->ls_codemp."'
									    AND f.codproc='".$this->codproc."' 
									    AND f.descrip ".$this->postgres_ilike."LIKE('%".$propiedades['descrip']."%')	
									    AND f.coment ".$this->postgres_ilike."LIKE('%".$propiedades['coment']."%')	
									  ".$criterio."							  								 
									  ORDER BY f.numcotped ";
					break;
						
		}		
							   
		$query_rs = "SELECT  ".$campos."  FROM cxc_cotiza_pedidos f ".$sql_criterio;
		//echo $query_rs.'<br><br><br>';
		$clase = get_class($this);
		$metodo = 'consulta_cotped';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '1';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);		
		return $respuesta;
	}
	
	
	function extraerdatos_cotped($datos=array()){
					
					$this->ConfigCotPet();
					
					$propiedades['criterio'] = "por_id";
					$propiedades['id_cotped'] = $datos['id_cotped'];
					$propiedades['codproc'] = $datos['codproc'];
					$datocotped = $this->consulta_cotped($propiedades);	
					if($datocotped===false){return false;}
								
					if(!$datocotped['cantidad']){
						$mensaje = 'No hay cotizaciones o pedidos con ese id. <br><b>id:</b> '.$datos['id_cotped'];
						$this->io_conexiones->mensajes_ajax($mensaje);																	
						return false;					
					}
					
					$this->DatosCotPed = $datocotped['fila'];
					$this->id_cotped=$this->DatosCotPed['id_cotped'];
					$this->numcotped=$this->DatosCotPed['numcotped'];
					$this->codproc=$this->DatosCotPed['codproc'];
					$this->feccotped=$this->DatosCotPed['feccotped'];
					$this->total = $this->DatosCotPed['total'];
					$this->codunieje = $this->DatosCotPed['codunieje'];
					$this->MontoNoGrav = $this->DatosCotPed['subtot']-$this->DatosCotPed['baseimp'];					
					$datocotped['fila'] = $this->FormatDatosCotPedPresent($datocotped['fila']);
															
					return $datocotped;
	
	}
	
	function FormatDatosCotPedPresent($datos=array()){
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
					
					$digitos = $this->codproc=='COT'?$this->digitoscot:$this->digitosped;
														
					$datos['feccotped']=$this->io_conexiones->formatea_fecha_normal($datos['feccotped']);
					$datos['fecvencotped']=$this->io_conexiones->formatea_fecha_normal($datos['fecvencotped']);
					$datos['porcdesc'] = number_format($datos['porcdesc'],2,',','.');
					$datos['montodesc'] = number_format($datos['montodesc']/$this->TasaCambio,2,',','.');
					$datos['saldo'] = number_format($datos['saldo']/$this->TasaCambio,2,',','.');
					$datos['moncob'] = number_format($datos['moncob']/$this->TasaCambio,2,',','.');
					$datos['subtot'] = number_format($datos['subtot']/$this->TasaCambio,2,',','.');
					$datos['iva'] = number_format($datos['iva']/$this->TasaCambio,2,',','.');
					$datos['otros'] = number_format($datos['otros']/$this->TasaCambio,2,',','.');
					$datos['total'] = number_format($datos['total']/$this->TasaCambio,2,',','.');
					$datos['baseimp'] = number_format($datos['baseimp']/$this->TasaCambio,2,',','.');
					$datos['rif_completo'] = $datos['tipperrif'].'-'. $datos['numpririf'].'-'.$datos['numterrif'];
					$datos['rif'] = $datos['tipperrif'].$datos['numpririf'].$datos['numterrif'];
					$datos['numcotped'] = str_pad($datos['numcotped'],$digitos,'0',STR_PAD_LEFT);
					$datos['tascam'] = number_format($datos['tascam'],2,',','.');
					
					$datos['infocaj'] = '('.$datos['codcaj'].') - '.$datos['nomcaj'];
					$datos['infosuc'] = '('.$datos['codsuc'].') - '.$datos['nomsuc'];
														
					return $datos;	
	}
	
	function formato_numero_cotped($numerocotped){
	   $digitos = $this->codproc=='COT'?$this->digitoscot:$this->digitosped;
	   return str_pad($numerocotped,$digitos,'0',STR_PAD_LEFT);	
	}
	
	function ConfigCotPet($datos=array()){
			
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';
			
			$param['entry'] = 'CANTIDAD_DIGITOS_NUMEROCOT';
			$this->digitoscot = $this->select_config($param);
			
			$param['entry'] = 'CANTIDAD_DIGITOS_NUMEROPED';
			$this->digitosped = $this->select_config($param);
			
			$param['entry'] = 'CODIGO_COT_AUTONUMERICO';
			$this->codautonumcot = $this->select_config($param);
			
			$param['entry'] = 'CODIGO_PED_AUTONUMERICO';
			$this->codautonumped = $this->select_config($param);
			
			return true;	
	}
	
	function formatear_datos_cotped($datos=array()){
				
				//$datos['numcont'] = str_pad($datos['numcont'],25,'0',STR_PAD_LEFT);
				//if(!$datos['id_moneda']){$datos['id_moneda']=1;}
				
				$this->ConfigCotPet();
						
			    if(!$datos['id_transp']){$datos['id_transp']=0;}
			    if(!$datos['id_condpago']){$datos['id_condpago']=1;}				
				
				if(!$datos['feccotped']){$datos['feccotped']=date('Y/m/d');}
				else{$datos['feccotped']=$this->io_conexiones->formatea_fecha_bd($datos['feccotped']);}
				
				if(!$datos['fecvencotped']){$datos['fecvencotped']=date('Y/m/d');}
				else{$datos['fecvencotped']=$this->io_conexiones->formatea_fecha_bd($datos['fecvencotped']);}
				
				if(!$datos['porcdesc']){$datos['porcdesc']=0;}
				if(!$datos['montodesc']){$datos['montodesc']=0;}
				if(!$datos['saldo']){$datos['saldo']=0;}
				if(!$datos['otros']){$datos['otros']=0;}
				
				$resp = $this->ConversionMoneda($datos);
				if($resp===false){return false;}
				
				$datos['porcdesc'] = $this->formato_numerico_us($datos['porcdesc']);
				$datos['montodesc'] = $this->formato_numerico_us($datos['montodesc'])*$this->TasaCambio;
				$datos['saldo'] = $this->formato_numerico_us($datos['saldo'])*$this->TasaCambio;
				$datos['subtot'] = $this->formato_numerico_us($datos['subtot'])*$this->TasaCambio;
				$datos['iva'] = $this->formato_numerico_us($datos['iva'])*$this->TasaCambio;
				$datos['otros'] = $this->formato_numerico_us($datos['otros'])*$this->TasaCambio;
				$datos['total'] = $this->formato_numerico_us($datos['total'])*$this->TasaCambio;
				$datos['baseimp'] = $this->formato_numerico_us($datos['baseimp'])*$this->TasaCambio;
				$datos['numcotped'] = $this->formato_numero_fact($datos['numcotped']);
								
				return $datos;
	}
	
	function generar_numero_cotped($datos=array()){
		 
		 $param['codsis'] = 'CXC';
		 $param['seccion'] = 'CONFIG';
		 $param['entry'] = 'NUMERACION_POR_SUCURSAL';
		 $this->num_x_suc = $this->select_config($param);
		 if(!$this->num_x_suc){$this->num_x_suc=1;}
		 
		 $opciones['criterio'] = $this->num_x_suc?'por_ultimo_num_sucursal':'por_ultimo_num';		 					 
		 $resultado = $this->consulta_cotped($opciones);
		 if($respuesta===false){return false;}
								 		 
		 if(!$resultado['cantidad']){
		 	$this->inicio_numerocotped = $this->codproc=='COT'?$this->inicio_numerocot:$this->inicio_numeroped; 
			return  $this->inicio_numerocotped;
		 }
		 	
		 $datos['numcotped'] = $resultado['fila']['numcotped'] + 1;	
		 return $datos['numcotped'];		
	}
	
	function insertar_cotizapedido($datos=array()){
					//print_r($datos);
					if(!$datos['id_cliente'] or !$datos['codproc'] or !$datos['codsuc'])
					{					
						$mensaje = 'Faltan datos para poder realizar la operación de inserción. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					}
					
					$this->codsuc = $datos['codsuc'];
					$this->codproc = $datos['codproc']?$datos['codproc']:'COT';
					
					$datos['numcotped'] = $this->generar_numero_cotped();
					if($datos['numcotped']===false){return false;}
					
					$datos = $this->formatear_datos_cotped($datos);
					if(datos===false){return false;}
									
					$this->estcla = ($datos['estcla'] and $this->estpreing)?$datos['estcla']:'-';
					$this->codestpro1 = ($datos['codestpro1'] and $this->estpreing)?$datos['codestpro1']:'-------------------------';
					$this->codestpro2 = ($datos['codestpro2'] and $this->estpreing)?$datos['codestpro2']:'-------------------------';
					$this->codestpro3 = ($datos['codestpro3'] and $this->estpreing)?$datos['codestpro3']:'-------------------------';
					$this->codestpro4 = ($datos['codestpro4'] and $this->estpreing)?$datos['codestpro4']:'-------------------------';
					$this->codestpro5 = ($datos['codestpro5'] and $this->estpreing)?$datos['codestpro5']:'-------------------------';
				    $this->codunieje =  ($datos['codunieje'] and $this->estpreing)?$datos['codunieje']:'----------'; 
															
					//SEGURIDAD DE LA SUCURSAL
					$this->codintper = $datos['codsuc'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
										
												
					 $query_rs = "  LOCK TABLE cxc_cotiza_pedidos IN ACCESS EXCLUSIVE MODE;
					                SELECT reset_sequencia('cxc_cotiza_pedidos','id_cotped');
					                INSERT INTO cxc_cotiza_pedidos(
											    codemp,
												numcotped,
												codproc,
												id_cliente,
												id_transp,												
												estcotped,
												id_condpago,
												id_vend,
												codmon,
												tascam,
												codsuc,
												feccotped,
												fecvencotped,
												porcdesc,
												montodesc,
												saldo,
												subtot,
												iva,
												otros,
												total,
												baseimp,
												descrip,
												coment,
												coduniadm, 
												codestpro1, 
       											codestpro2, 
												codestpro3, 
												codestpro4, 
												codestpro5, 
												estcla,												
												fecreg,
												usureg,
												horareg
										) 
										VALUES ('".$this->ls_codemp."','".$datos['numcotped']."','".$datos['codproc']."','".$datos['id_cliente']."','".
										           $datos['id_transp']."','".$datos['estcotped']."','".$datos['id_condpago']."','".$datos['id_vend']."','".$datos['codmon']."','".
												   $datos['tascam']."','".$datos['codsuc']."','".$datos['feccotped']."','".$datos['fecvencotped']."','".
												   $datos['porcdesc']."','".$datos['montodesc']."','".$datos['saldo']."','".$datos['subtot']."','".$datos['iva']."','".
												   $datos['otros']."','".$datos['total']."','".$datos['baseimp']."','".$datos['descrip']."','".$datos['coment']."','".
												   $this->codunieje."','".
												   $this->codestpro1."','".
												   $this->codestpro2."','".
												   $this->codestpro3."','".
												   $this->codestpro4."','".
												   $this->codestpro5."','".
												   $this->estcla."','".					
												   date("Y-m-d")."','".$_SESSION["la_logusr"]."','".date("H:i")."'); ";
			
					//echo $query_rs;
					$metodo = 'insertar_cotizapedido';
					$opcionesx['ajax'] = '1';
					$opcionesx['imprimir'] = '1';
					$msj = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo;									
					$id_insertado=$this->io_conexiones->conexion($query_rs,$opcionesx,$msj,'insert');
														
					if(!$id_insertado){					
						$mensaje = 'El registro no fué insertado.(No hay id_insert) ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;				
					}
					
					$datos['id_cotped'] = $id_insertado;	
					$this->id_cotped = $id_insertado;
					$this->numcotped = $datos['numcotped'];
					$this->total = 	$datos['total'];
					$this->feccotped = $datos['feccotped'];
														
					$resp = $this->procesamiento_lotes_cotped($datos);					
					if($resp===false){return false;}
										
					$resp = $this->InsertarCargosCotPed($datos);
					if($resp===false){return false;}
					
					if($this->codproc=='PED'){
						$resp = $this->ProcCotPedidos($datos);					
						if($resp===false){return false;}
					}
					
					$mensaje = "La operación se realizó exitosamente <b>Idº transacción:</b> ".$id_insertado;					
				    $this->io_conexiones->mensajes_ajax($mensaje);
					
					return true;	
			
	}
	
	
	   function procesamiento_lotes_cotped($opciones=array()){
				
					//SE INSERTAN EL DETALLE
					if($opciones['detalle_cotped']){										
						$respuesta = $this->procesar_detalles_cotped($opciones);
						if($respuesta===false){return false;}													
					}
					else{
							$resp = $this->eliminar_detalles_cotped($opciones);
							if($resp===false){return false;}
					}
												
					return true;
		
		}
		
		function ProcCotPedidos($datos=array()){
				
				if($this->codproc!='PED'){return true;}
				
				$datos['datos_cotizaciones'] = stripslashes($datos['datos_cotizaciones']);
				$ObjCot = $this->json->decode($datos['datos_cotizaciones']);		
				
				foreach($ObjCot as $detalle){				    
					$datosdet['codsuc'] =  $detalle->codsuc;											
					$datosdet['codproc'] =  $detalle->codproc;
					$datosdet['id_cotped'] =  $detalle->id_cotped;
					$datosdet['feccotped'] =  $detalle->feccotped;
					$datosdet['numcotped'] =  $detalle->numcotped;
					$datosdet['cantidad_detalle'] =  $detalle->cantidad_detalle;
					$datosdet['nombre_cliente'] =  $detalle->nombre_cliente;
					$datosdet['infosuc'] =  $detalle->infosuc;
					$datosdet['sigsuc'] =  $detalle->sigsuc;
					$datosdet['id_cot'] =  $detalle->id_cotped;
					$datosdet['id_ped'] =  $this->id_cotped;
					$resul = $this->InsertarEnlaceCotizaPedidos($datosdet);
					if($resul===false){return false;}					
					$param['id_cotped'] = $detalle->id_cotped;
					$param['codproc'] = 'COT';
					$param['estcotped'] = 'PRO';
					$resul = $this->ActEstatusCotPed($param);
					if($resul===false){return false;}
				}
				
				return true;
		}
		
		
		function procesar_detalles_cotped($datos=array()){
				
				//$resp = $this->eliminar_detalles($datos);
				//if($resp===false){return false;}				
				
				//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
				$datos['detalle_cotped'] = stripslashes($datos['detalle_cotped']);
				$obj_json = $this->json->decode($datos['detalle_cotped']);		
				
				//SE CREA UN ONJETO JSON POR CADA FILA. LOS CAMPOS SE ACCESAN CON EL FORMATO: $obj_json[numero_fila]->nombre_campo
				//SE RECORREN LAS FILAS DEL OBJETO JSON: $obj_json[0], $obj_json[1], $obj_json[2], etc.		
				
				foreach($obj_json as $detalle){						
						
						$datosdet['id_cotped'] =  $datos['id_cotped'];
						$datosdet['codproc'] =  $datos['codproc'];
						$datosdet['id_tipodetalle'] =  $detalle->id_tipodetalle;											
						$datosdet['renglon'] =  $detalle->renglon;
						$datosdet['coddetalle'] =  $detalle->coddetalle;
						$datosdet['codunimed'] =  $detalle->codunimed;
						$datosdet['codalm'] =  $detalle->codalm;
						$datosdet['cantidad_detalle'] =  $detalle->cantidad_detalle;
						$datosdet['precio_detalle'] =  $detalle->precio_detalle;
						$datosdet['porcdesc_detalle'] =  $detalle->porcdesc_detalle;
						$datosdet['desc_detalle'] =  $detalle->precio_detalle*($detalle->porcdesc_detalle/100);
						$datosdet['porciva'] =  $detalle->porciva;
						$datosdet['iva_detalle'] =  $detalle->iva_detalle;
						$datosdet['neto_detalle'] =  $detalle->neto_detalle;
						$datosdet['otros_detalle'] =  $detalle->otros_detalle;
						$datosdet['comentario'] =  $detalle->comentario;
						$datosdet['id_cot'] =  $detalle->id_cot;
													
						$datosdet = $this->formatear_datos_detalle_cotped($datosdet);
						$resul = $this->insertar_detalle_cotped($datosdet);
						if($resul===false){return false;}
						
				}
				
				return true;
		}
		
		function formatear_datos_detalle_cotped($datos=array()){
				
				if(!$datos['codproc']){$datos['codproc']='COT';}
				if(!$datos['id_tipodetalle']){$datos['id_tipodetalle']='ARTIC';}
				if(!$datos['otros_detalle']){$datos['otros_detalle']=0;}
				if(!$datos['codalm']){$datos['codalm']='000000';}				
				$datos['cantidad_detalle'] = $this->formato_numerico_us($datos['cantidad_detalle']);
				$datos['precio_detalle'] = $this->formato_numerico_us($datos['precio_detalle'])*$this->TasaCambio;
				$datos['porcdesc_detalle'] = $this->formato_numerico_us($datos['porcdesc_detalle']);				
				$datos['porciva'] = $this->formato_numerico_us($datos['porciva']);
				$datos['iva_detalle'] = $this->formato_numerico_us($datos['iva_detalle'])*$this->TasaCambio;
				$datos['neto_detalle'] = $this->formato_numerico_us($datos['neto_detalle'])*$this->TasaCambio;
				$datos['otros_detalle'] = $this->formato_numerico_us($datos['otros_detalle'])*$this->TasaCambio;
							
				return $datos;
		}
		
		function formatear_detalle_grilla_cotped($datos=array()){
				
				$datosDet = $datos;
				
				$datos['cantidad_detalle'] = number_format($datos['cantidad_detalle'],2,',','.');
				$datos['precio_detalle'] = number_format($datos['precio_detalle']/$this->TasaCambio,2,',','.');
				$datos['porcdesc_detalle'] = number_format($datos['porcdesc_detalle'],2,',','.');
				$datos['desc_detalle'] = number_format(($datos['porcdesc_detalle']/100)*($datos['precio_detalle']/$this->TasaCambio),2,',','.');			
				$datos['porciva'] = number_format($datos['porciva'],2,',','.');
				$datos['iva_detalle'] = number_format($datos['iva_detalle']/$this->TasaCambio,2,',','.');
				$datos['neto_detalle'] = number_format($datos['neto_detalle']/$this->TasaCambio,2,',','.');
				$datos['otros_detalle'] = number_format($datos['otros_detalle']/$this->TasaCambio,2,',','.');
				$datos['subtot_detalle'] = number_format($datos['subtot_detalle']/$this->TasaCambio,2,',','.');
					
				return $datos;
		}
		
		
		function insertar_detalle_cotped($datos=array()){
					
				if(!$datos['id_cotped'] or !$datos['renglon'] or !$datos['coddetalle'] or !$datos['codproc'] )
				{					
					//echo $datos['codcliente'].','.$datos['tipperrif'];
					$mensaje = 'Faltan datos para poder realizar la operación de inserción de detalle. ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$datos['id_cot'] = $datos['id_cot']?$datos['id_cot']:0;
												
				 $query_rs = sprintf("INSERT INTO cxc_dt_cotiza_pedidos(
												id_cotped,
												id_tipodetalle,
												codproc,
												renglon,
												coddetalle,
												codunimed,
												codalm,
												cantidad_detalle,
												precio_detalle,
												porcdesc_detalle,
												desc_detalle,
												porciva,
												iva_detalle,
												neto_detalle,
												otros_detalle,
												coduniadm,
												estcla,
												codestpro1, 
												codestpro2, 
												codestpro3, 
												codestpro4, 
												codestpro5,
												comentario,
												id_cot													
										) 
									 VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',
											 '%s','%s','%s','%s','%s','%s',
											 '%s','%s','%s','%s','%s','%s','%s','%s')",
										$datos['id_cotped'],
										$datos['id_tipodetalle'],
										$datos['codproc'],
										$datos['renglon'],
										$datos['coddetalle'],
										$datos['codunimed'],
										$datos['codalm'],
										$datos['cantidad_detalle'],
										$datos['precio_detalle'],
										$datos['porcdesc_detalle'],
										$datos['desc_detalle'],
										$datos['porciva'],
										$datos['iva_detalle'],
										$datos['neto_detalle'],
										$datos['otros_detalle'],
										$this->codunieje,
										$this->estcla,
										$this->codestpro1,
										$this->codestpro2,
										$this->codestpro3,
										$this->codestpro4,
										$this->codestpro5,
										$datos['comentario'],
										$datos['id_cot']			
									);								
				//echo $query_rs.'<br>';
				$this->rs_data=$this->io_sql->select($query_rs);			
			
				if($this->rs_data==false)
				{						
					$metodo = 'insertar_detalle_cotped';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje,'error');
					return false;
					
				}	
				return true;
		}
		
		
		function modificar_cotizapedido($datos=array()){
		
					 if(!$datos['id_cotped'] or !$datos['id_cliente'] or !$datos['numcotped'] or !$datos['codproc'] or !$datos['codsuc'])
					 {					
						
						$mensaje = 'Faltan datos para poder realizar la operación de UPDATE. ';
						$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
						return false;
					 }
					
					 $this->id_cotped = $datos['id_cotped'];
					 $this->codproc = $datos['codproc'];
										
					 
					 $datos = $this->formatear_datos_cotped($datos);
					 
					//SEGURIDAD DE LA SUCURSAL
					$this->codintper = $datos['codsuc'];		
					if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
										 
   				
					$query_rs = "      UPDATE cxc_cotiza_pedidos
										  SET   id_cliente='".$datos['id_cliente']."',
												id_transp='".$datos['id_transp']."',												
												id_condpago='".$datos['id_condpago']."',
												id_vend='".$datos['id_vend']."',
												feccotped='".$datos['feccotped']."',
												fecvencotped='".$datos['fecvencotped']."',
												porcdesc='".$datos['porcdesc']."',
												montodesc='".$datos['montodesc']."',
												saldo='".$datos['saldo']."',
												subtot='".$datos['subtot']."',
												iva='".$datos['iva']."',
												otros='".$datos['otros']."',
												total='".$datos['total']."',
												descrip='".$datos['descrip']."',
												coment='".$datos['coment']."',												
												fecmod='".date("Y-m-d")."', 
												usumod='".$_SESSION["la_logusr"]."', 
												horamod='".date("H:i")."'			 							 					
							              WHERE id_cotped='".$this->id_cotped."' 
										    AND codproc='".$this->codproc."'; ";
					
					$this->rs_data=$this->io_sql->select($query_rs);			
				
					if($this->rs_data===false)
					{						
						$metodo = 'modificar_cotizapedido';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
					}
					
					$this->numcotped = $datos['numcotped'];
					$this->total = 	$datos['total'];
					$this->feccotped = $datos['feccotped'];
					
					$resp = $this->eliminar_cargos_cotped($datos);					
					if($resp===false){return false;}
					$resp = $this->eliminar_detalles_cotped($datos);					
					if($resp===false){return false;}
					if($this->codproc=='PED'){
						$resp = $this->EliminaEnlacePedCot($datos);
						if($resp===false){return false;}
					}					
					$resp = $this->procesamiento_lotes_cotped($datos);					
					if($resp===false){return false;}					
					$resp = $this->InsertarCargosCotPed($datos);
					if($resp===false){return false;}	
					if($this->codproc=='PED'){
						$resp = $this->ProcCotPedidos($datos);					
						if($resp===false){return false;}
					}																	
					$mensaje = 'El documento fué modificado exitosamente.';
					$this->io_conexiones->mensajes_ajax($mensaje);
					
					return true;	
		
		}
		
		function InsertarCargosCotPed($opciones=array()){				
								
				$ls_sql="  INSERT INTO cxc_dt_cargos_cotped( codemp, id_cotped, codproc,
			   										  codcar, formula, porcar, monbasimp,monimp, montot,
												      scg_cuenta, spi_cuenta, codestpro1, codestpro2, 
												      codestpro3, codestpro4, codestpro5, estcla)            
							SELECT  '".$this->ls_codemp."', ".$this->id_cotped.", '".$this->codproc."',
									codcar, formula, porcar, monbasimp,monimp, montot,
									scg_cuenta, spi_cuenta, codestpro1, codestpro2, 
									codestpro3, codestpro4, codestpro5, estcla
							FROM (
									SELECT
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.spicta
											  WHEN id_tipodetalle='SERVI' THEN sc.spicta     
										 ELSE ''
										 END AS spi_cuenta,
										 
										 CASE WHEN id_tipodetalle='ARTIC' THEN spia.sc_cuenta
											  WHEN id_tipodetalle='SERVI' THEN spis.sc_cuenta     
										 ELSE ''
										 END AS scg_cuenta,
							
										CASE WHEN id_tipodetalle='ARTIC' THEN ac.codcar
											  WHEN id_tipodetalle='SERVI' THEN sc.codcar     
										 ELSE ''
										 END AS codcar,
							
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.porcar
											  WHEN id_tipodetalle='SERVI' THEN sc.porcar     
										 ELSE 0
										 END AS porcar,
										 
										 d.estcla, d.codestpro1, d.codestpro2, d.codestpro3, d.codestpro4, d.codestpro5,
										 CASE WHEN id_tipodetalle='ARTIC' THEN ac.formula
											  WHEN id_tipodetalle='SERVI' THEN sc.formula     
										 ELSE ''
										 END AS formula,
										 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM((precio_detalle*cantidad_detalle)*ac.porcar/100)
											  WHEN id_tipodetalle='SERVI' THEN  SUM((precio_detalle*cantidad_detalle)*sc.porcar/100) 
										 ELSE 0
										 END AS monimp, sum(precio_detalle*cantidad_detalle) as monbasimp,
										 CASE WHEN id_tipodetalle='ARTIC' THEN  SUM((precio_detalle*cantidad_detalle)*ac.porcar/100) + sum((precio_detalle*cantidad_detalle))
											  WHEN id_tipodetalle='SERVI' THEN  SUM((precio_detalle*cantidad_detalle)*sc.porcar/100) + sum((precio_detalle*cantidad_detalle)) 
										 ELSE 0
										 END AS montot
									 FROM cxc_dt_cotiza_pedidos d 
									 INNER JOIN cxc_cotiza_pedidos f ON f.id_cotped = d.id_cotped 
												                   AND f.codproc = d.codproc
									 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
												             AND f.codemp = a.codemp 
												             AND d.id_tipodetalle = 'ARTIC'	
									 LEFT JOIN siv_cargosarticulo ca ON ca.codart = a.codart		
									 LEFT JOIN sigesp_cargos ac ON ac.codcar = ca.codcar AND ac.codemp = ca.codemp	
									 LEFT JOIN spi_cuentas spia ON spia.spi_cuenta = ac.spicta
									 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
												              AND d.id_tipodetalle = 'SERVI'										
									 LEFT JOIN soc_serviciocargo cs ON cs.codser = s.codser		
									 LEFT JOIN sigesp_cargos sc ON cs.codcar = sc.codcar AND cs.codemp = sc.codemp	
									 LEFT JOIN spi_cuentas spis ON spis.spi_cuenta = sc.spicta					
									 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 										
									 WHERE d.id_cotped='".$this->id_cotped."'
									 AND d.codproc='".$this->codproc."' 
									 AND iva_detalle>0
									 GROUP BY 3,1,2,4,5,6,7,8,9,10,id_tipodetalle,ac.formula,sc.formula
									 ORDER BY 1
							) INFOCARGOS  
							ORDER BY 3 ";
					
				$rs_data=$this->io_sql->select($ls_sql);
				
				if($rs_data==false)
				{
					$metodo = 'InsertarCargosCotPed';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje,'error');
					return false;
					
				}
				
				/*
				$rs_data=$this->io_sql->select("SELECT * FROM cxc_dt_cargos_cotped");
				
				if($rs_data==false)
				{
					$metodo = 'InsertarCargosCotPed';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje,'error');
					return false;
					
				}
				
				echo  print_r($rs_data->fields);
				*/
				return true;
		
		}
		
		function consulta_detalles_cotped($opciones=array()){	
	
			$campos = ' * ';
			if(!$opciones['id_fact']){$opciones['id_fact']=0;}
			if(!$opciones['criterio']){$opciones['criterio'] = "por_detalle";}
			
			
			
			switch($opciones['criterio']){
				
				case "por_cant_articulos":
						$campos = ' id_tipodetalle,coddetalle ';
						$sql_criterio = " WHERE d.id_cotped='".$opciones['id_cotped']."' 
											AND  id_tipodetalle='ARTIC' ";   
						break;
					  
				 case "renglon":
						$sql_criterio = " WHERE  a.codemp = '".$this->ls_codemp."' 
										  AND d.id_cotped='".$opciones['id_cotped']."' AND  renglon='".$opciones['renglon']."' ";   
						break;
						
				 case "almacenes":
						$campos = ' SELECT DISTINCT codalm ';
						$sql_criterio = " WHERE  a.codemp = '".$this->ls_codemp."' 
										  AND d.id_cotped='".$opciones['id_cotped']."'  ";   
						break;
								   
				  case "por_detalle":
						$campos = "    CASE WHEN d.id_tipodetalle = 'SERVI' THEN s.denser 
											WHEN d.id_tipodetalle = 'ARTIC' THEN a.denart
											WHEN d.id_tipodetalle = 'CONCE' THEN c.denconfac
											ELSE ''
									   END AS dendetalle,
									   d.*, 
									   nomfisalm, denunimed, f.numcotped, f.feccotped, a.spi_cuenta, s.spg_cuenta,comentario, 
									   c.denconfac, c.scg_cuenta as scg_cuenta_conc ";
						
						$sql_criterio = "    LEFT JOIN cxc_cotiza_pedidos f ON f.id_cotped = d.id_cotped 
																	          AND f.codproc = d.codproc
											 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
																	 AND f.codemp = a.codemp 
																	 AND d.id_tipodetalle = 'ARTIC' 
											 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
																	  AND d.id_tipodetalle = 'SERVI'
											 LEFT JOIN cxc_conceptofac c ON c.codconfac=d.coddetalle 
																		AND d.id_tipodetalle = 'CONCE' 
											 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
											 LEFT JOIN siv_unidadmedida u ON u.codunimed = d.codunimed 
											 LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp 
											 LEFT JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = a.codemp AND d.codalm = aa.codalm 
											 LEFT JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp 
											WHERE d.id_cotped='".$opciones['id_cotped']."'
											AND d.codproc='".$opciones['codproc']."' 
											ORDER BY renglon; ";
						break;
				
								
				case "por_listado":
						if($opciones['codmon']){$criterio = $criterio." AND f.codmon = '".$opciones['codmon']."' ";}
						if($opciones['codser']){$criterio = $criterio." AND s.codser = '".$opciones['codser']."' AND d.id_tipodetalle = 'SERVI' ";}
						if($opciones['codart']){$criterio = $criterio." AND a.codart = '".$opciones['codart']."' AND d.id_tipodetalle = 'ARTIC' ";}
						if($opciones['codconfac']){$criterio = $criterio." AND c.codconfac = '".$opciones['codconfac']."' AND d.id_tipodetalle = 'CONCE' ";}
						if($opciones['soc_tiposervicio']){$criterio = $criterio." AND s.soc_tiposervicio = '".$opciones['codconfac']."' AND d.id_tipodetalle = 'SERVI' ";}
						if($opciones['cobrado']=='0' or $opciones['cobrado']=='1'){$criterio = $criterio." AND f.cobrado = '".$opciones['cobrado']."' ";}
						if($opciones['tipopecont']){$criterio = $criterio." AND f.tipopecont = '".$opciones['tipopecont']."' ";}
						
						$campos = "    CASE WHEN d.id_tipodetalle = 'SERVI' THEN s.denser 
											WHEN d.id_tipodetalle = 'ARTIC' THEN a.denart
											WHEN d.id_tipodetalle = 'CONCE' THEN c.denconfac
											ELSE ''
									   END AS dendetalle,
									   d.*
									  , nomfisalm, denunimed, f.numfact, f.fecfact, a.spi_cuenta, s.spg_cuenta,comentario, c.denconfac, c.scg_cuenta as scg_cuenta_conc,
										f.*, cl.*, v.nomvend, v.codvend, codtransp, desctransp, denmon, abrmon, desccondpago,cp.diascred as diascredito, descestfact,cp.operacion as opespi,
										suc.nomsuc,suc.sucmatriz,suc.sigsuc,caj.nomcaj,caj.scg_cuenta as scg_caja,caj.estcaj ";
						
						$sql_criterio = "    LEFT JOIN cxc_cotiza_pedidos f ON f.id_cotped = d.id_cotped 
																	       AND f.codproc = d.codproc
											 LEFT JOIN siv_articulo a ON a.codart=d.coddetalle 
																	 AND f.codemp = a.codemp 
																	 AND d.id_tipodetalle = 'ARTIC' 
											 LEFT JOIN soc_servicios s ON s.codser=d.coddetalle 
																	  AND d.id_tipodetalle = 'SERVI'
											 LEFT JOIN cxc_conceptofac c ON c.codconfac=d.coddetalle 
																		AND d.id_tipodetalle = 'CONCE' 
											 LEFT JOIN soc_tiposervicio ts ON s.codtipser=ts.codtipser 
											 LEFT JOIN siv_unidadmedida u ON u.codunimed = d.codunimed 
											 LEFT JOIN siv_producto p ON p.codprod = a.codmil AND p.codemp = a.codemp 
											 LEFT JOIN siv_articuloalmacen aa ON aa.codart = a.codart AND aa.codemp = a.codemp AND d.codalm = aa.codalm 
											 LEFT JOIN siv_almacen al ON al.codalm = aa.codalm AND al.codemp = aa.codemp 
											 
											 LEFT JOIN cxc_sucursales suc ON suc.codemp = f.codemp 
																	  AND suc.codsuc = f.codsuc
											  LEFT JOIN cxc_cajas caj ON caj.codemp = f.codemp 
																	 AND caj.codsuc = f.codsuc
																	 AND caj.codcaj = f.codcaj
											  LEFT JOIN cxc_clientes cl ON cl.id_cliente = f.id_cliente									  
											  LEFT JOIN cxc_vendedores v ON v.id_vend = f.id_vend
											  LEFT JOIN cxc_transporte t ON t.id_transp = f.id_transp
											  LEFT JOIN sigesp_moneda mo ON f.codmon = mo.codmon
											  LEFT JOIN cxc_condiciones_pago cp ON cp.id_condpago = f.id_condpago
											  LEFT JOIN cxc_estatus_factura es ON es.id_estfact = f.id_estfact
											  LEFT JOIN cxc_tipo_clientes tc ON tc.id_tipo_cliente = cl.id_tipo_cliente
											  LEFT JOIN cxc_zonas z ON z.id_zona = cl.id_zona
											  LEFT JOIN cxc_clasif_clientes cc ON cc.id_clasif_cliente = cl.id_clasif_cliente
											  LEFT JOIN cxc_vendedores vc ON vc.id_vend = cl.id_vend
											  LEFT JOIN scg_cuentas cu ON cu.codemp = cl.codemp AND cu.sc_cuenta = cl.sc_cuenta AND status='C'
											  LEFT JOIN sigesp_pais pai ON pai.codpai = cl.codpai
											  LEFT JOIN sigesp_estados e ON e.codpai = cl.codpai AND e.codest = cl.codest 
											  LEFT JOIN sigesp_municipio m ON m.codpai = cl.codpai AND m.codest = cl.codest AND m.codmun = cl.codmun
											  LEFT JOIN sigesp_parroquia pa ON pa.codpai = cl.codpai AND pa.codest = cl.codest AND pa.codmun = cl.codmun AND pa.codpar = cl.codpar
	
											 
											WHERE d.codproceso='FACTURA' 
											".$criterio."
											ORDER BY d.coddetalle ";
						break;				
				
				case "por_detalle_inv":
						$campos = "    sum(cantidad_detalle) AS cantidad_detalle,
									   d.id_fact, d.id_tipodetalle, d.codproceso, coddetalle, d.codunimed, 
									   d.codalm,    
									   precio_detalle, 
									   f.numfact, f.fecfact ";
						
						$sql_criterio = "   LEFT JOIN cxc_dt_cotiza_pedidos f ON f.id_cotped = d.id_cotped 
																	          AND f.codproc = d.codproc
											 WHERE d.id_fact='".$opciones['id_fact']."'
											 AND d.codproceso='FACTURA'
											 AND id_tipodetalle='ARTIC' 
											 GROUP BY d.id_fact,coddetalle, d.id_tipodetalle, d.codproceso, coddetalle, d.codunimed,d.codalm,f.numfact, f.fecfact,precio_detalle
											 ORDER BY coddetalle; ";
						break;						
			}
			
							   
			$query_rs = "SELECT ".$campos." FROM cxc_dt_cotiza_pedidos d ".$sql_criterio;
			//echo $query_rs.'<br><br><br>';
			$clase = get_class($this);
			$metodo = 'consulta_detalles_cotped';
			$param['arreglo'] = 'arreglo';
			$param['ajax'] = '0';
			$param['imprimir'] = '1';	
			$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
			return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}	
	
	
	function eliminar_detalles_cotped($opciones=array()){				   
					
				if(!$this->id_cotped or !$this->codproc){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el detalle de la cotización o pedido. 				           			    
						<br><b>METODO:</b> eliminar_detalles_cotped ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$query_rs = "DELETE FROM cxc_dt_cotiza_pedidos WHERE id_cotped='".$this->id_cotped."' AND codproc='".$this->codproc."'; ";				
				$this->rs_data=$this->io_sql->select($query_rs);
				//echo $query_rs.'<br>';
				if($this->rs_data==false)
				{						
					$metodo = 'eliminar_detalles_cotped';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
						
				return true;	
	
	}
	
	function eliminar_cargos_cotped($opciones=array()){				   
					
				if(!$this->id_cotped or !$this->codproc){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el detalle de la cotización o pedido. 				           			    
						<br><b>METODO:</b> eliminar_detalles_cotped ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$query_rs = "DELETE FROM cxc_dt_cargos_cotped WHERE id_cotped='".$this->id_cotped."' AND codproc='".$this->codproc."'; ";				
				$this->rs_data=$this->io_sql->select($query_rs);
				
				if($this->rs_data==false)
				{						
					$metodo = 'eliminar_cargos_cotped';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
						
				return true;	
	
	}
	
	function EliminaEnlacePedCot($opciones=array()){		   
					
				if(!$this->id_cotped or !$this->codproc){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el enlace entre la cotización y el pedido. 				           			    
						<br><b>METODO:</b> EliminaEnlacePedCot ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				if($this->codproc!='PED'){return true;}
				
				$query_rs = "SELECT * FROM cxc_enlace_cotiza_pedido WHERE id_ped='".$this->id_cotped."'; ";				
				$RsEnlaces=$this->io_sql->select($query_rs);				
				if($RsEnlaces==false){						
					$metodo = 'EliminaEnlacePedCot';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if(!$RsEnlaces->RecordCount()){return true;}
				
				foreach($RsEnlaces as $dato){					
					$query_rs = "DELETE FROM cxc_enlace_cotiza_pedido WHERE id_cot='".$dato['id_cot']."'; ";				
					$this->rs_data=$this->io_sql->select($query_rs);					
					if($this->rs_data==false){						
						$metodo = 'EliminaEnlacePedCot';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;
						
					}
					
					$param['id_cotped'] = $dato['id_cot'];
					$param['codproc'] = 'COT';
					$param['estcotped'] = 'EMI';
					$resul = $this->ActEstatusCotPed($param);
					if($resul===false){return false;}
				}
						
				return true;	
	
	}
	
	function BuscarEnlacePedCot($datos=array()){
			
			if(!$datos['id_ped']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el enlace entre el pedido y las cotizaciones. 				           			    
					<br><b>METODO:</b> BuscarEnlacePedCot ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
						
			$query_rs = "   SELECT cot.codsuc, cot.codproc, cot.id_cotped, 
								   to_char(cot.feccotped, 'DD/MM/YYYY') AS feccotped, 
								   cot.numcotped, c.nombre_cliente, 
								   suc.sigsuc,
								   '('||suc.codsuc||') - '||suc.sigsuc AS infosuc      
							FROM cxc_cotiza_pedidos cot
							INNER JOIN cxc_enlace_cotiza_pedido e ON e.id_cot = cot.id_cotped
							INNER JOIN cxc_sucursales suc ON suc.codemp = cot.codemp 
												AND suc.codsuc = cot.codsuc
							INNER JOIN cxc_clientes c ON c.id_cliente = cot.id_cliente
						    WHERE e.id_ped='".$datos['id_ped']."'; 
						";				
			$RsEnlaces=$this->io_sql->select($query_rs);				
			if($RsEnlaces==false){						
				$metodo = 'BuscarEnlacePedCot';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return $RsEnlaces;
	}
	
	
	function InfoEnlacePedCot($datos=array()){
			$datos['id_ped'] = $datos['id_cotped'];
			$rs = $this->BuscarEnlacePedCot($datos);
			if($rs===false){return false;}
			if(!$rs->RecordCount()){return "";}
			
			
			$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="4" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="8">					            
								<b> Cotizaciones Asociadas </b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Suc</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° Cot</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Fecha</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">Cliente</font></td>
						</tr>							
					</thead>';
			
			$filas="";		
			foreach($rs as $datosdet){
				
				$filas .= '<tr bgcolor="'.$color_fila.'">
								<td width="'.$this->RepParam['ancho'][1].'" align="center"><font size="8">'.$datosdet['infosuc'].'</font></td>
								<td width="'.$this->RepParam['ancho'][2].'" align="center"><font size="8">'.$this->formato_numero_cotped($datosdet['numcotped']).'</font></td>
								<td width="'.$this->RepParam['ancho'][3].'" align="center"><font size="8">'.$datosdet['feccotped'].'</font></td>
								<td width="'.$this->RepParam['ancho'][4].'" align="left"><font size="8">'.$datosdet['nombre_cliente'].'</font></td>								
							</tr>';
			}
			
			$fin_tabla = '</table></p>';
			
			return $encabezado.$filas.$fin_tabla;
	
	}
	
	
	function ValidarCotizaPedido($datos=array()){
				
				if(!$this->numcotped){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder generar el detalle contable de la factura. 				           			    
								<br><b>METODO:</b> ValidarCotizaPedido ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}	
				
				$metodo = 'ValidarCotizaPedido';
				
				 $param['codsis'] = 'CXC';
				 $param['seccion'] = 'CONFIG';
				 $param['entry'] = 'NUMERACION_POR_SUCURSAL';
				 $this->num_x_suc = $this->select_config($param);
				 if(!$this->num_x_suc){$this->num_x_suc=1;}
				 
				 $tipo = $this->num_x_suc?'por_ultimo_num_sucursal':'por_ultimo_num';	
				
				switch($tipo){
						case 'por_ultimo_num_sucursal':
						    $ls_sql="   SELECT numcotped::integer 
										FROM cxc_cotiza_pedidos 
										WHERE codproc='".$this->codproc."' 
										AND codsuc='".$this->codsuc."' 
										ORDER BY numcotped::integer DESC LIMIT 1";
							break;
							
						case 'por_ultimo_num':
						    $ls_sql="   SELECT numcotped::integer 
										FROM cxc_cotiza_pedidos 
										WHERE codproc='".$this->codproc."'
										ORDER BY numcotped::integer DESC LIMIT 1";
							break;
				}
												
				$rs_data=$this->io_sql->select($ls_sql);
				if($rs_data==false){				
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
					else{$this->io_mensajes->message($mensaje);}
					return false;
				}
				
				if(!$rs_data->RecordCount()){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> NO se encontraron registros de cotizaciones o pedidos. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;						
				}
				
				if($rs_data->fields['numcotped'] > $this->numcotped){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se pueden eliminar cotizaciones o pedidos con número intermedios 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;						
				}
								
				return true;
								
		}
	
	function eliminar_cotizapedido($datos=array()){
		
				if(!$datos['id_cotped'] or !$datos['codsuc'] or !$datos['codproc'])
				{					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de eliminación. 				           			    
								<br><b>METODO:</b> ValidarCotizaPedido ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$this->id_cotped = $datos['id_cotped'];
				$resp = $this->extraerdatos_cotped($datos);
				if($resp===false){return false;}
				
				if(!$this->estcotped!="EMI")
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Solo se pueden eliminar cotizaciones con estatus emitido. 				           			    
								<br><b>METODO:</b> ValidarCotizaPedido ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}	
				
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datos['codsuc'];		
				if(!$this->obtSegCxc()){$this->io_conexiones->mensajes_ajax("No tiene permisos para la Sucursal"); return false;}
								
				$this->id_cotped = $datos['id_cotped'];	
				$this->codsuc = $datos['codsuc'];						
				$this->codproc = $datos['codproc'];
				$this->feccotped = $datos['feccotped'];				
								
				$resp = $this->ValidarCotizaPedido($datos);
				if($resp===false){return false;}
														
				$resultado = $this->eliminar_detalles_cotped($datos);
				if($resultado===false){return false;}
				
				if($this->codproc=='PED'){
					$resp = $this->EliminaEnlacePedCot($datos);
					if($resp===false){return false;}
				}				
																		
				$query_rs = "   DELETE FROM cxc_dt_cargos_cotped WHERE id_cotped='".$datos['id_cotped']."' 
															       AND codemp='".$this->ls_codemp."'
															       AND codproc='".$this->codproc."';								
								DELETE FROM cxc_cotiza_pedidos WHERE id_cotped='".$datos['id_cotped']."';									
								SELECT reset_sequencia('cxc_cotiza_pedidos','id_cotped'); 
							";
				
				$this->rs_data=$this->io_sql->select($query_rs);			
			
				if($this->rs_data==false){
					$metodo = 'eliminar_cotizapedido';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){		      
					$mensaje = 'ERROR: No se pudo eliminar la factura !. No hay filas afectadas por la operación.';
					$this->io_conexiones->mensajes_ajax($mensaje);				
					return false;
				}		
						
				$mensaje = 'La cotización o pedido ha sido eliminada. ';
				$this->io_conexiones->mensajes_ajax($mensaje);		
				
				return true;
		}
		
		
		function InsertarEnlaceCotizaPedidos($datos=array()){
					
				if(!$datos['id_ped'] or !$datos['id_cot'])
				{					
					//echo $datos['codcliente'].','.$datos['tipperrif'];
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para enlazar la cotización al pedido				           			    
								<br><b>METODO:</b> InsertarEnlaceCotizaPedidos ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}							
				
				$ls_sql = "LOCK TABLE cxc_enlace_cotiza_pedido IN ACCESS EXCLUSIVE MODE;
						   INSERT INTO cxc_enlace_cotiza_pedido(codemp, id_ped, id_cot, estenlace, fecreg, usureg, horareg)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['id_ped']."', '".
									  $datos['id_cot']."', 
									  'P', '".									  
									  date("Y-m-d")."', '".
									  $_SESSION["la_logusr"]."', '".
									  date("H:i")."')";
									  							
				//echo $ls_sql.'<br>';
				$this->rs_data=$this->io_sql->select($ls_sql);			
			
				if($this->rs_data==false)
				{						
					$metodo = 'InsertarEnlaceCotizaPedidos';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje,'error');
					return false;
					
				}	
				return true;
		}
		
		function  ActEstatusCotPed($datos=array()){
			
			if(!$datos['id_cotped'] or !$datos['codproc'] or !$datos['estcotped'])
			{					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación actualización de estatus. 				           			    
							<br><b>METODO:</b> ActEstatusCotPed ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
		
			$ls_sql = "UPDATE cxc_cotiza_pedidos
						  SET estcotped='".$datos['estcotped']."'		
						WHERE codemp='".$this->ls_codemp."'
						  AND id_cotped='".$datos['id_cotped']."'
						  AND codproc='".$datos['codproc']."' ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			//echo $ls_sql.'<br>';
			if($this->rs_data==false)
			{
				
				$metodo = 'ActEstatusCotPed';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			return true;
	}
	
	
	
	function ProcEnlaceCotPedFact($datos=array()){
				
				if(!$datos['datos_cotped']){return true;}
				
				$datos['datos_cotped'] = stripslashes($datos['datos_cotped']);
				$ObjCotPed = $this->json->decode($datos['datos_cotped']);		
				
				foreach($ObjCotPed as $detalle){				    
					$datosdet['codsuc'] =  $detalle->codsuc;											
					$datosdet['codproc'] =  $detalle->codproc;
					$datosdet['id_cotped'] =  $detalle->id_cotped;
					$datosdet['id_fact'] =  $this->id_fact;
					$datosdet['feccotped'] =  $detalle->feccotped;
					$datosdet['numcotped'] =  $detalle->numcotped;					
					$datosdet['nombre_cliente'] =  $detalle->nombre_cliente;
					$datosdet['infosuc'] =  $detalle->infosuc;
					$datosdet['sigsuc'] =  $detalle->sigsuc;
					$datosdet['id_cotped'] =  $detalle->id_cotped;					
					$resul = $this->InsertarEnlaceCotPedFact($datosdet);
					if($resul===false){return false;}					
					$param['id_cotped'] = $detalle->id_cotped;
					$param['codproc'] = $detalle->codproc;
					$param['estcotped'] = 'PRO';
					$resul = $this->ActEstatusCotPed($param);
					if($resul===false){return false;}
				}
				
				return true;
		}
	
	function InsertarEnlaceCotPedFact($datos=array()){
					
			if(!$datos['id_cotped'] or !$datos['codproc'] or !$datos['id_fact'])
			{					
				//echo $datos['codcliente'].','.$datos['tipperrif'];
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para enlazar la cotización al pedido				           			    
							<br><b>METODO:</b> InsertarEnlaceCotPedFact ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}							
			
			$ls_sql = "LOCK TABLE cxc_enlace_cotped_facturas IN ACCESS EXCLUSIVE MODE;
					   INSERT INTO cxc_enlace_cotped_facturas(codemp, id_cotped, codproc, id_fact, estenlace, fecreg, usureg, horareg)
					   VALUES ('".$this->ls_codemp."', '".
								  $datos['id_cotped']."', '".
								  $datos['codproc']."', '".
								  $datos['id_fact']."', 
								  'P','".									  
								  date("Y-m-d")."', '".
								  $_SESSION["la_logusr"]."', '".
								  date("H:i")."')";
															
			//echo $ls_sql.'<br>';
			$this->rs_data=$this->io_sql->select($ls_sql);			
		
			if($this->rs_data==false)
			{						
				$metodo = 'InsertarEnlaceCotPedFact';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje,'error');
				return false;
				
			}	
			return true;
	}
	
	function BuscarEnlaceCotPedFact($datos=array()){
			
			if(!$datos['id_fact']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder buscar el enlace entre el pedido y las facturas. 				           			    
					<br><b>METODO:</b> BuscarEnlaceCotPedFact ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
						
			$query_rs = "   SELECT cot.codsuc, cot.codproc, cot.id_cotped, 
								   to_char(cot.feccotped, 'DD/MM/YYYY') AS feccotped, 
								   cot.numcotped, c.nombre_cliente, 
								   suc.sigsuc,e.id_fact,
								   '('||suc.codsuc||') - '||suc.sigsuc AS infosuc      
							FROM cxc_cotiza_pedidos cot
							INNER JOIN cxc_enlace_cotped_facturas e ON e.codproc = cot.codproc
																   AND e.id_cotped = cot.id_cotped
							INNER JOIN cxc_sucursales suc ON suc.codemp = cot.codemp 
														 AND suc.codsuc = cot.codsuc
							INNER JOIN cxc_clientes c ON c.id_cliente = cot.id_cliente
							WHERE e.id_fact='".$datos['id_fact']."'; 
						";				
			$RsEnlaces=$this->io_sql->select($query_rs);				
			if($RsEnlaces==false){						
				$metodo = 'BuscarEnlaceCotPedFact';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;				
			}
			
			return $RsEnlaces;
	}
	
	function EliminaEnlaceCotPedFact($opciones=array()){		   
					
				if(!$this->id_fact){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el enlace entre la cotización y el pedido. 				           			    
						<br><b>METODO:</b> EliminaEnlaceCotPedFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
				$query_rs = "SELECT * FROM cxc_enlace_cotped_facturas WHERE id_fact='".$this->id_fact."'; ";				
				$RsEnlaces=$this->io_sql->select($query_rs);				
				if($RsEnlaces==false){						
					$metodo = 'EliminaEnlaceCotPedFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if(!$RsEnlaces->RecordCount()){return true;}
				
				foreach($RsEnlaces as $dato){					
					$query_rs = "DELETE FROM cxc_enlace_cotped_facturas WHERE id_cotped='".$dato['id_cotped']."' AND codproc='".$dato['codproc']."'; ";				
					$this->rs_data=$this->io_sql->select($query_rs);					
					if($this->rs_data==false){						
						$metodo = 'EliminaEnlaceCotPedFact';
						$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;						
					}
					
					$param['id_cotped'] = $dato['id_cotped'];
					$param['codproc'] = $dato['codproc'];
					$param['estcotped'] = 'EMI';
					$resul = $this->ActEstatusCotPed($param);
					if($resul===false){return false;}
				}
						
				return true;
	}
	
	function ProcAnulaEnlaceCotPedFact($datos=array()){		   
					
			if(!$this->id_fact or !$datos['estcotped']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el enlace entre la cotización y el pedido. 				           			    
					<br><b>METODO:</b> EliminaEnlaceCotPedFact ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$query_rs = "   UPDATE cxc_enlace_cotped_facturas SET estenlace='".$datos['estenlace']."';
							SELECT * FROM cxc_enlace_cotped_facturas WHERE id_fact='".$this->id_fact."'; 
						";				
			$RsEnlaces=$this->io_sql->select($query_rs);				
			if($RsEnlaces==false){						
				$metodo = 'AnulaEnlaceCotPedFact';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			if(!$RsEnlaces->RecordCount()){return true;}
			
			foreach($RsEnlaces as $dato){
				$param['id_cotped'] = $dato['id_cotped'];
				$param['codproc'] = $dato['codproc'];
				$param['estcotped'] = $datos['estcotped'];
				$resul = $this->ActEstatusCotPed($param);
				if($resul===false){return false;}
			}
					
			return true;
	}
	
	
	function ConsultaTalonarioDoc($opciones=array()){	
		$sql_criterio="";
		switch($opciones['criterio']){
							 
			  case "por_listado":
			        if($opciones['codsuc']){$sql_criterio .= " AND t.codsuc = '".$opciones['codsuc']."' ";}
					if($opciones['nrotal']){$sql_criterio .= " AND t.nrotal = '".$opciones['nrotal']."' ";}
					if($opciones['tiptal']){$sql_criterio .= " AND t.tiptal = '".$opciones['tiptal']."' ";}
					if($opciones['esttal']){$sql_criterio .= " AND t.esttal = '".$opciones['esttal']."' ";}
					$sql_criterio .= " ORDER BY nrotal ";
					break;			
		}
								   
		$query_rs = " SELECT * FROM cxc_talonarios t
		              INNER JOIN cxc_sucursales suc ON suc.codemp = t.codemp 
									              AND suc.codsuc = t.codsuc
				    ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaTalonarioDoc';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;
		$respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);			
		return $respuesta;
	}
	
	function ConsultaEstTalonario($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " ORDER BY esttal";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_estatus_talonario ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaEstTalonario';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboEstTal($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbesttal';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['esttal']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['desesttal'];  $id_carga = $opciones['esttal'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaEstTalonario($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["esttal"].'" '.$selected.'>'.$fila["desesttal"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;
	}
	
	
	function ConsultaEstDocTalonario($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " ORDER BY estdoctal";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_estatus_doctal ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaEstDocTalonario';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboEstDocTal($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbestdoctal';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['estdoctal']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['desestdoctal'];  $id_carga = $opciones['estdoctal'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaEstTalonario($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["estdoctal"].'" '.$selected.'>'.$fila["desestdoctal"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;
	}
	
	function ConsultaTipoTalonario($opciones=array()){	
		
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " ORDER BY tiptal";
					break;			
		}
								   
		$query_rs = "SELECT * FROM cxc_tipo_talonario ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaTipoTalonario';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function comboTipTal($opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbtiptal';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['tiptal']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['destiptal'];  $id_carga = $opciones['tiptal'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaTipoTalonario($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$opciones['funcion_js'].'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$combo .= '<option value="'.$fila["tiptal"].'" '.$selected.'>'.$fila["destiptal"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;
	}
	
	
	function GenerarNroTalonario($datos=array()){
			
			$metodo = 'GenerarNroTalonario';
			$ls_sql=" SELECT nrotal::integer FROM cxc_talonarios WHERE tiptal = '".$datos['tiptal']."' ORDER BY nrotal::integer DESC LIMIT 1";					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			if(!$rs_data->RecordCount()){$this->nrotal = 1; return true;}
			
			$this->nrotal = (integer)$rs_data->fields['nrotal']+1;
			
			return true; 
			
	}
	
	function ValidarTalonario($datos=array()){
			
			if(!$datos['tiptal'] or !$datos['nroinisec']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar el registro del talonario. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
						
			$query_rs = "   SELECT * 
							FROM cxc_talonarios t
						    WHERE t.codemp='".$this->ls_codemp."'
							  AND t.tiptal='".$datos['tiptal']."'
							  AND t.nroident='".$datos['nroident']."'
							  AND t.nroinisec='".$datos['nroinisec']."'
							; 
						";				
			$RsExiste=$this->io_sql->select($query_rs);				
			if($RsExiste==false){						
				$metodo = 'ValidarTalonario';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
				
			}
			
			if($RsExiste->RecordCount()){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Ya existe un talonario con el mismo número de inicio del secuencial. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
			
			return true;
	}
	
	
	function ProcesarTalonario($datos=array()){
	
			$metodo='ProcesarTalonario';
			
			if(!$datos['tiptal'] or !$datos['esttal'] or !$datos['nroinisec'] or !$datos['cantal']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder procesar el registro del talonario. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
			
			$resp = $this->ValidarTalonario($datos);
			if($resp===false){return false;}
			
			$resp = $this->GenerarNroTalonario($datos);
			if($resp===false){return false;}
						
			$ls_sql = "INSERT INTO cxc_talonarios(codemp, tiptal, nrotal, codsuc, esttal, 
			                                      fecenttal, nroident,nroinisec, cantal)
					   VALUES ('".$this->ls_codemp."', '".
								  $datos['tiptal']."', '".
								  $this->nrotal."', '".
								  $datos['codsuc']."', '".
								  $datos['esttal']."', '".
								  $datos['fecenttal']."', '".
								  $datos['nroident']."', '".
								  $datos['nroinisec']."', '".
								  $datos['cantal']."'); ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			
			if($this->rs_data==false){
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;					
			}
			$datos['nrotal'] = $this->nrotal;
			$resp = $this->GenDetTalonario($datos);
			if($resp===false){return false;}
						
			$mensaje = 'El talonario ha sido procesado con exito. ';
			$this->io_conexiones->mensajes_ajax($mensaje);		
				
			return true;
	}
	
	function GenDetTalonario($datos=array()){
			
			$metodo='GenDetTalonario';
			
			if($datos['cantal']==0){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La catidad de talones no puede ser 0. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
			
			if($datos['nroinisec']==0){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La número de inicio del secuencial no puede ser 0. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
			
			$param['codsis'] = 'CXC';
			$param['seccion'] = 'CONFIG';
			$param['entry'] = 'CANTIDAD_DIGITOS_NUMEROCONTROL';
			$nrodigitcont = $this->select_config($param);
			if(!$nrodigitcont){$nrodigitcont=8;}
			
			for($i = 0; $i < $datos['cantal']; $i++){
				
				$datos['nrodoctal'] = $i+1;				
				$datos['nrosec'] = $datos['nroinisec'] + $i;
				$datos['nrocont'] = str_pad($datos['nroident'],2,'0',STR_PAD_LEFT).'-'.str_pad($datos['nrosec'],$nrodigitcont,'0',STR_PAD_LEFT);
									
				$resp = $this->InsertarDetTalonario($datos);
				if($resp===false){return false;}
			}
			
			return true;
	}
	
	function ConsultaDetTalonario($datos=array()){	
				
		$campos = ' * ';
		$datos['criterio'] = $datos['criterio']?$datos['criterio']:'por_listado';
		$criterio="";
		switch($datos['criterio']){
				  
			  case "valida_doc":
					$sql_criterio = "  WHERE d.codemp='".$this->ls_codemp."'
										 AND d.tiptal='".$datos['tiptal']."'
										 AND d.nroident='".$datos['nroident']."'
										 AND d.nrosec='".$datos['nrosec']."' ";
					break;							  
			 	   
			  case "por_listado":
			        if($datos['codsuc']){$criterio .= " AND t.codsuc = '".$datos['codsuc']."' ";}
					if($datos['nrotal']){$criterio .= " AND t.nrotal = '".$datos['nrotal']."' ";}
					if($datos['tiptal']){$criterio .= " AND t.tiptal = '".$datos['tiptal']."' ";}
					if($datos['esttal']){$criterio .= " AND t.esttal = '".$datos['esttal']."' ";}										
					$sql_criterio = "  INNER JOIN cxc_talonarios t ON t.codemp = d.codemp
									   							  AND t.tiptal = d.tiptal
																  AND t.nrotal = d.nrotal 
									   INNER JOIN cxc_estatus_doctal e ON e.estdoctal = d.estdoctal
									   WHERE d.codemp='".$this->ls_codemp."' ".$criterio." ORDER BY nrodoctal ";
					break;
					
			 case "por_impresos":										
					$sql_criterio = "  WHERE d.codemp='".$this->ls_codemp."'
										 AND d.tiptal='".$datos['tiptal']."'
										 AND d.nrotal='".$datos['nrotal']."'
										 AND (d.estdoctal='I' OR d.estdoctal='A') ";
					break;
					
			case "por_disponible":										
					$sql_criterio = "  INNER JOIN cxc_talonarios t ON t.codemp = d.codemp
									   							  AND t.tiptal = d.tiptal
																  AND t.nrotal = d.nrotal 
									   INNER JOIN cxc_estatus_doctal e ON e.estdoctal = d.estdoctal
									   WHERE d.codemp='".$this->ls_codemp."'
										 AND t.codsuc='".$datos['codsuc']."'
										 AND t.tiptal='".$datos['tiptal']."'
										 AND d.estdoctal='D'
										 AND t.esttal='ACT'  
									   ORDER BY fecenttal,d.nrotal,nrodoctal ASC LIMIT 50";
					break;
					
			case "por_nrocont":										
					$sql_criterio = "  INNER JOIN cxc_talonarios t ON t.codemp = d.codemp
									   							  AND t.tiptal = d.tiptal
																  AND t.nrotal = d.nrotal 
									   INNER JOIN cxc_estatus_doctal e ON e.estdoctal = d.estdoctal
									   WHERE d.codemp='".$this->ls_codemp."'
										 AND t.codsuc='".$datos['codsuc']."'
										 AND t.tiptal='".$datos['tiptal']."'
										 AND d.nrocont='".$datos['nrocont']."'
									";
					break;			
		}
								   
		$query_rs = "SELECT ".$campos." FROM cxc_dt_talonario d ".$sql_criterio;
		//echo $query_rs;
		$clase = get_class($this);
		$metodo = 'ConsultaDetTalonario';
		$param['arreglo'] = 'arreglo';
		$param['ajax'] = '0';
		$param['imprimir'] = '1';	
		$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
		return $respuesta=$this->io_conexiones->conexion($query_rs,$param,$msj);
	}
	
	function InsertarDetTalonario($datos=array()){
	
			$metodo='InsertarDetTalonario';
			
			if(!$datos['tiptal'] or !$datos['nrotal'] or !$datos['nrodoctal'] or !$datos['nrosec'] or !$datos['nrocont']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder insertar el detalle del talonario. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
			
			$datos['criterio']='valida_doc';
			$resp = $this->ConsultaDetTalonario($datos);
			if($resp===false){return false;}
			if($resp['rs']->RecordCount()){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El documento '.$datos['nrocont'].' ya existe !. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
			
			$datos['estdoctal'] = "D";
					
			$ls_sql = "INSERT INTO cxc_dt_talonario(codemp, tiptal, nrotal, nrodoctal, 
			                                        nroident, nrosec, estdoctal, nrocont)
					   VALUES ('".$this->ls_codemp."', '".
								  $datos['tiptal']."', '".
								  $datos['nrotal']."', '".
								  $datos['nrodoctal']."', '".
								  $datos['nroident']."', '".
								  $datos['nrosec']."', '".
								  $datos['estdoctal']."', '".
								  $datos['nrocont']."'); ";
			
			$this->rs_data=$this->io_sql->select($ls_sql);			
			
			if($this->rs_data==false){
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;					
			}
	}
	
	function  EliminarTalonario($datos=array()){
				
				$metodo='EliminarTalonario';
			
				if(!$datos['tiptal'] or !$datos['nrotal']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el registro del talonario. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				$datos['criterio']='por_impresos';
				$resp = $this->ConsultaDetTalonario($datos);
				if($resp===false){return false;}
				if($resp['rs']->RecordCount()){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El talonario posee talones impresos o anulados y no puede ser eliminado !. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				$ls_sql = " DELETE FROM cxc_dt_talonario 
				                 WHERE codemp='".$this->ls_codemp."' 
								   AND tiptal='".$datos['tiptal']."' 
								   AND nrotal='".$datos['nrotal']."';
						   
						   DELETE FROM cxc_talonarios 
				                 WHERE codemp='".$this->ls_codemp."' 
								   AND tiptal='".$datos['tiptal']."' 
								   AND nrotal='".$datos['nrotal']."'; ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}				
				
				$mensaje = 'Se eliminaron '.$this->io_sql->conn->Affected_Rows().' talonario(s)';				
				$this->io_conexiones->mensajes_ajax($mensaje);			
				return true;
	
	}
	
	
	function  ModificarTalonario($datos=array()){
				
			$metodo='ModificarTalonario';
		
			if(!$datos['tiptal'] or !$datos['nrotal']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder modificar el talonario. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_conexiones->mensajes_ajax($mensaje);																		
				return false;	
			}
							
			if($datos['anular']){					
				$resp = $this->ProcAnuDetTalonario($datos);
				if($resp===false){return false;}				
			}
									
			return true;
	
	}
	
	function ProcAnuDetTalonario($datos=array()){
				
			if(!$datos['datosGrid']){return true;}
			
			$datos['datosGrid'] = stripslashes($datos['datosGrid']);
			$ObjTal = $this->json->decode($datos['datosGrid']);		
			
			if(!$ObjTal->RecordCount){return true;}
			
			foreach($ObjTal->datos as $detalle){				    
				
				$datosdet['nrodoctal'] =  $detalle->nrodoctal;											
				$datosdet['nroident'] =  $detalle->nroident;
				$datosdet['nrosec'] =  $detalle->nrosec;
				$datosdet['nrocont'] =  $detalle->nrocont;
				$datosdet['estdoctal'] =  $detalle->estdoctal;
				$datosdet['tiptal'] =  $datos['tiptal'];
				$datosdet['nrotal'] =  $datos['nrotal'];				
				$datosdet['obsanu'] =  $datos['conanu'];
				$datosdet['fecanu'] =  $this->io_conexiones->formatea_fecha_bd($datos['fecanu']);				
							
				$resul = $this->AnularDtTalonario($datosdet);
				if($resul===false){return false;}					
			
			}
			
			return true;
	}
	
	
	function  AnularDtTalonario($datos=array()){				
				
				$metodo='AnularDtTalonario';
				if(!$datos['tiptal'] or !$datos['nrotal'] or !$datos['nrodoctal']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el detalle o documento del talonario. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				$datos['criterio']=$datos['criterio']?$datos['criterio']:'ANULAR';				
				switch($datos['criterio']){				  
					  case "ANULAR":
							$datos['estdoctal']='A';							
							break;							  
					  case "REVERSAR_ANULACION":
							$datos['estdoctal']='D';
							$datos['obsanu']='';
							$datos['fecanu']='NULL';	 
							break;
				}
				
				$ls_sql = "UPDATE cxc_dt_talonario
     					     SET estdoctal='".$datos['estdoctal']."', 
							     obsanu='".$datos['obsanu']."',
								 fecanu='".$datos['fecanu']."' 
						   WHERE codemp='".$this->ls_codemp."'
						     AND tiptal='".$datos['tiptal']."'
						     AND nrotal='".$datos['nrotal']."'
							 AND nrodoctal='".$datos['nrodoctal']."' ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
						
				if($this->rs_data==false){
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
			
				return true;	
	}
	
	function  AnularDtTalonarioXNroCont($datos=array()){				
				
				$metodo='AnularDtTalonario';
				if(!$datos['nrocont']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder eliminar el detalle o documento del talonario. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				$datos['criterio']=$datos['criterio']?$datos['criterio']:'ANULAR';
				switch($datos['criterio']){				  
					  case "ANULAR":
							$datos['estdoctal']='A';							
							break;							  
					  case "REVERSAR_ANULACION":
							$datos['estdoctal']='D';
							$datos['obsanu']='';
							$datos['fecanu']='NULL';	 
							break;
				}
				
				$ls_sql = "UPDATE cxc_dt_talonario
     					     SET estdoctal='".$datos['estdoctal']."', 
							     obsanu='".$datos['obsanu']."',
								 fecanu='".$datos['fecanu']."' 
						   WHERE codemp='".$this->ls_codemp."'
						     AND nrocont='".$datos['nrocont']."'
						";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
						
				if($this->rs_data==false){
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
				
				if($this->io_sql->conn->Affected_Rows()<1){
						$mensaje = 'ERROR: Ninguna fila fué afectada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
			
				return true;	
	}
	
	function  ActualizarDtTalonario($datos=array()){				
				
				$metodo='ActualizarDtTalonario';
				if(!$datos['nrocont'] and !$datos['tiptal']){				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder actualizar el documento del talonario. 				           			    
								<br><b>METODO:</b> '.$metodo;
					$this->io_conexiones->mensajes_ajax($mensaje);																		
					return false;	
				}
				
				switch($datos['criterio']){				  
					  case "IMPRESO":
							$datos['estdoctal']='I';							
							break;							  
					  case "DISPONIBLE":
							$datos['estdoctal']='D';
							break;
				}
				
				$ls_sql = " UPDATE cxc_dt_talonario
     					       SET estdoctal='".$datos['estdoctal']."'							     
						     WHERE codemp='".$this->ls_codemp."'
						       AND tiptal='".$datos['tiptal']."'
							   AND nrocont='".$datos['nrocont']."'
						  ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
						
				if($this->rs_data==false){
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}
			
				return true;	
	}
	
	
	function EncabezadoRepLisAnticipos($parametro=array()){	
	
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado']['tamaño'].'">					            
								<b> LISTADO DE ANTICIPOS </b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td width="'.$this->RepParam['ancho'][1].'" ><p align="center"><strong>CLIENTE</strong></p></td>
							<td width="'.$this->RepParam['ancho'][2].'"><p align="center"><strong>N°</strong></p></td>
							<td width="'.$this->RepParam['ancho'][3].'"><p align="center"><strong>FECHA</strong></p></td>
							<td width="'.$this->RepParam['ancho'][4].'"><p align="center"><strong>CONTRATO</strong></p></td>
							<td width="'.$this->RepParam['ancho'][5].'"><p align="center"><strong>CONCEPTO</strong></p></td>	
							<td width="'.$this->RepParam['ancho'][6].'"><p align="center"><strong>ESTATUS</strong></p></td>				
							<td width="'.$this->RepParam['ancho'][7].'"><p align="center"><strong>MON</strong></p></td>
							<td width="'.$this->RepParam['ancho'][8].'"><p align="center"><strong>TASA</strong></p></td>
							<td width="'.$this->RepParam['ancho'][9].'"><p align="center"><strong>MONTO</strong></p></td>
							<td width="'.$this->RepParam['ancho'][10].'"><p align="center"><strong>COBRADO</strong></p></td>
							<td width="'.$this->RepParam['ancho'][11].'"><p align="center"><strong>SALDO</strong></p></td>							
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepLisAnticipos($datos=array()){
				
			$datos['totmonant'] = number_format($this->TotMonAnt,2,',','.');
			$datos['totcobradoant'] = number_format($this->TotMonCobrado,2,',','.');
			$datos['totsaldoant'] = number_format($this->TotMonSaldo,2,',','.');
			
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8];
						
			$Colspan = count($this->RepParam['ancho']);
									
			$fin_tabla = '   <tr>
							   <td colspan="'.$Colspan.'"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][9]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonant'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][10]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totcobradoant'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totsaldoant'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepLisAnticipos($datos){	
			
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="left"><font size="'.($this->RepParam['fila']['tamaño']-1).'"><b>('.$datos['rif_completo'].')</b> - '.$datos['nombre_cliente'].'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['nroant'].'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['fecant'].'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['nrocontrato'].'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="justify"><font size="'.($this->RepParam['fila']['tamaño']-1).'">'.$datos['conant'].'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['denestant'].'</font></td>					
							<td width="'.$this->RepParam['ancho'][7].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['abrmon'].'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="center"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['tascam'].'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['monant'].'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['cobradoant'].'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="right"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['saldoant'].'</font></td>						 
					   </tr>';
			
						
			return $filas;
	}
	
	
	function RepLisAnticipos($datos=array()){
			
			$datos['criterio']='por_listado';
			$detalle = $this->ConsultaAnticipo($datos);
			if($detalle===false){exit();}
			$filas = '';
			$this->TotMonAnt=0;
			$this->TotMonCobrado=0;
			$this->TotMonSaldo=0;
								
			foreach($detalle['rs'] as $datosdet){
	
				if($datosdet['estant']!='ANU'){$this->TotMonAnt+=$datosdet['monant'];}
				
				$datosdet = $this->FormatDatosAntPresent($datosdet);	
				$datosdet['id_doc']=$datosdet['idant'];
				$cobrado = $this->BuscarMontoCobradoAnt($datosdet);		
				$Saldo = $this->SaldoAnt($datosdet);	
				if($datosdet['estant']!='ANU'){$this->TotMonCobrado+=$cobrado;}
				if($datosdet['estant']!='ANU'){$this->TotMonSaldo+=$Saldo;}
				
				$datosdet['cobradoant']	= $cobrado/$this->TasaCambio;
				$datosdet['saldoant'] = $Saldo/$this->TasaCambio;
				$this->RepParam['fila']['color_fondo']='#FFFFFF';
				if($datosdet['estant']=='ANU'){$this->RepParam['fila']['color_fondo']='#FFFFCC';}
				
				$datosdet['cobradoant'] = number_format($datosdet['cobradoant'],2,',','.');
				$datosdet['saldoant'] = number_format($datosdet['saldoant'],2,',','.');														   
						
				$filas .= $this->FilaRepLisAnticipos($datosdet);
			
			}
																
			$reporte = $this->EncabezadoRepLisAnticipos().$filas.$this->FinTablaRepLisAnticipos();
						
			return $reporte;
	
	}
	
	
	
	function EncabezadoRepLisAnticiposExcel($parametro=array()){
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)		
		$this->PHPExcel->ColorLinea(0,10,'FFEEEEEE');
		$this->PHPExcel->CeldaTitulo(3,'LISTADO DE ANTICIPOS',false,20,'left','FFEEEEEE',true);
		$this->PHPExcel->nroFila++;	
		$this->PHPExcel->nroColumna=0;	
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'CLIENTE',false,25,'center','FFCCCCCC',true); 
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'N°',false,10,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'FECHA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'CONTRATO',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'CONCEPTO',false,20,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'ESTATUS',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'MON',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'TASA'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'MONTO'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'COBRADO'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'SALDO'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->nroFila++;					
		return true; 
	}
	
	function FinTablaRepLisAnticiposExcel($datos=array()){	
				
			$this->PHPExcel->CeldaTitulo(7,'TOTALES:',true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo(8,$this->TotMonAnt,true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo(9,$this->TotMonCobrado,true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo(10,$this->TotMonSaldo,true,0,'number','FFCCCCCC');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}
	
	function FilaRepLisAnticiposExcel($datos){			

			$datos['abrmon'] =$datos['abrmon']=='€'?'EURO':$datos['abrmon'];
			$this->PHPExcel->nroColumna=0;		
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,'('.$datos['rif_completo'].') - '.$datos['nombre_cliente'],false,25,'left',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$datos['nroant'],false,10,'center',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$datos['fecant'],true,0,'left',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$datos['nrocontrato'],true,0,'left',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$datos['conant'],false,20,'center',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$datos['denestant'],true,10,'left',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$datos['abrmon'],true,0,'center',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$datos['tascam'],true,0,'center',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$this->formato_numerico_us($datos['monant']),true,0,'number',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$this->formato_numerico_us($datos['cobradoant']),true,0,'number',$this->RepParam['fila']['color_fondo']);
			$this->PHPExcel->CeldaTitulo($this->PHPExcel->nroColumna++,$this->formato_numerico_us($datos['saldoant']),true,0,'number',$this->RepParam['fila']['color_fondo']);
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
		
	function RepLisAnticiposExcel($datos=array()){
						
			$datos['criterio']='por_listado';
			$detalle = $this->ConsultaAnticipo($datos);
			if($detalle===false){exit();}
			$filas = '';
			$this->TotMonAnt=0;
			$this->TotMonCobrado=0;
			$this->TotMonSaldo=0;
			
			$resp = $this->EncabezadoRepLisAnticiposExcel();
			if($resp===false){return false;}
					
			foreach($detalle['rs'] as $datosdet){
	
				if($datosdet['estant']!='ANU'){$this->TotMonAnt+=$datosdet['monant'];}
				
				$datosdet = $this->FormatDatosAntPresent($datosdet);	
				$datosdet['id_doc']=$datosdet['idant'];
				$cobrado = $this->BuscarMontoCobradoAnt($datosdet);		
				$Saldo = $this->SaldoAnt($datosdet);	
				if($datosdet['estant']!='ANU'){$this->TotMonCobrado+=$cobrado;}
				if($datosdet['estant']!='ANU'){$this->TotMonSaldo+=$Saldo;}
				
				$datosdet['cobradoant']	= $cobrado/$this->TasaCambio;
				$datosdet['saldoant'] = $Saldo/$this->TasaCambio;
				$this->RepParam['fila']['color_fondo']='#FFFFFFFF';
				if($datosdet['estant']=='ANU'){$this->RepParam['fila']['color_fondo']='#FFFFFFCC';}
				
				$datosdet['cobradoant'] = number_format($datosdet['cobradoant'],2,',','.');
				$datosdet['saldoant'] = number_format($datosdet['saldoant'],2,',','.');			
				
				$resp=$this->FilaRepLisAnticiposExcel($datosdet);
				if($resp===false){return false;}			
			}
			
			$resp=$this->FinTablaRepLisAnticiposExcel();									
			if($resp===false){return false;}
						
			return true;
	
	}
	
	function EncabezadoRepMovCob2($parametro=array()){	
	
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado']['tamaño'].'">					            
								<b> MOVIMIENTOS DE COBRO '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">SUC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CAJA </font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TIPDOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° DOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">EST DOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° MOV</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FECHA</font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CONCEP</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][10].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TASA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][11].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONTO'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepMovCob2($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['montotal'] = number_format($datos['montotal'],2,',','.');
			
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8]+
						$this->RepParam['ancho'][9]+
						$this->RepParam['ancho'][10];
									
			$fin_tabla = '   <tr>
							   <td colspan="12"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['montotal'].'</font>
							   </td>							   
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepMovCob2($datos){	
			
			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['sigsuc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['codcaj']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['tipdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['estdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['nromovcob']).'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecmovcob']).'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="justify" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['obscob']).'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['abrmon']).'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['tascam']).'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['monmovcob']).'</font></td>
					   </tr>';
			
			return $filas;
	}
	
	
	function RepMovCob2($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->ConsultaMovCobros($datos);	
			if($resul===false){return false;}			
			if(!$resul['rs']->RecordCount()){return "";}
			
			$total=0;
			$total['totmonloc']=0;
			$total['totmonext']=0;
								
			foreach($resul['rs'] as $datosFila){
			
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];

				$totales['montotal'] += ($datosFila['monmovcob']/$datosFila['tascam']);
								
				$datosRow = $this->FormatDatosCobPresent($datosFila);				
				$filas .= $this->FilaRepMovCob2($datosRow);			
			}
			
			$this->TotalMovCob['totmonloc'] += $totales['totmonloc'];
			$this->TotalMovCob['totmonext'] += $totales['totmonextloc'];
																
			$reporte = $this->EncabezadoRepMovCob2().$filas.$this->FinTablaRepMovCob2($totales);
						
			return $reporte;
	
	}
	
	function EncabezadoRepRetIngreso($parametro=array()){
		
		//$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado']['tamaño'].'">					            
								<b> RETENCIONES '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">RETENCIÓN</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° RET </font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FEC COMP</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° DOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">BASE IMP</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">IVA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">% IVA</font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">% RET</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][9].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][10].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TASA</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][11].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON. RET.'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepRetIngreso($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			//$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['totmonret'] = number_format($datos['totmonret'],2,',','.');
			
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7]+
						$this->RepParam['ancho'][8]+
						$this->RepParam['ancho'][9]+
						$this->RepParam['ancho'][10];
									
			$fin_tabla = '   <tr>
							   <td colspan="12"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][11]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonret'].'</font>
							   </td>							   
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepRetIngreso($datos){	
																																	
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['dended']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numcom']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['feccomp']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numfact']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['basimp'],2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['monimp'],2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['porimp'],2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['porcret'],2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][9].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['abrmon']).'</font></td>
							<td width="'.$this->RepParam['ancho'][10].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['tascam'],2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][11].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['monret'],2,',','.').'</font></td>
					   </tr>';
			
			return $filas;
	}
	
	
	function RepRetIngreso($datos=array()){
			
			$metodo='RepRetIngreso';
			
			if(!$datos['nroing'] or !$datos['codsuc'] or !$datos['codcaj']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar las retenciones del ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_mensajes->message($mensaje);				
				$this->io_conexiones->mensajes_ajax($mensaje);																			
				return false;	
			}
			
			$resul = $this->ConsultaRetIngreso($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return "";}
			
			$total=0;
			$total['totmonret']=0;
											
			foreach($resul as $datosFila){
				/*
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				*/
				//echo $datosFila['monret'].'<br>';
				$totales['totmonret'] += ($datosFila['monret']/$datosFila['tascam']);								
						
				$filas .= $this->FilaRepRetIngreso($datosFila);			
			}
			
																
			$reporte = $this->EncabezadoRepRetIngreso().$filas.$this->FinTablaRepRetIngreso($totales);
						
			return $reporte;
	
	}
	
	function ConsultaRetIngreso($datos=array()){
	
			$metodo='ConsultaRetIngreso';
			
			if(!$datos['nroing'] or !$datos['codsuc'] or !$datos['codcaj']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar las retenciones del ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_mensajes->message($mensaje);				
				$this->io_conexiones->mensajes_ajax($mensaje);																			
				return false;	
			}
			
			
			$ls_sql = " SELECT ret.*,d.*,f.numfact,m.* 
			            FROM cxc_cmp_ret ret
						INNER JOIN sigesp_deducciones d ON d.codemp = ret.codemp AND d.codded = ret.codret 
						INNER JOIN sigesp_moneda m ON m.codmon=ret.codmon
						LEFT JOIN cxc_factura f ON f.codemp = f.codemp 
						                       AND f.id_fact = ret.id_doc
											   AND ret.tipdoc='FACT'
						WHERE ret.tipdoc||'-'||ret.id_doc||'-'||ret.nromovcob IN (
							SELECT tipdoc||'-'||id_doc||'-'||nromovcob FROM cxc_dt_movcobro
							WHERE codsuc = '".$datos['codsuc']."'
							  AND codcaj = '".$datos['codcaj']."'
							  AND nroing = '".$datos['nroing']."'
						)
						ORDER BY ret.tipdoc,ret.id_doc,ret.nromovcob
					  ";
			
			$rs_data=$this->io_sql->select($ls_sql);			
			
			if($rs_data==false){
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;
				$this->io_mensajes->message($mensaje);					
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;					
			}
							
			return $rs_data;
	}
	
	function ConsultaRetIngreso2($datos=array()){
	
			$metodo='ConsultaRetIngreso2';
			
			if(!$datos['nroing'] or !$datos['codsuc'] or !$datos['codcaj']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar las retenciones del ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_mensajes->message($mensaje);				
				$this->io_conexiones->mensajes_ajax($mensaje);																			
				return false;	
			}
			
			
			$ls_sql = " SELECT cli.nombre_cliente,dencar,ret.*,d.*,f.numfact,f.id_fact,m.*
						  FROM cxc_cmp_ret ret
						  INNER JOIN sigesp_deducciones d ON d.codemp = ret.codemp AND d.codded = ret.codret 
						  INNER JOIN sigesp_moneda m ON m.codmon=ret.codmon
						  LEFT JOIN sigesp_cargos c ON c.codcar = ret.codcar
						  LEFT JOIN cxc_factura f ON f.codemp = f.codemp 
									   			 AND f.id_fact = ret.id_doc
									  			 AND ret.tipdoc='FACT'
						LEFT JOIN cxc_clientes cli ON cli.id_cliente = f.id_cliente
					    WHERE ret.codsuc = '".$datos['codsuc']."'
						  AND ret.codcaj = '".$datos['codcaj']."'
						  AND ret.nroing = '".$datos['nroing']."'
						ORDER BY ret.tipdoc,ret.id_doc,ret.nromovcob
					  ";
			
			$rs_data=$this->io_sql->select($ls_sql);			
			
			if($rs_data==false){
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;
				$this->io_mensajes->message($mensaje);					
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;					
			}
							
			return $rs_data;
	}
	
	function ConsultaRetIngresoJSON($datos=array()){
				
			$resp = $this->ConsultaRetIngreso2($datos);					
			if($resp===false){return false;}
			if(!$resp->RecordCount()){return "";}
			
			foreach($resp as $fila){
				$JsonRet = $this->json->encode($fila);
				$ObjDat->retencion[$fila['id_fact']]->datos[$fila['codret']] = $JsonRet;
				$ObjDat->retencion[$fila['id_fact']]->RecordCount = count($ObjDat->retencion[$fila['id_fact']]->datos);					
			}
			$ObjDat->RecordCount = count($ObjDat->retencion);				
			
			$JsonRets = $this->json->encode($ObjDat);
			
			return $JsonRets;
	}
	
	function EncabezadoRepNcApliIngreso($parametro=array()){
		
																																						   
		//$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado']['tamaño'].'">					            
								<b> NOTAS DE CRÉDITO APLICADAS A COBROS '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NUM. DOC.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° CONT. </font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FEC DOC</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">ESTATUS</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FACT AFECT.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON. DOC.'.$TxtMoneda.'</font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FACT. APLI</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON. APLI.'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepNcApliIngreso($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			//$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['totmonnc'] = number_format($datos['totmonnc'],2,',','.');
			
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7];
									
			$fin_tabla = '   <tr>
							   <td colspan="12"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][8]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonnc'].'</font>
							   </td>							   
							 </tr>							 
						   </table>';
			return $fin_tabla; 
	}
	
	function FilaRepNcApliIngreso($datos){	
																												
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numcont_doc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['denestdoccxc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['numfactafec'].'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['total_doc'],2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['numfactapl'].'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['monmovdoc'],2,',','.').'</font></td>
					   </tr>';
			
			return $filas;
	}
	
	
	function RepNcApliIngreso($datos=array()){
			
			$metodo='RepRetIngreso';
			
			if(!$datos['nroing'] or !$datos['codsuc'] or !$datos['codcaj']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar las Notas de Crédito aplicadas en el ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_mensajes->message($mensaje);				
				$this->io_conexiones->mensajes_ajax($mensaje);																			
				return false;	
			}
			
			$resul = $this->ConsultaNcApliIngreso($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return "";}
			
			$total=0;
			$total['totmonnc']=0;
											
			foreach($resul as $datosFila){
				/*
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				*/
				//echo $datosFila['monret'].'<br>';
				$totales['totmonnc'] += ($datosFila['monmovdoc']/$datosFila['tascam']);					
				$filas .= $this->FilaRepNcApliIngreso($datosFila);			
			}
																
			$reporte = $this->EncabezadoRepNcApliIngreso().$filas.$this->FinTablaRepNcApliIngreso($totales);
						
			return $reporte;
	
	}
	
	function ConsultaNcApliIngreso($datos=array()){
	
			$metodo='ConsultaNcApliIngreso';
			
			if(!$datos['nroing'] or !$datos['codsuc'] or !$datos['codcaj']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar las Notas de Crédito Aplicadas al ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_mensajes->message($mensaje);				
				$this->io_conexiones->mensajes_ajax($mensaje);																			
				return false;	
			}
			
			
			$ls_sql = "
							SELECT md.*,
								   d.numdoc, d.numcont_doc, d.id_fact, d.codmon_doc, d.tascam_doc,
								   d.tipopecont, d.fecdoc, d.porcdesc_doc, d.montodesc_doc, 
								   d.saldo_doc, d.subtot_doc, d.iva_doc, d.otros_doc, d.baseimp_doc, d.total_doc, 
								   d.descripdoc, d.formpagdoc, d.estdoccxc,ed.denestdoccxc, emd.desestmovdoc,
								   f.numfact as numfactafec, fapl.numfact  as numfactapl
							FROM cxc_dt_movdoc md
							INNER JOIN cxc_documento d ON d.codtipdoc = md.codtipdoc
													  AND d.id_doc = md.id_doc
							INNER JOIN cxc_factura f ON f.id_fact = d.id_fact   
							INNER JOIN cxc_factura fapl ON fapl.id_fact = md.id_docapl                     
							INNER JOIN cxc_estatus_documento ed ON ed.estdoccxc = d.estdoccxc
							INNER JOIN cxc_estmovdoc emd ON emd.estmovdoc = md.estmovdoc
							WHERE md.codtipdoc='NC'
							AND md.tipdocapl='FACT'
							AND md.tipdocapl||'-'||md.id_docapl||'-'||md.nromovcob IN (
								SELECT tipdoc||'-'||id_doc||'-'||nromovcob FROM cxc_dt_movcobro
								WHERE codsuc = '".$datos['codsuc']."'
							      AND codcaj = '".$datos['codcaj']."'
							      AND nroing = '".$datos['nroing']."'
								  AND tipdoc='FACT'
							)	
						
					  ";
			
			$rs_data=$this->io_sql->select($ls_sql);			
			
			if($rs_data==false){
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;
				$this->io_mensajes->message($mensaje);					
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;					
			}
							
			return $rs_data;
	}
	
	
	function EncabezadoRepAnticipoApliIngreso($parametro=array()){
																																								   
		//$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="'.$this->RepParam['encabezado']['tamaño'].'">					            
								<b> ANTICIPOS APLICADOS A COBROS '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">						
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NUM. ANT.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FEC. </font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">N° CONTRATO</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CONCEPTO</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">ESTATUS</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MONTO.'.$TxtMoneda.'</font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][7].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">FACT. APLI</font></td>
						    <td align="center"  width="'.$this->RepParam['ancho'][8].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">MON. APLI.'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepAnticipoApliIngreso($datos=array()){
	
			//$this->TxtMoneda = $this->RepMultiMon?$this->TxtMoneda:'';
			//$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$datos['totmonnc'] = number_format($datos['totmonnc'],2,',','.');
			
			$TotAncho = $this->RepParam['ancho'][1]+
			            $this->RepParam['ancho'][2]+
						$this->RepParam['ancho'][3]+
						$this->RepParam['ancho'][4]+
						$this->RepParam['ancho'][5]+
						$this->RepParam['ancho'][6]+
						$this->RepParam['ancho'][7];
									
			$fin_tabla = '   <tr>
							   <td colspan="12"  width="'.$TotAncho.'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][8]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['totmonnc'].'</font>
							   </td>							   
							 </tr>							 
						   </table>';
			return $fin_tabla; 
	}
	
	function FilaRepAnticipoApliIngreso($datos){	
																												
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">																							
							<td width="'.$this->RepParam['ancho'][1].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][2].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['numcont_doc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][3].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['fecdoc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="center" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['denestdoccxc']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['numfactafec'].'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['total_doc'],2,',','.').'</font></td>
							<td width="'.$this->RepParam['ancho'][7].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.$datos['numfactapl'].'</font></td>
							<td width="'.$this->RepParam['ancho'][8].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.number_format($datos['monmovdoc'],2,',','.').'</font></td>
					   </tr>';
			
			return $filas;
	}
	
	
	function RepAnticipoApliIngreso($datos=array()){
			
			$metodo='RepAnticipoApliIngreso';
			
			if(!$datos['nroing'] or !$datos['codsuc'] or !$datos['codcaj']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar las Notas de Crédito aplicadas en el ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_mensajes->message($mensaje);				
				$this->io_conexiones->mensajes_ajax($mensaje);																			
				return false;	
			}
			
			$resul = $this->ConsultaAnticipoApliIngreso($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return "";}
			
			$total=0;
			$total['totmonant']=0;
											
			foreach($resul as $datosFila){
				/*
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				if($datosFila['abrmon']=='E'){$datosFila['abrmon']='€';}
				$datosFila['abrmon'] = $this->CargarMonedaLocal?$this->AbrMonDef:$datosFila['abrmon'];
				*/
				//echo $datosFila['monret'].'<br>';
				$totales['totmonant'] += ($datosFila['monmovdoc']/$datosFila['tascam']);					
				$filas .= $this->FilaRepAnticipoApliIngreso($datosFila);			
			}
																
			$reporte = $this->EncabezadoRepAnticipoApliIngreso().$filas.$this->FinTablaRepAnticipoApliIngreso($totales);
						
			return $reporte;
	
	}
	
	function ConsultaAnticipoApliIngreso($datos=array()){
	
			$metodo='ConsultaAnticipoApliIngreso';
			
			if(!$datos['nroing'] or !$datos['codsuc'] or !$datos['codcaj']){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder consultar las Notas de Crédito Aplicadas al ingreso. 				           			    
							<br><b>METODO:</b> '.$metodo;
				$this->io_mensajes->message($mensaje);				
				$this->io_conexiones->mensajes_ajax($mensaje);																			
				return false;	
			}
			
			
			$ls_sql = "
							SELECT md.*,
								   d.numdoc, d.numcont_doc, d.id_fact, d.codmon_doc, d.tascam_doc,
								   d.tipopecont, d.fecdoc, d.porcdesc_doc, d.montodesc_doc, 
								   d.saldo_doc, d.subtot_doc, d.iva_doc, d.otros_doc, d.baseimp_doc, d.total_doc, 
								   d.descripdoc, d.formpagdoc, d.estdoccxc,ed.denestdoccxc, emd.desestmovdoc,
								   f.numfact as numfactafec, fapl.numfact  as numfactapl
							FROM cxc_dt_movdoc md
							INNER JOIN cxc_documento d ON d.codtipdoc = md.codtipdoc
													  AND d.id_doc = md.id_doc
							INNER JOIN cxc_factura f ON f.id_fact = d.id_fact   

							INNER JOIN cxc_factura fapl ON fapl.id_fact = md.id_docapl                     
							INNER JOIN cxc_estatus_documento ed ON ed.estdoccxc = d.estdoccxc
							INNER JOIN cxc_estmovdoc emd ON emd.estmovdoc = md.estmovdoc
							WHERE md.codtipdoc='NC'
							AND md.tipdocapl='FACT'
							AND md.tipdocapl||'-'||md.id_docapl||'-'||md.nromovcob IN (
								SELECT tipdoc||'-'||id_doc||'-'||nromovcob FROM cxc_dt_movcobro
								WHERE codsuc = '".$datos['codsuc']."'
							      AND codcaj = '".$datos['codcaj']."'
							      AND nroing = '".$datos['nroing']."'
								  AND tipdoc='FACT'
							)	
						
					  ";
			
			$rs_data=$this->io_sql->select($ls_sql);			
			
			if($rs_data==false){
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;
				$this->io_mensajes->message($mensaje);					
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;					
			}
							
			return $rs_data;
	}
	
	function ConsultaMovBanco($datos=array()){
	
			$metodo='ConsultaMovBanco';
			
			if($datos['numdoc']){$criterio = $criterio." AND m.numdoc ".$this->postgres_ilike."LIKE('%".$datos['numdoc']."%') ";}
			if($datos['codban']){$criterio = $criterio." AND m.codban = '".$datos['codban']."' ";}
			if($datos['ctaban']){$criterio = $criterio." AND m.ctaban = '".$datos['ctaban']."' ";}
						
			$ls_sql = "
							SELECT  m.codban, m.codban, m.ctaban, m.numdoc, m.codope, m.estmov, m.cod_pro, m.ced_bene, 
									m.tipo_destino, m.codconmov, m.fecmov, m.conmov, m.nomproben, m.monto, m.estbpd,
									m.procede, m.comprobante, m.fecha, m.nroestcta, m.nromovestcta,
									m.codmon, m.tascam,m.nroestcta,m.nromovestcta,m.facturado,
									m.cxc_id_fact, m.cxc_codsuc, m.cxc_codcaj, m.cxc_nroing, 
									m.cxc_tipdoc, m.cxc_id_doc, m.cxc_nromovcob,
									b.*, c.*,f.numfact,f.numcont,f.fecfact
							  FROM scb_movbco m
						      LEFT JOIN scb_banco b ON m.codemp=b.codemp
												 AND m.codban=b.codban 
							  LEFT JOIN scb_ctabanco c ON m.codemp=c.codemp
													  AND m.codban=c.codban 
													  AND m.ctaban=c.ctaban
							  LEFT JOIN cxc_factura f ON m.cxc_id_fact=f.id_fact													 
							  WHERE m.codope IN ('NC','DP')
							    AND estmov = 'C'
								".$criterio."
							   ORDER BY m.fecmov, m.numdoc					
					  ";
			
			
			$clase = get_class($this);
			$metodo = 'ConsultaMovBanco';
			$param['arreglo'] = 'arreglo';
			$param['ajax'] = '1';
			$param['imprimir'] = '1';	
			$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
			return $respuesta=$this->io_conexiones->conexion($ls_sql,$param,$msj);
	}
	
	function FormatDatosMovBanco($datos=array()){
					
					
					if(!$datos['codmon'] or !$datos['tascam']){$this->CargarMonedaLocal=true;}
					
					if($this->CargarMonedaLocal){
						$this->TasaCambio=1;
					}
					else{
						$resp = $this->ConversionMoneda($datos);
						if($resp===false){return false;}
					
					}
														
					$datos['fecmov']=$this->io_conexiones->formatea_fecha_normal($datos['fecmov']);					
					$datos['monto'] = number_format($datos['monto']/$this->TasaCambio,2,',','.');						
														
					return $datos;	
	}
		
	function InsertarMovBcoAsoc($datos=array()){
							
			$metodo = 'InsertarMovBcoAsoc';
			
			if(!$this->nroing){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de ingreso. 				           			    
							<br><b>METODO:</b> InsertarMovBcoAsoc ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			if(!$this->nromovcob){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de movimiento de cobro de la factura. 				           			    
							<br><b>METODO:</b> InsertarMovBcoAsoc ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			$ls_sql="   LOCK TABLE cxc_movbaco_asoc IN ACCESS EXCLUSIVE MODE;
			            INSERT INTO cxc_movbaco_asoc(  codemp, estmovasoc, codban, ctaban, numdoc, codope, estmov, fecmov, conmov, 
													   monto, id_fact, codsuc, codcaj, nroing, tipdoc, id_doc, nromovcob, 
													   fecreg, usureg, horareg )
						VALUES ('".$this->codemp."',
						        'C',  
								'".$datos['codban']."', 
								'".$datos['ctaban']."',
								'".$datos['numdoc']."', 
								'".$datos['codope']."', 
								'".$datos['estmov']."', 
								'".$datos['fecmov']."', 
								'".$datos['conmov']."', 
								'".$datos['monto']."', 
								'".$datos['id_fact']."', 
								'".$datos['codsuc']."', 
								'".$datos['codcaj']."', 
								'".$datos['nroing']."', 
								'".$datos['tipdoc']."',
								'".$datos['id_doc']."',
								'".$datos['nromovcob']."',								
								'".date("Y-m-d")."',
								'".$_SESSION["la_logusr"]."',
								'".date("H:i")."'); ";
			//echo $ls_sql.'<br><br>';		  					
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){				
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
				else{$this->io_mensajes->message($mensaje);}
				return false;
			}
			
			return true; 			
	}	
	
	
	function  ProcDetMovBcoFact($datos=array()){
						
		foreach($this->datosMovBanFact as $campo => $detalle){											
							
				$datosdet['codban'] =  $detalle->codban;
				$datosdet['ctaban'] =  $detalle->ctaban;
				$datosdet['numdoc'] =  $detalle->numdoc;							
				$datosdet['tipdoc'] = 'FACT';
				$datosdet['id_doc'] = $datos['id_doc'];
				$datosdet['nrodocpag'] =  $detalle->numdoc;
				
				$datosdet['criterio'] = 'por_movbanco';
				$rsmov = $this->ConsultaMovCobros($datosdet);
				if($rsmov===false){return false;}
				if(!$rsmov['rs']->RecordCount()){
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontro el movimiento de cobro asociado. 				           			    
								<br><b>METODO:</b> ProcDetMovBcoFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}			
											
				$datosdet['codope'] =  $detalle->codope;
				$datosdet['estmov'] =  $detalle->estmov;				
				$datosdet['cod_pro'] =  $detalle->cod_pro;
				$datosdet['ced_bene'] =  $detalle->ced_bene;
				$datosdet['tipo_destino'] =  $detalle->tipo_destino;
				$datosdet['fecmov'] =  $this->io_conexiones->formatea_fecha_bd($detalle->fecmov);
				$datosdet['codconmov'] =  $detalle->codconmov;
				$datosdet['monto'] =  $this->formato_numerico_us($detalle->monto);
				$datosdet['nomproben'] =  $detalle->nomproben;
				$datosdet['nroestcta'] =  $detalle->nroestcta;
				$datosdet['nromovestcta'] =  $detalle->nromovestcta;
				$datosdet['facturado'] =  $detalle->facturado;
				$datosdet['cxc_id_fact'] =  $detalle->cxc_id_fact;
				$datosdet['cxc_codsuc'] =  $detalle->cxc_codsuc;
				$datosdet['cxc_codcaj'] =  $detalle->cxc_codcaj;
				$datosdet['cxc_nroing'] =  $detalle->cxc_nroing;
				$datosdet['cxc_tipdoc'] =  $detalle->cxc_tipdoc;
				$datosdet['cxc_id_doc'] =  $detalle->cxc_id_doc;
				$datosdet['cxc_nromovcob'] =  $detalle->cxc_nromovcob;
				$datosdet['nomban'] =  $detalle->nomban;
				$datosdet['dencta'] =  $detalle->dencta;
				$datosdet['ctabanext'] =  $detalle->ctabanext;
				$datosdet['sc_cuenta'] =  $detalle->sc_cuenta;
				$datosdet['numconint'] =  $detalle->numconint;				
				$datosdet['codsuc'] = $datos['codsuc'];
				$datosdet['codcaj']	= $datos['codcaj'];
				$datosdet['nroing'] = $rsmov['rs']->fields['nroing'];
				$datosdet['tipdoc'] = $datos['tipdoc'];
				$datosdet['id_doc'] = $datos['id_doc'];
				$datosdet['nromovcob'] = $rsmov['rs']->fields['nromovcob'];
				$datosdet['id_fact'] = $this->id_fact;
				$datosdet['facturado'] = 1;	
														
				$resp = $this->InsertarMovBcoAsoc($datosdet);
				if($resp===false){return false;}				
				
				$resp = $this->ActualizarMovBcoSCB($datosdet);
				if($resp===false){return false;}
				
			}
			
			return true;	
	}
	
	
	function  ProcDetMovBcoIngreso($datos=array()){
							
			if(!$datos['codbanasoc'] or !$datos['ctabanasoc'] or !$datos['numdocasoc']){return true;}
			
			if(!$datos['codsuc'] or !$datos['codcaj'] or !$this->nroing){				
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para procesar el movimiento de banco asociado. 				           			    
							<br><b>METODO:</b> ProcDetMovBcoIngreso ';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			
			$datos['nroing']=$this->nroing;
			$datos['criterio'] = 'por_ingreso';
			$rsmov = $this->ConsultaMovCobros($datos);
			if($rsmov===false){return false;}
			if(!$rsmov['rs']->RecordCount()){
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No se encontro el movimiento de cobro asociado. 				           			    
							<br><b>METODO:</b> ProcDetMovBcoIngreso';
				$this->io_conexiones->mensajes_ajax($mensaje);																	
				return false;
			}
			
			foreach($rsmov['rs'] as $fila){
			
			    if($fila['tipdoc']=='FACT'){$fila['id_fact']=$fila['id_doc'];}else{$fila['id_fact']=0;}
				
				$datosdet['codban'] =  $datos['codbanasoc'];
				$datosdet['ctaban'] =  $datos['ctabanasoc'];
				$datosdet['numdoc'] =  $datos['numdocasoc'];
				$datosdet['codope'] =  $datos['codopeasoc'];
				$datosdet['fecmov'] =  $this->io_conexiones->formatea_fecha_bd($datos['fecmovasoc']);
				$datosdet['monto'] =  $fila['monmovcob'];										
				$datosdet['tipdoc'] = $fila['tipdoc'];
				$datosdet['id_doc'] = $fila['id_doc'];
				$datosdet['nrodocpag'] =  $fila['nrodocpag'];
				$datosdet['conmov'] =  $fila['obscob'];
				$datosdet['codsuc'] = $fila['codsuc'];
				$datosdet['codcaj']	= $fila['codcaj'];
				$datosdet['nroing'] = $fila['nroing'];
				$datosdet['nromovcob'] = $fila['nromovcob'];
				$datosdet['id_fact'] = $fila['id_fact'];
				$datosdet['facturado'] = 1;	
																	
				$resp = $this->InsertarMovBcoAsoc($datosdet);
				if($resp===false){return false;}				
				
				$resp = $this->ActualizarMovBcoSCB($datosdet);
				if($resp===false){return false;}
			}
			
			return true;	
	}
	
	function ActualizarMovBcoSCB($datos=array()){				
				
				if(!$datos['codban'] or !$datos['ctaban'] or !$datos['numdoc'] or !$datos['codope'])
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para la operación de actualización. 				           			    
								<br><b>METODO:</b> ActualizarMovBcoSCB ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
								
								
				$ls_sql = "UPDATE scb_movbco
     					   SET facturado='".$datos['facturado']."',
						       cxc_id_fact='".$datos['id_fact']."', 
							   cxc_codsuc='".$datos['codsuc']."',
							   cxc_codcaj='".$datos['codcaj']."', 
							   cxc_nroing='".$datos['nroing']."', 
							   cxc_tipdoc='".$datos['tipdoc']."', 
							   cxc_id_doc='".$datos['id_doc']."', 
							   cxc_nromovcob='".$datos['nromovcob']."'							  
						   WHERE codemp='".$this->codemp."'
						     AND codban='".$datos['codban']."'
							 AND ctaban='".$datos['ctaban']."'
							 AND numdoc='".$datos['numdoc']."'
							 AND codope='".$datos['codope']."'
							 AND fecmov='".$datos['fecmov']."'
							 AND estmov='C'
							  ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br><br>';
				//echo $this->io_sql->conn->Affected_Rows().'<br><br>';
				if($this->rs_data==false)
				{
					
					$metodo = 'ActualizarMovBcoSCB';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;
					
				}				
				
				return true;
	
	}
	
	function  EliminarMovBcoAsoc($datos){
				
				 if(!$datos['id_doc'] or !$datos['nromovcob'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codsuc']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Eliminación. 				           			    
							    <br><b>METODO:</b> EliminarMovBcoAsoc ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				 }
				 
				 $datos['estmovasoc'] = 'C';
				 $rs_movbco = $this->BuscaMovBanAsocIng($datos);
				 if($rs_movbco===false){return false;}				
				 if(!$rs_movbco->RecordCount()){return true;}
				
				 foreach($rs_movbco as $datmov){				
					$datmov['facturado'] = 0;
					$datmov['id_fact'] = 0;
					$datmov['codsuc'] = "";
					$datmov['codcaj'] = "";
					$datmov['nroing'] = 0;
					$datmov['tipdoc'] = "";
					$datmov['id_doc'] = 0;
					$datmov['nromovcob'] = 0;				
					$resp = $this->ActualizarMovBcoSCB($datmov);
					if($resp===false){return false;}					
				 }
																
				 $ls_sql = " 							
							LOCK TABLE cxc_movbaco_asoc IN ACCESS EXCLUSIVE MODE;
				            DELETE FROM cxc_movbaco_asoc
						     WHERE codemp='".$this->ls_codemp."'
						       AND codsuc='".$datos['codsuc']."'
						       AND codcaj='".$datos['codcaj']."' 
						       AND nroing='".$datos['nroing']."'
						       AND tipdoc='".$datos['tipdoc']."' 
						       AND id_doc='".$datos['id_doc']."'
							   AND nromovcob='".$datos['nromovcob']."';  
						";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br><br>';
				if($this->rs_data==false){					
					$metodo = 'EliminarMovBcoAsoc';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				
				
				return true;
	}
	
	function ConsultaMovBanAsoc($datos=array()){
	
			$metodo='ConsultaMovBanAsoc';
			
			if($datos['numdoc']){$criterio = $criterio." AND m.numdoc ".$this->postgres_ilike."LIKE('%".$datos['numdoc']."%') ";}
			if($datos['codban']){$criterio = $criterio." AND m.codban = '".$datos['codban']."' ";}
			if($datos['ctaban']){$criterio = $criterio." AND m.ctaban = '".$datos['ctaban']."' ";}
			if($datos['id_fact']){$criterio = $criterio." AND m.id_fact = '".$datos['id_fact']."' ";}
			
			if($datos['nroing']){$criterio = $criterio." AND m.nroing = '".$datos['nroing']."' ";}
			if($datos['codcaj']){$criterio = $criterio." AND m.codcaj = '".$datos['codcaj']."' ";}
			if($datos['codsuc']){$criterio = $criterio." AND m.codsuc = '".$datos['codsuc']."' ";}			
						
			$ls_sql = "
							SELECT  m.*,
									b.*, c.*
							  FROM cxc_movbaco_asoc m
						      LEFT JOIN scb_banco b ON m.codemp=b.codemp
												   AND m.codban=b.codban 
							  LEFT JOIN scb_ctabanco c ON m.codemp=c.codemp
													  AND m.codban=c.codban 
													  AND m.ctaban=c.ctaban
							  WHERE m.codemp = '".$this->ls_codemp."'						    
								".$criterio."
							   ORDER BY m.fecmov, m.numdoc					
					  ";
			
			
			$clase = get_class($this);
			$metodo = 'ConsultaMovBanco';
			$param['arreglo'] = 'arreglo';
			$param['ajax'] = '1';
			$param['imprimir'] = '1';	
			$msj = '<b>CLASE:</b> '.$clase.' <br><b>METODO:</b> '.$metodo;		
			return $respuesta=$this->io_conexiones->conexion($ls_sql,$param,$msj);
	}
	
	function BuscaMovBanAsocIng($datos=array()){
		       
			   if(!$datos['id_doc'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codcaj'] or !$datos['nroing'] or !$datos['nromovcob']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Eliminación. 				           			    
								<br><b>METODO:</b> BuscaMovBanAsocIng ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
			
			   $ls_sql = " SELECT * FROM cxc_movbaco_asoc
						     WHERE codemp='".$this->ls_codemp."'
						       AND codsuc='".$datos['codsuc']."'
						       AND codcaj='".$datos['codcaj']."' 
						       AND nroing='".$datos['nroing']."'
						       AND tipdoc='".$datos['tipdoc']."' 
						       AND id_doc='".$datos['id_doc']."'
							   AND nromovcob='".$datos['nromovcob']."'
							   AND estmovasoc='".$datos['estmovasoc']."';  
						";
				//echo $ls_sql.'<br><br>';				
				$rs_movbco=$this->io_sql->select($ls_sql);
				if($rs_movbco==false){					
					$metodo = 'BuscaMovBanAsocIng';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				return $rs_movbco;
	}
	
	function  AnularMovBcoFact($datos=array()){
				
				if(!$datos['id_doc'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codcaj'] or !$datos['nroing'] or !$datos['nromovcob']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Eliminación. 				           			    
								<br><b>METODO:</b> AnularMovBcoFact ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
			    $datos['estmovasoc'] = 'C';
			    $rs_movbco = $this->BuscaMovBanAsocIng($datos);
				if($rs_movbco===false){return false;}					
				if(!$rs_movbco->RecordCount()){return true;}
				
				foreach($rs_movbco as $datmov){				
					$datmov['facturado'] = 0;
					$datmov['id_fact'] = 0;
					$datmov['codsuc'] = "";
					$datmov['codcaj'] = "";
					$datmov['nroing'] = 0;
					$datmov['tipdoc'] = "";
					$datmov['id_doc'] = 0;
					$datmov['nromovcob'] = 0;				
					$resp = $this->ActualizarMovBcoSCB($datmov);
					if($resp===false){return false;}					
				}
			  	
				$ls_sql = " 							
							UPDATE cxc_movbaco_asoc
							   SET estmovasoc='A'
						     WHERE codemp='".$this->ls_codemp."'
						       AND codsuc='".$datos['codsuc']."'
						       AND codcaj='".$datos['codcaj']."' 
						       AND nroing='".$datos['nroing']."'
						       AND tipdoc='".$datos['tipdoc']."' 
						       AND id_doc='".$datos['id_doc']."'
							   AND nromovcob='".$datos['nromovcob']."';
						";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br><br>';
				if($this->rs_data==false){					
					$metodo = 'AnularMovBcoFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				return true;
			
	}
	
	function  ReversarAnuMovBcoFact($datos=array()){
				
				if(!$datos['id_doc'] or !$datos['tipdoc'] or !$datos['codsuc'] or !$datos['codcaj'] or !$datos['nroing'] or !$datos['nromovcob']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación de Eliminación. 				           			    
								<br><b>METODO:</b> EliminarMovBcoAsoc ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
				
			    $datos['estmovasoc'] = 'A';
			    $rs_movbco = $this->BuscaMovBanAsocIng($datos);
				if($rs_movbco===false){return false;}				
				if(!$rs_movbco->RecordCount()){return true;}
				
				foreach($rs_movbco as $datmov){				
					$datmov['facturado'] = 1;
					$datmov['id_fact'] = $datos['id_doc'];
					$datmov['codsuc'] = $datos['codsuc'];
					$datmov['codcaj'] = $datos['codcaj'];
					$datmov['nroing'] = $datos['nroing'];
					$datmov['tipdoc'] = $datos['tipdoc'];
					$datmov['id_doc'] = $datos['id_doc'];
					$datmov['nromovcob'] = $datos['nromovcob'];				
					$resp = $this->ActualizarMovBcoSCB($datmov);
					if($resp===false){return false;}					
				}
			  	
				$ls_sql = " 							
							UPDATE cxc_movbaco_asoc
							   SET estmovasoc='C'
						     WHERE codemp='".$this->ls_codemp."'
						       AND codsuc='".$datos['codsuc']."'
						       AND codcaj='".$datos['codcaj']."' 
						       AND nroing='".$datos['nroing']."'
						       AND tipdoc='".$datos['tipdoc']."' 
						       AND id_doc='".$datos['id_doc']."'
							   AND nromovcob='".$datos['nromovcob']."';
						";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				//echo $ls_sql.'<br><br>';
				if($this->rs_data==false){					
					$metodo = 'ReversarAnuMovBcoFact';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
				
				return true;
			
	}
	
	
	function EncabezadoRepResumenProdFact($parametro=array()){		
		
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		$encabezado = '<p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1">
					<thead>
						<tr bgcolor="'.$this->RepParam['encabezado2']['color_fondo'].'" color="'.$this->RepParam['encabezado2']['color_letra'].'" >
						  <td colspan="4" align="center" width="'.$this->RepParam['ancho']['total'].'">
							<font size="12">					            
								<b> RESUMEN PRODUCTOS '.$TxtMoneda.'</b>								
							</font>
						  </td>
					   </tr>
						<tr bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" color="'.$this->RepParam['encabezado']['color_letra'].'" height="6">	
						    <td align="center"  width="'.$this->RepParam['ancho'][0].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">TIPO</font></td>					
							<td align="center"  width="'.$this->RepParam['ancho'][1].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">COD</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][2].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">DENOM</font></td>							
							<td align="center"  width="'.$this->RepParam['ancho'][3].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">CANT.</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][4].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">SUB TOT'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][5].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">IVA'.$TxtMoneda.'</font></td>
							<td align="center"  width="'.$this->RepParam['ancho'][6].'" bgcolor="'.$this->RepParam['encabezado']['color_fondo'].'" ><font size="'.$this->RepParam['encabezado']['tamaño'].'">NETO'.$TxtMoneda.'</font></td>
						</tr>							
					</thead>';
					
		return $encabezado; 
	}
	
	function FinTablaRepResumenProdFact($datos=array()){
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			$fin_tabla = '   <tr bgcolor="#DDDDDD">
							   <td colspan="5"  width="'.($this->RepParam['ancho'][0]+$this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES'.$TxtMoneda.':</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][3]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_cantidad_detalle'].'</font>
							   </td>							  
							   <td width="'.($this->RepParam['ancho'][4]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_subtot_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][5]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_iva_detalle'].'</font>
							   </td>							   
							   <td width="'.($this->RepParam['ancho'][6]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_neto_detalle'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function FilaRepResumenProdFact($datos){			
			
			$datos = $this->FormatDatosFactPresent($datos);
			$datos = $this->formatear_detalle_grilla($datos);			
			$filas .= '<tr bgcolor="'.$this->RepParam['fila']['color_fondo'].'" color="'.$this->RepParam['fila']['color_letra'].'">
							<td width="'.$this->RepParam['ancho'][0].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['id_tipodetalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][1].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['coddetalle']).'</font></td>
						    <td width="'.$this->RepParam['ancho'][2].'" align="left" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['dendetalle']).'</font></td>							
							<td width="'.$this->RepParam['ancho'][3].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['cantidad_detalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][4].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['subtot_detalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][5].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['iva_detalle']).'</font></td>
							<td width="'.$this->RepParam['ancho'][6].'" align="right" bgcolor="'.$this->RepParam['fila']['color_fondo'].'"><font size="'.$this->RepParam['fila']['tamaño'].'">'.trim($datos['neto_detalle']).'</font></td>
						 </tr>';
			
			return $filas;
	}
	
	
	function RepResumenProdFact($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->consulta_resumen_detalles_fact($datos);	
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return '';}		
			$nro=0;
			
			$totales['total_cantidad_detalle']=0;
			$totales['total_precio_detalle']=0;
			$totales['total_iva_detalle']=0;
			$totales['total_neto_detalle']=0;
			
			foreach($resul as $datosFila){
				
				/*
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				*/
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
				
				$total_cantidad_detalle += $datosFila['cantidad_detalle'];				
				$total_iva_detalle += $datosFila['iva_detalle'];
				$total_neto_detalle += $datosFila['neto_detalle'];
				$total_subtot_detalle += $datosFila['subtot_detalle'];
								
				$filas .= $this->FilaRepResumenProdFact($datosFila);
				$nro++;			
			}
			
			
			$this->TotalRepResumenProdFact['total_cantidad_detalle'] += $total_cantidad_detalle;
			$this->TotalRepResumenProdFact['total_iva_detalle'] += $total_iva_detalle;
			$this->TotalRepResumenProdFact['total_neto_detalle'] += $total_neto_detalle;			
			$this->TotalRepResumenProdFact['total_subtot_detalle'] += $total_subtot_detalle;
						
			$totales['total_cantidad_detalle'] = number_format($total_cantidad_detalle,2,',','.');			
			$totales['total_precio_detalle']='NO APLICA';
			$totales['total_iva_detalle'] = number_format($total_iva_detalle/$this->TasaCambio,2,',','.');
			$totales['total_neto_detalle'] = number_format($total_neto_detalle/$this->TasaCambio,2,',','.');		
			$totales['total_subtot_detalle'] = number_format($total_subtot_detalle/$this->TasaCambio,2,',','.');
							
			$reporte = $this->EncabezadoRepResumenProdFact().$filas.$this->FinTablaRepResumenProdFact($totales);
						
			return $reporte;
	
	}
	
	function TotalesRepResumenProdMultimon($datos=array()){
			
			$datos['total_cantidad_detalle'] = number_format($this->TotalRepResumenProdFact['total_cantidad_detalle'],2,',','.');			
			$datos['total_subtot_detalle'] = number_format($this->TotalRepResumenProdFact['total_subtot_detalle'],2,',','.');
			$datos['total_iva_detalle'] = number_format($this->TotalRepResumenProdFact['total_iva_detalle'],2,',','.');			
			$datos['total_neto_detalle'] = number_format($this->TotalRepResumenProdFact['total_neto_detalle'],2,',','.');
			
			
			$fin_tabla = '   <p  style="text-align:center;"><table cellspacing="0" cellpadding="1" border="1"> 
							<tr bgcolor="#DDDDDD">
							   <td colspan="5"  width="'.($this->RepParam['ancho'][0]+$this->RepParam['ancho'][1]+$this->RepParam['ancho'][2]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> <b>TOTALES('.$this->AbrMonDef.'):</b></font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][3]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_cantidad_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][4]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_subtot_detalle'].'</font>
							   </td>
							   <td width="'.($this->RepParam['ancho'][5]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_iva_detalle'].'</font>
							   </td>							    
							   <td width="'.($this->RepParam['ancho'][6]).'" align="right">
								 <font size="'.$this->RepParam['fila']['tamaño'].'"> '.$datos['total_neto_detalle'].'</font>
							   </td>
							 </tr>							 
						   </table></p>';
			return $fin_tabla; 
	}
	
	function RepResumenProdFactMultimon($datos=array()){
			
			$this->TotalRepResumenProdFact['total_cantidad_detalle'] = 0;
			$this->TotalRepResumenProdFact['total_iva_detalle'] = 0;
			$this->TotalRepResumenProdFact['total_neto_detalle'] = 0;			
			$this->TotalRepResumenProdFact['total_subtot_detalle'] = 0;
			$this->TotalRepResumenProdFact['total_neto_detalle'] = 0;
			
			if(!$this->RepMultiMon){
			    $this->CargarMonedaLocal=1;
				$infoRep = $this->RepResumenProdFact($datos);
				return $infoRep;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'ERROR-> VALIDACIÓN DE DATOS: No se encontraron facturas !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
								
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$infoRep = $this->RepResumenProdFact($datos);	
				if($infoRep===false){return false;}	
				$rep = $rep.$infoRep.'<br />';		
			}
			
			return $rep.$this->TotalesRepResumenProdMultimon();
					
	}

	function EncabezadoRepResumenProdFactExcel($parametro=array()){		
				
		$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
		$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
		$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
		
		//CeldaTitulo($Columna='A',$textCell='',$autoSize=true,$AnchoCell=0,$Align='left',$Color='FFCCCCCC',$bold=false)
		$this->PHPExcel->ColorLinea('A','J','FFEEEEEE');
		$this->PHPExcel->CeldaTitulo('C','RESUMEN PRODUCTOS '.$TxtMoneda,false,20,'left','FFEEEEEE',true);
		$this->PHPExcel->nroFila++;
		$this->PHPExcel->CeldaTitulo('A','TIP',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('B','COD DET',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('C','DENOM',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('D','MON',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('E','TASA CAM.',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('F','%IVA',true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('G','CANT.',true,0,'center','FFCCCCCC',true);		
		$this->PHPExcel->CeldaTitulo('H','SUB TOT'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->CeldaTitulo('I','IVA'.$TxtMoneda,true,0,'center','FFCCCCCC',true);		
		$this->PHPExcel->CeldaTitulo('J','NETO'.$TxtMoneda,true,0,'center','FFCCCCCC',true);
		$this->PHPExcel->nroFila++;					
		return true; 
		
	}
	
	function FinTablaRepResumenProdFactExcel($datos=array()){
		
			$this->TxtMoneda = $this->TxtMoneda=='€'?'EURO':$this->TxtMoneda;
			$this->abrmon = $this->abrmon=='€'?'EURO':$this->abrmon;
			$TxtMoneda = $this->RepMultiMon?'('.$this->abrmon.')':$this->TxtMoneda;
			
			$this->PHPExcel->CeldaTitulo('F','TOTALES:'.$TxtMoneda,true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('G',$datos['total_cantidad_detalle'],true,0,'number','FFCCCCCC');			
			$this->PHPExcel->CeldaTitulo('H',$datos['total_subtot_detalle'],true,0,'number','FFCCCCCC');
			$this->PHPExcel->CeldaTitulo('I',$datos['total_iva_detalle'],true,0,'number','FFCCCCCC');			
			$this->PHPExcel->CeldaTitulo('J',$datos['total_neto_detalle'],true,0,'number','FFCCCCCC');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}
	
	function FilaRepResumenProdFactExcel($datos){			
			
			$datos = $this->FormatDatosFactPresent($datos);
			$datos = $this->formatear_detalle_grilla($datos);			
			$datos['abrmon'] =$datos['abrmon']=='E'?'EURO':$datos['abrmon'];			
			$this->PHPExcel->CeldaTitulo('A',$datos['id_tipodetalle'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('B'," ".$datos['coddetalle'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('C',$datos['dendetalle'],true,0,'left');
			$this->PHPExcel->CeldaTitulo('D',$datos['abrmon'],true,0,'center');
			$this->PHPExcel->CeldaTitulo('E',$datos['tascam'],true,0,'number');			
			$this->PHPExcel->CeldaTitulo('F',$this->formato_numerico_us($datos['porciva']),true,0,'number');			
			$this->PHPExcel->CeldaTitulo('G',$this->formato_numerico_us($datos['cantidad_detalle']),true,0,'number');			
			$this->PHPExcel->CeldaTitulo('H',$this->formato_numerico_us($datos['subtot_detalle']),true,0,'number');
			$this->PHPExcel->CeldaTitulo('I',$this->formato_numerico_us($datos['iva_detalle']),true,0,'number');			
			$this->PHPExcel->CeldaTitulo('J',$this->formato_numerico_us($datos['neto_detalle']),true,0,'number');
		    $this->PHPExcel->nroFila++;	
			
			return true;
	}
	
	
	function RepResumenProdFactExcel($datos=array()){
			
			
			$datos['criterio']='por_listado';
			$resul = $this->consulta_resumen_detalles_fact($datos);			
			if($resul===false){return false;}			
			if(!$resul->RecordCount()){return '';}
			
			$nro=0;
			
			$totales['total_cantidad_detalle']=0;
			$totales['total_precio_detalle']=0;
			$totales['total_iva_detalle']=0;
			$totales['total_neto_detalle']=0;
			
			$resp = $this->EncabezadoRepResumenProdFactExcel();
			if($resp===false){return false;}
			
			foreach($resul as $datosFila){
				/*
				//SEGURIDAD DE LA SUCURSAL
				$this->codintper = $datosFila['codsuc'];		
				if(!$this->obtSegCxc()){continue;}
				
				//SEGURIDAD DE LA CAJA
				$this->codintper = $datosFila['codsuc'].' - '.$datosFila['codcaj'];		
				if(!$this->obtSegCxc()){continue;}
				*/
				
				$resp = $this->ConversionMoneda($datosFila);
				if($resp===false){return false;}
				
				$resp = $this->ConfPresentMoneda($datosFila);
				if($resp===false){return false;}
								
				$total_cantidad_detalle += $datosFila['cantidad_detalle'];				
				$total_iva_detalle += $datosFila['iva_detalle'];
				$total_neto_detalle += $datosFila['neto_detalle'];
				$total_subtot_detalle += $datosFila['subtot_detalle'];
				
				$resp=$this->FilaRepResumenProdFactExcel($datosFila);
				if($resp===false){return false;}	
				
			}
			
			$this->TotalRepProdfact['total_cantidad_detalle'] += $total_cantidad_detalle;
			$this->TotalRepProdfact['total_iva_detalle'] += $total_iva_detalle;
			$this->TotalRepProdfact['total_neto_detalle'] += $total_neto_detalle;			
			$this->TotalRepProdfact['total_subtot_detalle'] += $total_subtot_detalle;
						
			$totales['total_cantidad_detalle'] = $total_cantidad_detalle;		
			$totales['total_iva_detalle'] = $total_iva_detalle/$this->TasaCambio;
			$totales['total_neto_detalle'] = $total_neto_detalle/$this->TasaCambio;			
			$totales['total_subtot_detalle'] = $total_subtot_detalle/$this->TasaCambio;
							
			$resp=$this->FinTablaRepResumenProdFactExcel($totales);									
			if($resp===false){return false;}
						
			return true;
	
	}
	
	function TotalesRepResumenProdMultimonExcel($datos=array()){
						
			$this->PHPExcel->CeldaTitulo('F','TOTALES('.$this->AbrMonDef.'):',true,0,'right','FFFFFFFF',true);
			$this->PHPExcel->CeldaTitulo('G',$this->TotalRepProdfact['total_cantidad_detalle'],true,0,'number','FFFFFFDD');			
			$this->PHPExcel->CeldaTitulo('H',$this->TotalRepProdfact['total_subtot_detalle'],true,0,'number','FFFFFFDD');
			$this->PHPExcel->CeldaTitulo('I',$this->TotalRepProdfact['total_iva_detalle'],true,0,'number','FFFFFFDD');			
			$this->PHPExcel->CeldaTitulo('J',$this->TotalRepProdfact['total_neto_detalle'],true,0,'number','FFFFFFDD');
		    $this->PHPExcel->nroFila++;	
			return true; 
	}
	
	function RepResumenProdFactExcelMultimon($datos=array()){
			
			$this->TotalRepProdfact['total_cantidad_detalle'] = 0;
			$this->TotalRepProdfact['total_iva_detalle'] = 0;				
			$this->TotalRepProdfact['total_subtot_detalle'] = 0;
			$this->TotalRepProdfact['total_neto_detalle'] = 0;
			
			if(!$this->RepMultiMon){
			    $this->CargarMonedaLocal=1;
				$infoRep = $this->RepResumenProdFactExcel($datos);
				return $infoRep;
			}
			
			$rsm = $this->ConsultarMonedasFacturas($datos);	
			if($rsm===false){return false;}
			if(!$rsm->RecordCount()){
					$mensaje = 'ERROR-> VALIDACIÓN DE DATOS: No se encontraron facturas !';
					$this->io_mensajes->message($mensaje);	
					return false;
			}
			$rep = "";
			$this->CargarMonedaLocal=false;
			$this->RepMultiMon=true;
								
			foreach($rsm as $moneda){
				$datos['codmon'] = $moneda['codmon'];							
				$this->TipoRepLis = 'POR_MONEDAS';
				$this->CodMonRep = $moneda['codmon'];
				$resp = $this->ConfPresentMoneda($moneda);
				if($resp===false){return false;}
				$infoRep = $this->RepResumenProdFactExcel($datos);	
				if($infoRep===false){return false;}	
				$this->PHPExcel->nroFila++;		
			}
			
			$resp=$this->TotalesRepResumenProdMultimonExcel();
			if($resp===false){return false;}
			
			return true;
					
	}
	
	function ActualizarEstatusFactura($datos=array()){
		
		$metodo='ActualizarEstatusFactura';
		if(!$this->id_fact)
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el id de la factura para poder actualizar el estatus. 				           			    
						<br><b>METODO:</b> '.$metodo;
			$this->io_conexiones->mensajes_ajax($mensaje);																		
			return false;
		}
		
		$CodprocOri = $this->codproceso;		
		$datos['id_fact'] = $this->id_fact;
		$this->codproceso = 'FACTURA';
		$resp = $this->extraerdatos_factura($datos);
		if($resp===false){return false;}
		$resp = $this->ActualizarEstCobFact($datos);
		if($resp===false){return false;}		
		$this->codproceso = $CodprocOri;
		
		return true;
	}
	
}// FIN DE LA CLASE 






?>
