<?
////////////////////////////////////////////////////
// Conciliación: gestión de conciliación de activos
// Version: 1.0
//
// Copyright (C) 2014  Eustotem Multimedia, S.L.
//
// License: MIT, see LICENSE
////////////////////////////////////////////////////


class ExcelImporter{
	public $obj;			
	public $model;			
	public $debugMode;		
	public $insertMode;		
	function ExcelImporter(){
		$this->obj=NULL;
		$this->model=array();
		$this->debugMode=FALSE;
		$this->insertMode="IGNORE";
	}
	private function raiseError($errcode){
		switch($errcode){
			case 1:
				die("Objeto Excel no inicializado");
				break;
			case 2:
				die("No existe la tabla especificada en el modelo de datos");
				break;
			default:
				die("Error genérico");
				break;
		}
	}
	
	private function debug($cadena){
		if($this->debugMode==FALSE) return;
		echo "<pre>";
		var_dump($cadena);
		echo "</pre>";
	}
	
	private function getMaxRow($hoja, $col=0){
		if($this->obj==NULL) $this->raiseError(1);
		$index=1;
		$filas0=$this->obj->rowcount($hoja);
		while($index<=$filas0){
			$valor=$this->obj->val($index,$col,$hoja);
			if($valor=='' || is_null($valor)) break;
			$index++;
		}
		return $index-1;
	}
	public function makeQueries($tabla, $datos, $modo=""){
		if($this->obj==NULL) $this->raiseError(1);
		if($datos==NULL) $this->raiseError(2);
		$sentencias=array();
		$hoja0=$datos['sheet'];
		$fila0=$datos['row'];
		$columna0=$datos['col'];
		$maxfilas=$this->getMaxRow($hoja0, $columna0);
		
		for($i=0;$i<=$maxfilas-$fila0;$i++){
			$cadena1="INSERT {{placeholder}} INTO $tabla (";
			$cadena2=") VALUES (";
			$cadena3=")";
			$nombrescampos=array();
			$valorescampos=array();
			foreach($datos['fields'] as $field){
				$nombrescampos[]=$field['name'];
				$temp=$this->obj->val($fila0+$i,$columna0+$field['col'],$hoja0);
				if($field['type']=='string' || $field['type']=='date'){
					$temp="'".addslashes(stripslashes($temp))."'";
				}else{
					if($temp=='' || $temp==NULL){
						$temp='NULL';
					}else{
						$temp=doubleval(str_replace(array(',','$'), array('',''), $temp));
					}
				}
				$valorescampos[]=$temp;
			}
			$sql=$cadena1.implode(",",$nombrescampos).$cadena2.implode(",",$valorescampos).$cadena3;
			if($this->insertMode=="REPLACE"){
				$sql=str_replace(" {{placeholder}} "," ",$sql);
				$sql.=" ON DUPLICATE KEY UPDATE ";
				$extras=array();
				for($n=0;$n<count($nombrescampos);$n++){
					$extras[]=$nombrescampos[$n]."=".$valorescampos[$n];
				}
				$sql.=implode(",",$extras);
			}else{
				$sql=str_replace(" {{placeholder}} "," IGNORE ",$sql);
			}
			$sentencias[]=mb_convert_encoding($sql,"UTF-8",array("ASCII","ISO-8859-1","WINDOWS-1252"));
		}
		return $sentencias;
	}
	
	public function import($nombretabla=NULL){
		if($this->obj==NULL) $this->raiseError(1);
		if($nombretabla!=NULL){
			$consultas=$this->makeQueries($nombretabla, $this->model[$nombretabla]);
			foreach($consultas as $sql){
				$this->debug($sql);
				$q=mysql_query($sql) or $this->debug(mysql_error());
			}
		}else{
			foreach($this->model as $tabla=>$datos){
				$consultas=$this->makeQueries($tabla, $datos);
				foreach($consultas as $sql){
					$this->debug($sql);
					$q=mysql_query($sql) or $this->debug(mysql_error());
				}
			}
		}
	}
	
}