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


class Amortizacion{
	public $resId=NULL;				
	public $old_recordset=NULL;		
	public $recordset=NULL;			
	public $mail=NULL;				
	public $prefs=NULL;				
	
	public function initHistorial(){
		$f=$this->recordset; $o=$this->old_recordset;
		
		$historial=array();								
		$especiales=array();							
		$metodo=array("dum","sln","syd","ddb","pct");	
		$acumulada=$f['amort_inicial'];					
		$quedan=$f['val_adq']-$acumulada;				
		
		$q=mysql_query("SELECT * FROM smk_valores WHERE tipo<>1 AND idActivo={$f['id']}");
		while($e=mysql_fetch_assoc($q)) $especiales[]=$e;
		$qid=mysql_query("SELECT forzar_baja FROM smk_denominaciones WHERE id='{$f['id_denominacion']}'");
		if(mysql_num_rows($qid)>0){
			$fid=mysql_fetch_assoc($qid);
			if($fid['forzar_baja']==1){
				if($f['fecha_baja']!='' && strtotime($f['fecha_baja'])!==FALSE){
					$especiales[]=array("idActivo"=>$f['id'], "tipo"=>3, "periodonombre"=>date("Y-m", strtotime($f['fecha_baja'])), "incremento"=>0);
				}
			}
		}
		
		if($f['tipo_amort']==4){
			$f['mes_inicio']=1; 			
			$f['annos_amort']=ceil(100/$f['porcent_anual']);
		}
		$periodos=$f['annos_amort'] * 12;	
		if($f['mes_inicio']==0) $f['mes_inicio']=1;		
		
		for($i=0; $i<$periodos; $i++){
			$terminar=false;
			
			$mes=($f['mes_inicio']+$i)%12;
			if($mes==0) $mes=12;
			$anno=$f['anno_capit'] + floor(($f['mes_inicio']+$i-1)/12);
			$periodonombre=$anno."-".($mes<10 ? "0$mes" : $mes);
			
			$coinciden=FALSE;
			foreach($especiales as $evento){
				if((string)$evento['periodonombre']==(string)$periodonombre){
					$coinciden=TRUE;
					$historial[$i]=$evento;	
					$historial[$i]['idAdjunto']=$evento['idAdjunto'];
					$historial[$i]['idActivo']=$evento['idActivo'];
					$historial[$i]['comentarios']=$evento['comentarios'];
					switch($evento['tipo']){
						case 2:
							$historial[$i]['tipo']=2;
							$historial[$i]['variac_vida']=0;
							$quedan+=$evento['incremento'];
							$historial[$i]['incremento']=$evento['incremento'];
							break;
						case 4:
							$historial[$i]['tipo']=4;
							break;
						case 3:
							$historial[$i]['tipo']=3;
							$historial[$i]['variac_vida']=0;
							$quedan=$historial[$i-1]['contable'];
							$terminar=true;
							$periodos=$i+1;
							break;
					}
					break;	
				}
			}
			if($coinciden==FALSE){
				$historial[$i]['variac_vida']=0;
				$historial[$i]['tipo']=1;
				$historial[$i]['incremento']=0;
				$historial[$i]['idAdjunto']=NULL;
				$historial[$i]['comentarios']='';
			}
			
			$historial[$i]['periodonombre']=$periodonombre;
			$historial[$i]['periodo']=$i;
			if($terminar==false){
				if($f['tipo_amort']!=4){
					$cuota=$this->$metodo[$f['tipo_amort']]($quedan, $f['val_resid'], $periodos-$i, 1);
				}else{
					$cuota=$this->$metodo[$f['tipo_amort']]($quedan, $f['val_resid'], $f['porcent_anual'], 1);
					if($quedan-$cuota<0){
						$cuota=$quedan;					
					}
				}
				if($quedan<=0){
					$historial[$i]['valor']=0;
					$quedan=0;
				}else{
					$historial[$i]['valor']=$cuota;
					$acumulada+=$cuota;
					$quedan-=$cuota;
				}
				$historial[$i]['acumulada']=$acumulada;
				$historial[$i]['contable']=$quedan;
			}else{
				$historial[$i]['contable']=0;
				$historial[$i]['valor']=$historial[$i-1]['contable'];
				$historial[$i]['acumulada']=$historial[$i-1]['acumulada'] + $historial[$i-1]['contable'];
				break;
			}
		}
		
		mysql_query("START TRANSACTION;");
		$sql="DELETE FROM smk_valores WHERE idActivo={$f['id']}";
		mysql_query($sql);
		$sql="INSERT INTO smk_valores(idActivo, idPadre, periodo, tipo, valor, periodonombre, comentarios, idAdjunto, acumulada, contable, incremento, variac_vida) VALUES ";
		for($i=0; $i<count($historial); $i++){
			$historial[$i]['idActivo'] = $f['id'];
			$historial[$i]['idPadre']=$f['id_padre'];
			$row=$historial[$i];
			$sql.="({$f['id']}, {$f['id_padre']}, {$row['periodo']}, {$row['tipo']}, {$row['valor']}, '{$row['periodonombre']}', '{$row['comentarios']}', '{$row['idAdjunto']}', {$row['acumulada']}, {$row['contable']}, {$row['incremento']}, {$row['variac_vida']}),";
		}
		$sql=rtrim($sql,",");
		$q=mysql_query($sql) or debug($sql, true);
		mysql_query("COMMIT;");
		$historial=$this->resumen_por_annos($f['id'], $historial);
		return $historial;
	}
	
