<?php

class covensol_siv_c_inventario {

	function covensol_siv_c_inventario($propiedades=array()){		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// Function: Formulación
		// Access: public (covensol_siv_c_inventario)
		// Description: Constructor de la Clase
		// Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 24/04/2014 								
		// Fecha Última Modificación : 
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		global $ruta;
		if($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."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"];
		require_once($ruta."shared/class_folder/class_logs.php");					
		$this->logs = new logs();
		$this->logs->ruta_log = 'txt/logs/loginterfase_'.date("dmY_H_i").'.log';
		require_once($ruta."siv/sigesp_siv_c_recepcion.php");
	    $this->io_recep= new sigesp_siv_c_recepcion();	
			
		if($propiedades['habilitar_json_lib']){
			require_once($ruta.'shared/class_folder/JSON.php');
			$this->json = new JSON();
		}	
		$this->postgres_ilike = '';
		if($_SESSION["ls_gestor"] == 'POSTGRES'){$this->postgres_ilike = 'I';}
		
		require_once($ruta."shared/class_folder/sigesp_c_generar_consecutivo.php");
		$this->io_keygen= new sigesp_c_generar_consecutivo();
						
		$this->RutaCsv = 'txt/';
		$this->MostrarEncontrados = 0;
	}
	
	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);
		}
		
   }// 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]'>");
		}
		else
		{
			print("<script language=JavaScript>");
			print("".$as_accion."");
			print("</script>");
		}
   }// end function uf_print_permisos
   
   function obtCfg($param,$prop=array())
	{
		
		
		$prop['criterio'] = (!$prop['criterio'])?'param':$prop['criterio'];
		$this->cfg_type = $this->cfg_type?$this->cfg_type:'C';

  
		switch($prop['criterio']){					
				
				case 'param':					
					$ls_sql="SELECT value
							  FROM sigesp_config 
							 WHERE codemp='".$this->ls_codemp."' 
							   AND codsis='".$this->cfg_codsis."' 
							   AND seccion='".$this->cfg_seccion."' 
							   AND type='".$this->cfg_type."'
							   AND entry='".$param."' ";
					break;
		
		}
		
		
				
		$this->RsFopConf=$this->io_sql->select($ls_sql);
				
		if($this->RsFopConf===false)
		{
			$metodo = 'obtCfg';
			$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;					
		}
			
		return $this->RsFopConf->fields["value"];
	}
	
	function VerificaPermisoInterno($datos=array())
	{
		
  				
		if(!$datos['codnom'])
		{				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Permiso Inválido. 				           			    
						<br><b>METODO:</b> VerificaPermisoInterno ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$ls_sql="SELECT *
				  FROM sss_permisos_internos 
				 WHERE codemp='".$this->ls_codemp."' 
				   AND codsis='".$this->cfg_codsis."' 
				   AND codusu='".$_SESSION["la_logusr"]."' 
				   AND codintper='".$datos['codnom']."'
				   AND enabled='1' ";
		
				
		$this->RsSegCaja=$this->io_sql->select($ls_sql);
				
		if($this->RsSegCaja===false)
		{
			$metodo = 'VerificaPermisoInterno';
			$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;					
		}
		
		if(!$this->RsSegCaja->RecordCount())
		{
				$mensaje = '<b>SEGURIDAD DE DATOS:</b><br> El usuario no posee permisos para esta Caja. 				           			    
							<br><b>METODO:</b> VerificaPermisoInterno ';
				$this->io_conexiones->mensajes_ajax($mensaje);
				return false;
		}		
		
		return true;
	}
	
   function formato_numerico_us($numero){
	
			$busca = array(".", ",");
			$sustituye   = array("", ".");
			number_format(str_replace($busca,$sustituye,$numero),2,'.','');
			return number_format(str_replace($busca,$sustituye,$numero),2,'.','');
	
	}
	
   function FormatLonCodEstPro($datos=array()){
	            
				$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->CODESTPRO = $datos['codestpro1'].'-'.$datos['codestpro2'].'-'.$datos['codestpro3'];
				
				return $datos;
   }
	
	function ProcesarEntradaSuministros($datos=array()){
		
		$this->logs->sislog(date('H:i:s')." .- Insertando Entrada de Suministros...");
		$datos['fecrec']=$this->io_conexiones->formatea_fecha_bd($datos['fecrec']);
		
		if(!$parametros['noprocent']){
			$resp = $this->InsertRecepcion($datos);
			if($resp===false){return false;}
		}
		
		$resp = $this->ProcesarArticulosTxt($datos);
		if($resp===false){return false;}	
				
		return true;	
	}
	
	
	
	function InsertRecepcion($datos=array()){
				
		if(!$datos['numordcom'] or !$datos['cod_pro'] or !$datos['codalm'] or !$datos['fecrec'] or !$datos['obsrec']){					
			$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,'error');																	
			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;}
				
		$ls_sql="INSERT INTO siv_recepcion (codemp,numordcom,numconrec,cod_pro,codalm,fecrec,obsrec,codusu,estpro,estrec,estrevrec,estapr)
		              VALUES ('".$this->ls_codemp."','".
					             $datos['numordcom']."','".
								 $this->numconrec."','".
								 $datos['cod_pro']."','".
								 $datos['codalm']."','".
								 $datos['fecrec']."','".
								 $datos['obsrec']."','".
				                 $_SESSION["la_logusr"]."',
								 '1',
								 '1',
								 '1',
								 '0')";
		
		
		$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;			
		}	
				
		return true;	
	}
	
	function InsertDtRecepcion($datos=array()){
				
				
		if(!$datos['numordcom']){					
			$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> InsertDtRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['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> InsertDtRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['codart']){					
			$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> InsertDtRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['unidad']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la unidad para poder insertar el artículo en la recepción. 				           			    
						<br><b>METODO:</b> InsertDtRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['canoriart']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> La cantidad del artículo no puede ser 0. 				           			    
						<br><b>METODO:</b> InsertDtRecepcion ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if($datos['unidad']!="M" and $datos['unidad']!="D"){					
			$mensaje = "<b>VALIDACIÓN DE DATOS:</b><br> Modalidad Inválida: ".$datos['unidad'].". La modalidad debe ser 'M' o 'D'. 				           			    
						<br><b>METODO:</b> InsertDtRecepcion ";
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$datos['cosadic']=$datos['cosadic']?$datos['cosadic']:0;
		$datos['preorigin']=$datos['preorigin']?$datos['preorigin']:$datos['preuniart'];
		
		$ls_sql="INSERT INTO siv_dt_recepcion (codemp,numordcom,numconrec,codart,unidad,canart,penart,preuniart,monsubart,montotart,orden,canoriart, preorigin, cosadic)
				 VALUES ('".$this->ls_codemp."','".
				            $datos['numordcom']."','".
							$datos['numconrec']."','".
							$datos['codart']."','".
							$datos['unidad']."','".
							$datos['canart']."','".
							$datos['penart']."','".
						    $datos['preuniart']."','".
							$datos['monsubart']."','".
							$datos['montotart']."','".
							$datos['orden']."','".
							$datos['canoriart']."','".
							$datos['preorigin']."','".
							$datos['cosadic']."')"; 
		
		
		$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;			
		}	
				
		return true;	
	}
	
	function ValidaArticulo($datos=array()){
			
			if(!$datos['codart']){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código del artículo. 				           			    
							<br><b>METODO:</b> ValidaArticulo ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			$ls_sql=" SELECT codart FROM siv_articulo WHERE codart='".$datos['codart']."' ";
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){			
				$metodo = 'ValidaArticulo';
				$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()){
			
				if($datos['genart']){
					$resp = $this->InsertArticuloNuevo($datos);
					if($resp===false){return false;}
				}
				else{
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No existe elcódigo de artículo.
								<br><b>CÓDIGO:</b> '.$datos['codart'].'  				           			    
								<br><b>METODO:</b> ValidaArticulo ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
			}		
				
			return true;	
	
	}
	
	function ValidaTipoArticulo($datos=array()){
			
			if(!$datos['codtipart']){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código del tipo de artículo. 				           			    
							<br><b>METODO:</b> ValidaTipoArticulo ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			$ls_sql=" SELECT codtipart FROM siv_tipoarticulo WHERE codtipart='".$datos['codtipart']."' ";
			$rs_data=$this->io_sql->select($ls_sql);
			if($rs_data==false){			
				$metodo = 'ValidaTipoArticulo';
				$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()){
			
				if($datos['gentipart']){
					$resp = $this->InsertTipArtNuevo($datos);
					if($resp===false){return false;}
				}
				else{
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No existe el tipo de artículo.
							<br><b>CÓDIGO:</b> '.$datos['codtipart'].'  
							<br><b>ARTÍCULO:</b> '.$datos['codart'].' 				           			    
							<br><b>METODO:</b> ValidaTipoArticulo ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
				}
			}		
			
			
			return true;	
	
	}
	
	function InsertArticuloNuevo($datos=array()){
	
		if(!$datos['codart']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código para poder insertar el artículo nuevo. 				           			    
						<br><b>METODO:</b> InsertArticuloNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['denart']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la denominación para poder insertar el artículo nuevo. 
			            <br><b>CÓDIGO:</b> '.$datos['codart'].' 			           			    
						<br><b>METODO:</b> InsertArticuloNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['codtipart']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el tipo de artículo para poder insertar el artículo nuevo.
			            <br><b>CÓDIGO:</b> '.$datos['codart'].' 		           			    
						<br><b>METODO:</b> InsertArticuloNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['codunimed']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la unidad de medida para poder insertar el artículo nuevo. 
			            <br><b>CÓDIGO:</b> '.$datos['codart'].' 			           			    
						<br><b>METODO:</b> InsertArticuloNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['spg_cuenta']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la cuenta presupuestaria para poder insertar el artículo nuevo. 	
			            <br><b>CÓDIGO:</b> '.$datos['codart'].' 			           			    
						<br><b>METODO:</b> InsertArticuloNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['fecrec']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la fecha de registro para poder insertar el artículo nuevo. 	
			            <br><b>CÓDIGO:</b> '.$datos['codart'].' 			           			    
						<br><b>METODO:</b> InsertArticuloNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['codcar']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código del cargo(iva) para poder insertar el artículo nuevo. 	
			            <br><b>CÓDIGO:</b> '.$datos['codart'].' 			           			    
						<br><b>METODO:</b> InsertArticuloNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$ls_sql=" INSERT INTO siv_articulo( codemp, codart, denart, codtipart, 
		                                    codunimed, feccreart, obsart, 
											exiart, exiiniart, minart, maxart, reoart, prearta, preartb, 
											preartc, preartd, fecvenart, codcatsig, spg_cuenta, sc_cuenta, 
											pesart, altart, ancart, proart, ultcosart, cosproart, fotart, 
											serart, ubiart, docart, fabart, codmil, codact, estact, codseg, 
											codfami, codclase, codprod, estartgen, codartpri, lote, carcom, 
											cod_pro, spi_cuenta)
					VALUES ('".$this->ls_codemp."', '".$datos['codart']."', '".$datos['denart']."', '".$datos['codtipart']."', '".
					         $datos['codunimed']."', '".$datos['fecrec']."', '".$datos['obsart']."', 
					         0, 0, 0, 0, 0, '".$datos['preart']."', '".$datos['preart']."', 
							'".$datos['preart']."', '".$datos['preart']."', '1900-01-01', '', '".$datos['spg_cuenta']."', '', 
							 0, 0, 0, 0, '".$datos['ultcosart']."', '".$datos['ultcosart']."', '', 
							 '', '', '', '', '', '---------------', '0', '--', 
							 '----', '------', '--------', '0', '--------------------', NULL, '0', 
							 NULL, NULL);
					
				INSERT INTO siv_cargosarticulo(
							codemp, codart, codcar)
					 VALUES ('".$this->ls_codemp."', '".$datos['codart']."', '".$datos['codcar']."');
				";
		
		
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){			
			$metodo = 'InsertArticuloNuevo';
			$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->ArtInsert[] = '<b>'.$this->NroArtInsert.'.-</b> <b class="texto-azul">'.trim($datos['codart']).'</b> *******> '.trim($datos['denart']).' *******> '.trim($datos['spg_cuenta']);
		$this->logs->sislog(date('H:i:s')." .- Artículo Insertado:  ".$datos['codart'].' -------- '.$datos['denart'].' ------- '.$datos['spg_cuenta']);
		$this->NroArtInsert++;
				
		return true;	
	}
	
	
	function InsertTipArtNuevo($datos=array()){
	
		if(!$datos['codtipart']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código para poder insertar tipo de artículo nuevo. 				           			    
						<br><b>METODO:</b> InsertTipArtNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['dentipart']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta la denominación para poder insertar el tipo de artículo nuevo. 
			            <br><b>CÓDIGO:</b> '.$datos['codtipart'].' 		
						<br><b>CÓDIGO ART:</b> '.$datos['codart'].' 		           			    
						<br><b>METODO:</b> InsertTipArtNuevo ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		
		
		$ls_sql=" INSERT INTO siv_tipoarticulo(codtipart, dentipart, obstipart, tipart, codemp)
					VALUES ('".$datos['codtipart']."', '".
							   $datos['dentipart']."', 
							   '',
							   '2', '".
							   $this->ls_codemp."');
				";
		
		
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data==false){			
			$metodo = 'InsertTipArtNuevo';
			$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->TipArtInsert[] = '<b>'.$this->NroTipArtInsert.'.-</b> <b class="texto-azul">'.trim($datos['codtipart']).'</b> *******> '.trim($datos['dentipart']);
		$this->logs->sislog(date('H:i:s')." .- Tipo de Artículo Insertado:  ".$datos['codtipart'].' -------- '.$datos['dentipart']);
		$this->NroTipArtInsert++;
				
		return true;	
	}
	
	function ProcesarArticulosTxt($parametros=array()){
					
		$nombre_archivo = $this->RutaCsv.$parametros['nombre_archivo'];
		$existe = file_exists($nombre_archivo);		
		if($existe===false){$this->io_conexiones->mensajes_ajax("No se encontro el archivo: ".$nombre_archivo); return false;}
		
		$fp = fopen($nombre_archivo,"r");
		
		$numero = 1;
		$this->NroArtInsert=1;
		$NroOmit=1;	
		$this->NroTipArtInsert=1;			
		$insertado=array();
		$omitido=array();
		$this->ArtInsert=array();
		$this->TipArtInsert=array();
		
		
		while ($linea= fgets($fp,8192)){
					
					$datos = explode('|',$linea);
					
					//         0	        1	            2		  3	      4	        5	          6	          7                 8                 9          10           11
					// CODIGO A2 NUEVO	CODTIPART	 DESCRIPCION	COSTO	PRECIO	CANTIDAD	COD ALMACEN	COSTO ALMACEN   CÓDIGO(CARGO) IVA    CUENTA SPG   CODUNIMED    DENTIPART
					//numordcom,numconrec,codart,unidad,canart,penart,preuniart,monsubart,montotart,orden,canoriart	
					
					$datos['numordcom'] = trim($parametros['numordcom']);	
					$datos['numconrec'] = $this->numconrec;
					$datos['codalm'] = trim($parametros['codalm']);					
					$datos['codart'] = trim($datos[0]);					
					$datos['unidad'] = 'D';
					$datos['canart'] = number_format(trim($datos['5']),2,'.','');
					$datos['penart'] = 0;
					$datos['preuniart'] = trim($datos[3]);
					$datos['monsubart'] = number_format($datos['preuniart']*$datos['canart'],2,'.','');
					$datos['montotart'] = $datos['monsubart'];
					$datos['orden'] = $numero;
					$datos['canoriart'] = $datos['canart'];	
					$datos['denart'] = trim($datos[2]);	
					$datos['codtipart'] = trim($datos[1]);	
					$datos['codunimed'] = trim($datos[10]);	
					$datos['spg_cuenta'] = trim($datos[9]);
					$datos['preart']=number_format(trim($datos['4']),2,'.','');
					$datos['genart'] = $parametros['genart'];
					$datos['gentipart'] = $parametros['gentipart'];
					$datos['fecrec'] = trim($parametros['fecrec']);
					$datos['codcar'] = trim($datos[8]);
					$datos['ultcosart'] = $datos['preuniart'];
					$datos['dentipart'] = trim($datos[11]);
					
					if($datos['preuniart']==0){
						$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> El costo o precio de compra no puede ser 0.										
									<br><b>CÓDIGO ART:</b> '.$datos['codart'].' 		           			    
									<br><b>METODO:</b> ProcesarArticulosTxt ';
						$this->io_conexiones->mensajes_ajax($mensaje);
						return false;	
					}
									
					$resp = $this->ValidaTipoArticulo($datos);
		            if($resp===false){return false;}
												
					$resp = $this->ValidaArticulo($datos);
		            if($resp===false){return false;}
					
					if($parametros['noprocent']){continue;}
										
					if($datos['canart']==0){
						$omitido[] = '<b>'.$NroOmit.'.-</b> <b class="texto-azul">'.trim($datos['codart']).'</b> *******> '.trim($datos['canart']).' *******> '.trim($datos['preuniart']);
					    $this->logs->sislog(date('H:i:s')." .- Artículo sin cantidad Omitido:  ".$datos['codart'].' -------- '.$datos['canart'].' ------- '.$datos['preuniart']);
						continue;
					}
					
					$resp = $this->InsertDtRecepcion($datos);
		            if($resp===false){return false;}
					
					$res = $this->io_recep->uf_siv_update_ultimocosto($this->ls_codemp,$datos['codart'],$datos['preuniart']);
					if($res===false){return false;}
					
					$res = $this->io_recep->uf_siv_actualizar_costo_promedio($this->ls_codemp,$datos['codart']);
					if($res===false){return false;}
									
					$insertado[] = '<b>'.$numero.'.-</b> <b class="texto-azul">'.trim($datos['codart']).'</b> *******> '.trim($datos['canart']).' *******> '.trim($datos['preuniart']);
					$this->logs->sislog(date('H:i:s')." .- Artículo Recibido en Almacen:  ".$datos['codart'].' -------- '.$datos['canart'].' ------- '.$datos['preuniart']);
					
					$numero++;
					$NroOmit++;				
					
		}
		
		$param['titulo']='ARTÍCULOS RECIBIDOS EN ALMACÉN';
		$param['info']=$insertado;
		$this->ImprimirInfo($param);
		
		$param['titulo']='ARTÍCULOS NUEVOS INSERTADOS:';
		$param['info']=$this->ArtInsert;
		$this->ImprimirInfo($param);
		
		$param['titulo']='ARTÍCULOS OMITIDOS:';
		$param['info']=$omitido;
		$this->ImprimirInfo($param);
		
		$param['titulo']='TIPOS DE ARTÍCULOS NUEVOS INSERTADOS:';
		$param['info']=$this->TipArtInsert;
		$this->ImprimirInfo($param);
		
		return true;

	}//end function ejecutar
	
	
	function ImprimirInfo($parametros=array()){
				
		if(count($parametros['info'])==0){return true;}
		
		echo '<table width="508" border="0" align="center" cellpadding="1" cellspacing="0" class="formato-blanco">';
		echo '<tr>';
		echo '<td align="left">';
		echo '<b><span align="center">'.$parametros['titulo'].':</span></b><br><br>';
		foreach(array_unique($parametros['info']) as $DATOS){echo $DATOS.'<br>';}					
		echo '</td>';					
		echo '</table><br><br>';
	
	}
	
	
	
	function ReprocesarCostosArticulos($datos=array()){
			
			$rsart = $this->ObtenerArtXAlm($datos);
		    if($rsart===false){return false;}
			
			if(!$rsart->RecordCount()){					
				$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> No hay articulos con existencia en ningún almacen. 				           			    
							<br><b>METODO:</b> ReprocesarCostosArticulos ';
				$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
				return false;
			}
			
			$Nro=1;
			$procesado=array();
			
			foreach($rsart as $articulo){
				
				$UC = $this->ObtenerUltimoCosto($articulo);
				if($UC===false){return false;}
				
				$res = $this->io_recep->uf_siv_update_ultimocosto($this->ls_codemp,$articulo['codart'],$UC);
				if($res===false){return false;}
				
				$res = $this->io_recep->uf_siv_actualizar_costo_promedio($this->ls_codemp,$articulo['codart']);
				if($res===false){return false;}
				
				if($datos['mosres']){
					$procesado[] = '<b>'.$Nro.'.-</b> <b class="texto-azul">'.trim($articulo['codart']).'</b> *******> '.trim($this->io_recep->cosproart).' *******> '.trim($UC);
				}
				
				$Nro++;
			}
			
			$param['titulo']='COSTOS PROCESADOS: (ARTICULOS, COSTO PROMEDIO, ULTIMO COSTO) ';
			$param['info']=$procesado;
			$this->ImprimirInfo($param);
			
			return true;
	}
	
	
	function ObtenerArtXAlm($param,$prop=array())
	{
									
		$ls_sql=" SELECT DISTINCT codart
				    FROM siv_articuloalmacen aa
				   WHERE aa.existencia>0 ";
				
		$this->RsArt=$this->io_sql->select($ls_sql);
				
		if($this->RsArt===false)
		{
			$metodo = 'ObtenerArtXAlm';
			$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->RsArt;
	}
	
	function ObtenerUltimoCosto($param=array())
	{
									
		if(!$param['codart']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código del artículo para poder calcular el ultimo costo. 				           			    
						<br><b>METODO:</b> ObtenerUltimoCosto ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$ls_sql="   SELECT preuniart
					FROM siv_dt_recepcion d
					INNER JOIN siv_recepcion r ON r.codemp = d.codemp
								              AND r.numordcom=d.numordcom
								              AND r.numconrec=d.numconrec
					WHERE d.codemp='".$this->ls_codemp."'
					  AND d.codart  ='".$param['codart']."'
					ORDER BY r.fecrec,r.numconrec
					DESC LIMIT 1 ";
				
		$this->RsUC=$this->io_sql->select($ls_sql);
				
		if($this->RsUC===false)
		{
			$metodo = 'ObtenerUltimoCosto';
			$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->RsUC->fields['preuniart'];
	}
	
	
	
	function SelectArticulosAlmacen($datos=array())	
	{
		
		//print_r($datos);
		$criterio="";
		if($datos['codart']){$criterio.=" AND siv_articulo.codart='".$datos['codart']."' ";}
		if($datos['codalm']){$criterio.=" AND siv_articuloalmacen.codalm='".$datos['codalm']."' ";}
		if($datos['codtipart']){$criterio.=" AND siv_articulo.codtipart='".$datos['codtipart']."' ";}
		if(!$datos['orderalm']){$ls_orderalm="codalm";}else{$ls_orderalm="nomfisalm";}
		if(!$datos['orderart']){$ls_orderart="codart";}else{$ls_orderart="denart";}
				
		$ls_sql="SELECT siv_articuloalmacen.codemp, siv_articuloalmacen.codalm, siv_articuloalmacen.codart,  siv_articuloalmacen.existencia, 
						siv_unidadmedida.unidad AS unidades, siv_articulo.denart,
				       (SELECT nomfisalm FROM siv_almacen
				        WHERE siv_articuloalmacen.codalm=siv_almacen.codalm) AS nomfisalm,siv_articulo.ultcosart,siv_articulo.cosproart  
				  FROM siv_articuloalmacen,siv_articulo,siv_unidadmedida
				 WHERE siv_articuloalmacen.codemp='".$this->ls_codemp."'
				   AND siv_articulo.estartgen='0' 
				   ".$criterio."
				   AND siv_articuloalmacen.codart=siv_articulo.codart
				   AND siv_articulo.codunimed=siv_unidadmedida.codunimed
				   AND siv_articuloalmacen.codart=siv_articulo.codart 
				 UNION 
				SELECT siv_articuloalmacen.codemp, siv_articuloalmacen.codalm, siv_articulo.codart,  
				       SUM(siv_articuloalmacen.existencia) AS existencia, 
					   MAX(siv_unidadmedida.unidad) AS unidades, 
					   MAX(siv_articulo.denart) as denart, 
				       (SELECT nomfisalm FROM siv_almacen WHERE siv_articuloalmacen.codalm=siv_almacen.codalm) AS nomfisalm,
					   siv_articulo.ultcosart,siv_articulo.cosproart 
				  FROM siv_articuloalmacen,siv_articulo,siv_unidadmedida,siv_articuloalmacen as articuloalmacen, siv_articulo as articulo 
				 WHERE siv_articuloalmacen.codemp='".$this->ls_codemp."' 
				   AND articulo.estartgen='1' 
				   ".$criterio."
				   AND articulo.codartpri = siv_articulo.codartpri 
				   AND articulo.codart=siv_articuloalmacen.codart
				   AND articulo.codunimed=siv_unidadmedida.codunimed 
				   AND articuloalmacen.codart=articulo.codart
				 GROUP BY siv_articuloalmacen.codemp, siv_articuloalmacen.codalm, 
				          siv_articulo.codart,siv_articulo.ultcosart,
						  siv_articulo.cosproart
				 ORDER BY ".$ls_orderalm.", ".$ls_orderart." ";
	   
	    $rs_data=$this->io_sql->select($ls_sql);
				
		if($rs_data===false)
		{
			$metodo = 'SelectArticulosAlmacen';
			$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; 
	} //fin  function uf_select_articuloxalmacen

	function SelectAlmacenes($datos=array())	
	{
		
		$criterio="";
		if($datos['codalm']){$criterio.=" AND siv_almacen.codalm='".$datos['codalm']."' ";}
				
		$ls_sql="SELECT * 
		           FROM siv_almacen 
		          WHERE codemp='".$this->ls_codemp."' 
				  ".$criterio." 
				  ORDER BY codalm";
	   
	    $rs_data=$this->io_sql->select($ls_sql);
				
		if($rs_data===false)
		{
			$metodo = 'SelectAlmacenes';
			$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; 
	} //fin  function uf_select_articuloxalmacen
	
	
	function ConsultaConcepCosto($opciones=array()){	
	
		switch($opciones['criterio']){
							 
			  case "por_listado":
					$sql_criterio = " ORDER BY codconcos";
					break;			
		}
								   
		$query_rs = "SELECT codconcos, desconcos, tipconcos FROM siv_concep_costos ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaConcepCosto';
		$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 comboConcepCosto($funcionJs="",$opciones=array()){

				if(!$opciones['nombre_combo']){$nombre_combo = 'cmbconcos';}else{$nombre_combo = $opciones['nombre_combo'];}
				if(!$opciones['codconcos']){$carga = ' Seleccione '; $id_carga = '';}
				else{$carga = $opciones['desconcos'];  $id_carga = $opciones['codconcos'];}
				
				global $obj_sql;
				
				$opciones['criterio']='por_listado';
				$resultado = $this->ConsultaConcepCosto($opciones);
				
				$combo = '<select name="'.$nombre_combo.'" id="'.$nombre_combo.'" onChange="'.$funcionJs.'">
				          <option value="'.$id_carga.'">- '.$carga.' -</option>';
				
				foreach($resultado['rs'] as $fila){ 
				    $selected="";				
					//if($fila["id_tipo_cliente"]==1){$selected = 'selected';}
					$valor = $fila["codconcos"].'|'.$fila["tipconcos"];
					$combo .= '<option value="'.$valor.'" '.$selected.'>'.$fila["desconcos"].'</option>';								
				} 
				$combo .= '</select>';
																							
				return $combo;

	}
	
	function GuardarCostosEntradaInv($datos=array()){
			
		if(!$datos['numordcom']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de la factura para poder actualizar los costos de los artículos en la recepción. 				           			    
						<br><b>METODO:</b> GuardarCostosEntradaInv ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		if(!$datos['numconrec']){					
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número cosecutivo para poder actualizar los costos de los artículos en la recepción. 				           			    
						<br><b>METODO:</b> GuardarCostosEntradaInv ';
			$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
			return false;
		}
		
		$param = $datos;
		$param['criterio'] = 'por_aprob';
		$resp = $this->ConsultaEntradaInv($param);
		if($resp->RecordCount()){
				$mensaje = 'ERROR: No se puede actualizar una Recepción de Inventario con estatus aprobada ! ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return false;
		}
		$resp = $this->ProcDetEntradaInv($datos);
		if($resp===false){return false;}
		
		$resp = $this->InsertarMovCosInv($datos);
		if($resp===false){return false;}
		
		return true;		
	
	}
	
	function ConsultaEntradaInv($datos=array()){	
		$campos = " * ";
		switch($datos['criterio']){
							 
			  case "por_aprob":
					$sql_criterio = " WHERE r.codemp='".$this->ls_codemp."' 
					                    AND r.numordcom='".$datos['numordcom']."' 
							            AND r.numconrec='".$datos['numconrec']."'
										AND r.estapr='1' ";
					break;	
			  
			  case "por_numero":
					$sql_criterio = " LEFT JOIN siv_almacen a ON a.codalm=r.codalm
									  LEFT JOIN rpc_proveedor p ON p.cod_pro=r.cod_pro								  
									  WHERE r.codemp='".$this->ls_codemp."' 
					                    AND r.numordcom='".$datos['numordcom']."' 
							            AND r.numconrec='".$datos['numconrec']."'
									";
					break;		
		}
								   
		$ls_sql = "SELECT ".$campos." FROM siv_recepcion r ".$sql_criterio;
		
		$rs_data=$this->io_sql->select($ls_sql);
				
		if($rs_data===false){
			$metodo = 'ConsultaEntradaInv';
			$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  EliminarDtEntradaInv($datos){
				
				if(!$datos['numordcom']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de la factura para poder actualizar los costos de los artículos en la recepción. 				           			    
								<br><b>METODO:</b> EliminarDtEntradaInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if(!$datos['numconrec']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número cosecutivo para poder actualizar los costos de los artículos en la recepción. 				           			    
								<br><b>METODO:</b> EliminarDtEntradaInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$ls_sql = "DELETE FROM siv_dt_recepcion 
				            WHERE codemp='".$this->ls_codemp."' 
						     AND numordcom='".$datos['numordcom']."' 
							 AND numconrec='".$datos['numconrec']."'  ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){					
					$metodo = 'EliminarDtEntradaInv';
					$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 ProcDetEntradaInv($datos=array()){
				
				$res = $this->EliminarDtEntradaInv($datos);
				if($res===false){return false;}			
				
				//SE CREA EL OBJETO JSON A PARTIR DEL STRING CODIFICADO ELIMINANDO PRIMERO LOS SLATCH
				$datos['datosGrid'] = stripslashes($datos['datosGrid']);
				$obj_json = $this->json->decode($datos['datosGrid']);		
				
				//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'] =  $detalle->id;
								$datosdet['numordcom'] =  $datos['numordcom'];											
								$datosdet['numconrec'] =  $datos['numconrec'];
								$datosdet['codart'] =  $detalle->codart;											
								$datosdet['denart'] =  $detalle->denart;
								$datosdet['codartpri'] =  $detalle->codartpri;
								$datosdet['denunimed'] =  $detalle->denunimed;
								$datosdet['unidad'] =  $detalle->unidad;
								$datosdet['canoriart'] =  $detalle->canoriart;
								$datosdet['canart'] =  $detalle->canart;
								$datosdet['penart'] =  $detalle->penart;
								$datosdet['preuniart'] =  $detalle->preuniart;
								$datosdet['porciva'] =  $detalle->porciva;
								$datosdet['montotart'] =  $detalle->montotart;
								$datosdet['monsubart'] =  $detalle->montotart;
								$datosdet['preorigin'] =  $detalle->preorigin;
								$datosdet['cosadic'] =  $detalle->cosadic;
								$datosdet['orden'] =  $detalle->id;
							
								//print_r($datosdet);
								//echo '<br><br>';													
								
								$resul = $this->InsertDtRecepcion($datosdet);
								if($resul===false){return false;}
								
								
						}
				}
				catch(ErrorException $e){return false;}
				
				return true;
		
		}
		
		
		function GenerarNroMovCosInv($datos=array()){
				
			$metodo = 'GenerarNroMovCosInv';
			$ls_sql=" SELECT nummovcos::integer AS nummovcos FROM siv_dt_mov_costos 
			           WHERE codemp='".$this->ls_codemp."' 
					     AND numordcom='".$datos['numordcom']."' 
						 AND numconrec='".$datos['numconrec']."'
					   ORDER BY nummovcos::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->nummovcos = 1; return true;}
			
			$this->nummovcos = (integer)$rs_data->fields['nummovcos']+1;
			
			return true; 
				
		}
		
		function  InsertarMovCosInv($datos=array()){
				
				if(!$datos['numordcom']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de la factura para poder generar el movimiento de costo en la recepción. 				           			    
								<br><b>METODO:</b> InsertarMovCosInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if(!$datos['numconrec']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número cosecutivo de la recepción para poder generar el movimiento de costo. 				           			    
								<br><b>METODO:</b> InsertarMovCosInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				if(!$datos['codconcos']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el código del concepto para poder generar el movimiento de costo en la recepción.		           			    
								<br><b>METODO:</b> InsertarMovCosInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				
				if(!$datos['valmovcos']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el valor del concepto para poder generar el movimiento de costo en la recepción.			           			    
								<br><b>METODO:</b> InsertarMovCosInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if(!$datos['factorcos']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el factor de costo para poder generar el movimiento de costo en la recepción. 				           			    
								<br><b>METODO:</b> InsertarMovCosInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
			
				$resp = $this->GenerarNroMovCosInv($datos);
				if($resp===false){return false;}
				
				$ls_sql = "LOCK TABLE siv_dt_mov_costos IN ACCESS EXCLUSIVE MODE;
						   INSERT INTO siv_dt_mov_costos(codemp, numordcom, numconrec, nummovcos, codconcos, obsmovcos, 
                					                     fecconcos, valmovcos, factorcos,fecreg,usureg,horareg)
						   VALUES ('".$this->ls_codemp."', '".
						              $datos['numordcom']."', '".
									  $datos['numconrec']."', '".									
									  $this->nummovcos."', '".
									  $datos['codconcos']."', '".
									  $datos['obsmovcos']."', '".
									  date("Y-m-d")."', '".
									  $datos['valmovcos']."', '".
									  $datos['factorcos']."', '".
									  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 = 'InsertarMovCosInv';
					$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 movimiento de cobro se ha generado con exito. ';
				$this->io_conexiones->mensajes_ajax($mensaje);				
				return true;
	}
	
	function ConsultaMovCostos($datos=array()){	
	
		switch($datos['criterio']){
							 
			  case "por_listado_entrada":
					$sql_criterio = " 	LEFT JOIN siv_concep_costos cc ON cc.codconcos=mc.codconcos
										WHERE mc.numordcom='".$datos['numordcom']."' 
										  AND mc.numconrec='".$datos['numconrec']."'
										ORDER BY mc.codconcos";
					break;			
		}
			
		
		$query_rs = "SELECT * FROM siv_dt_mov_costos mc ".$sql_criterio;
		
		$clase = get_class($this);
		$metodo = 'ConsultaMovCostos';
		$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  EliminarCostosEntradaInv($datos){
				
				if(!$datos['numordcom']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de la factura u orden de compra para poder eliminar el movimiento de costo. 				           			    
								<br><b>METODO:</b> EliminarCostosEntradaInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if(!$datos['numconrec']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número cosecutivo para poder  eliminar el movimiento de costo. 				           			    
								<br><b>METODO:</b> EliminarCostosEntradaInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				if(!$datos['nummovcos']){					
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Falta el número de movimiento para poder eliminar el movimiento de costo. 				           			    
								<br><b>METODO:</b> EliminarCostosEntradaInv ';
					$this->io_conexiones->mensajes_ajax($mensaje,'error');																	
					return false;
				}
				
				$param = $datos;
				$param['criterio'] = 'por_aprob';
				$resp = $this->ConsultaEntradaInv($param);
				if($resp->RecordCount()){
						$mensaje = 'ERROR: No se puede actualizar una Recepción de Inventario con estatus aprobada ! ';
						$this->io_conexiones->mensajes_ajax($mensaje);				
						return false;
				}
				
				$ls_sql = "DELETE FROM siv_dt_mov_costos 
				            WHERE codemp='".$this->ls_codemp."' 
						     AND numordcom='".$datos['numordcom']."' 
							 AND numconrec='".$datos['numconrec']."'
							 AND nummovcos='".$datos['nummovcos']."'  ";
				
				$this->rs_data=$this->io_sql->select($ls_sql);			
				
				if($this->rs_data==false){					
					$metodo = 'EliminarCostosEntradaInv';
					$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->ProcDetEntradaInv($datos);
				if($resp===false){return false;}
					
				return true;
	}
	
	
	function ConsultaDtEntradaInv($datos=array()){	
		$campos = " * ";
		switch($datos['criterio']){
							 
			  case "por_aprob":
					$sql_criterio = " WHERE r.codemp='".$this->ls_codemp."' 
					                    AND r.numordcom='".$datos['numordcom']."' 
							            AND r.numconrec='".$datos['numconrec']."'
										AND r.estapr='1' ";
					break;	
			  
			  case "por_entrada":
					$sql_criterio = " LEFT JOIN siv_articulo a ON a.codart=dt.codart
									  LEFT JOIN siv_unidadmedida u ON u.codunimed=a.codunimed							  
									  WHERE dt.codemp='".$this->ls_codemp."' 
					                    AND dt.numordcom='".$datos['numordcom']."' 
							            AND dt.numconrec='".$datos['numconrec']."'
										ORDER BY dt.orden
									";
					break;		
		}

		$ls_sql = "SELECT ".$campos." FROM siv_dt_recepcion dt ".$sql_criterio;
		
		$rs_data=$this->io_sql->select($ls_sql);
				
		if($rs_data===false){
			$metodo = 'ConsultaDtEntradaInv';
			$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;
		
	}
}//////////////////////////////////////////////////////////////******* FIN CLASE INTERFASE SIGA *******/////////////////////////////////////////////////////////


?>