	private function resumen_por_annos($activo, $historial){
		$data=array();
		for($i=0;$i<count($historial);$i++){
			$row=$historial[$i];
			if($i==count($historial)-1 || substr($row['periodonombre'],0,4) != substr($historial[$i+1]['periodonombre'],0,4)){
				$temp=array();
				$temp['idActivo']=$row['idActivo'];
				$temp['idPadre']=$row['idPadre'];
				$temp['acumulada']=$row['acumulada'];
				$temp['contable']=$row['contable'];
				$temp['periodonombre']=substr($row['periodonombre'],0,4);
				$data[]=$temp;
			}
		}
		mysql_query("START TRANSACTION;");
		mysql_query("DELETE FROM smk_valores_anual WHERE idActivo='{$activo}'");
		$sql="INSERT INTO smk_valores_anual (idActivo, idPadre, periodonombre, acumulada, contable) VALUES ";
		for($i=0; $i<count($data); $i++){
			$row=$data[$i];
			$sql.="({$row['idActivo']}, {$row['idPadre']}, '{$row['periodonombre']}', {$row['acumulada']}, {$row['contable']}),";
		}
		$sql=rtrim($sql,",");
		$q=mysql_query($sql);
		mysql_query("COMMIT;");
		
		return $historial;
	}
	public function initHistorialSub(){
		$f=$this->recordset;
		$activo=mysql_fetch_assoc(mysql_query("SELECT * FROM smk_conciliacion WHERE id={$f['idActivo']}"));
		$this->recordset=$activo;
		$this->initHistorial();
	}
	
	public function sln($cost, $salvage, $life, $per=NULL, $factor=NULL){
		$f=$this->recordset;
		$retonno=($cost - $salvage) / $life;
		return $retonno;
	}
	public function syd($cost, $salvage, $life, $per, $factor=NULL){
		return (($cost - $salvage) * ($life - $per + 0) * 2) / ($life * (1 + $life));
	}
	public function ddb($cost, $salvage, $life, $per, $factor=2){
		$f=$this->recordset;
		$x=0;
		$n=0;
		while($per>=$n){
			$x = $factor * $cost / $life;
			if(($cost-$x)<$salvage){
				$x=$cost-$salvage;
			}
			if($x<0) $x=0;
			$cost=$cost-$x;
			$n++;
		}
		return $x;
	}
	public function dum(){
		return 0;
	}
	public function pct($cost, $salvage, $percent, $factor=NULL){
		$f=$this->recordset;
		$retonno=($f['val_adq']-$f['amort_inicial']) * ($percent / 100 / 12);
		return $retonno;
	}

}
?>