<?php
date_default_timezone_set("America/Panama");
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_conexionsara, $conexionsara);
$query_ConsultaActivos = "SELECT * FROM activos";
$ConsultaActivos = mysql_query($query_ConsultaActivos, $conexionsara) or die(mysql_error());
$row_ConsultaActivos = mysql_fetch_assoc($ConsultaActivos);
$totalRows_ConsultaActivos = mysql_num_rows($ConsultaActivos);
/*
* Yo cambiaria varias cosas con respecto del tiempo.
* Primero el date de ahora deberia estar fuera del bucle... no necesitamos que se repita cada vez que entramos en el bucle.
*/
$date = time(); //Definimos $date como un TIMESTAMP, asi el resto de valores dependeran de esta variable y no cambiaran si pasan 2 seg o 3, aun que en este caso daria igual. ya que son como minimo dias
$date1 = date("Y-m-d",$date); //Esta parte no haria falta si solo sirve para hacer los calculos de los dias que han pasado y metiésemos un timestamp en la BBDD.
//list($AñoAct,$MesAct,$DiaAct)=explode("-",$date1);//Esta parte no haria falta si solo sirve para hacer los calculos de los dias que han pasado.Lo que edito mas abajo
do{
$Porcentaje =$row_ConsultaActivos['PORCDEP'];
$ValorActual =$row_ConsultaActivos['VALORACTUAL'];
$Secuencia = $row_ConsultaActivos['SECUENCIA'];
$ValorAgregado = $row_ConsultaActivos['VALORAGREGADO'];
$Valor = $row_ConsultaActivos['VALOR'];
if (($Porcentaje)> 0){
//Supongo que habras guardado en la BBDD algo parecido a Y-m-d asi que podemos cambiar esto a lo mismo que antes.
$date2 = $row_ConsultaActivos['FECHAADQUISICION'];
//list($AñoAdq,$MesAdq,$DiaAdq)=explode("-",$row_ConsultaActivos['FECHAADQUISICION']); //Esta parte no haria falta si solo sirve para hacer los calculos de los dias que han pasado.Lo que edito mas abajo
//Yo en esta zona usaria funciones matematicas sin entrar en condicionales.De hecho usaria el timestamp.
//ya lo comente en http://www.lawebdelprogramador.com/foros/PHP/1398675-calcular_edad_en_php.html
$diferencia=$date-strtotime($date2);//Medida en segundos de la diferencia de ambas fechas.
//Años que quedan. la parte entera son los años, la parte decimal son meses y días.
$anos=$diferencia/60/60/24/30/12;
//El resto es la parte decimal y para ello restamos la parte entera a $años. El resto contiene los meses y los dias
$a_resto=$anos-(int)$anos;
//Si multiplicamos el resto *12 nos da los meses la parte entera y la parte decimal que queda son los días.
$meses=$a_resto*12;
//El resto igual que en $a_resto pero con meses. Así que $m_resto es la parte decimal en donde están los días.
$m_resto=$meses-(int)$meses;
//Multiplicamos el resto *30 y nos quedamos con la parte entera que son los días.El resto no nos serviran ahora.
$Dia=(int)($m_resto*30);
$Mes=(int)$meses; //Nos quedamos solo con la parte entera, la parte decimal la usamos para los meses y dias.
$Año=(int)$anos; //Nos quedamos solo con la parte entera, la parte decimal ya la usamos con los dias.
//El mensaje no lo meteria en la BBDD, ya tienes los valores de date en la BBDD, esto solo hace falta hacer un list como arriba comentado y un echo con el string. Te evitas meter mucha frase redundante.
$Mensaje = ( "En el inventario, El tiempo de uso es de: ". $Año ." años ".$Mes . " meses ". $Dia. " dias ");
//Todo esto no haria falta, nos quedamos con la parte entera de transformar segundos a min, de min a horas, de horas a dias.
//$AñosEnDias = $Año * 365;
//$MesesEnDias = $Mes * 30;
//$TiempoDeUso = $AñosEnDias + $MesesEnDias + $Dia;
$TiempoDeUso=(int)($diferencia/60/60/24);
//==============================================
// SI EL VALOR ACTUAL ES MAYOR O IGUAL A 100
//==============================================
if (($ValorActual)>= 100) {
$depacum = $row_ConsultaActivos['TOTALDEPRECIADO'];
//Supongo que esta zona tambien se podra simplificar por alguna parte. A saber.
$DepAnual=(($ValorActual * $Porcentaje)/100)* $Año;
$DepMen = ((($ValorActual * $Porcentaje)/100)/12)* $Mes;
$DepDia = (((($ValorActual * $Porcentaje)/100)/12)/30)* $Dia;
$DepTotal = $DepAnual + $DepMen + $DepDia;
$ValorReal = $ValorActual - $DepTotal;
$NewVal= $ValorActual - $DepTotal;
if (($NewVal)<= 1){
$NewVal = 1;
$TotalDepreciado = $ValorActual - 1;
}else{
$TotalDepreciado = $DepTotal;
}
$RestaAcumulada = $depacum - $DepTotal;
//==============================================
// ACTUALIZACION LOS DATOS DE LA TABLA ACTIVOS
//==============================================
$updateSQL = sprintf("UPDATE activos SET DEPRECIACIONACUMULADA=%s, VALORREAL=%s, VALORDEPRECANUAL=%s, VALORDEPRECMENS=%s, VALORDEPRECDIARIO=%s, FECHAACTUAL=%s, TOTALDEPRECIADO=%s, TIEMPOUSO=%s WHERE SECUENCIA=%s",
GetSQLValueString($DepTotal, "double"),
GetSQLValueString($NewVal, "double"),
GetSQLValueString($DepAnual, "double"),
GetSQLValueString($DepMen, "double"),
GetSQLValueString($DepDia, "double"),
GetSQLValueString($date1, "date"),
GetSQLValueString($TotalDepreciado, "double"),
//No se que estarás haciendo, pero para visualizarlo no seria mejor tirar de date que ya tienes gardado, con un list($año,$mes,$dia)=explode("-",date_en_la_BBDD) y luego imprimir el mensaje via PHP
//Lo digo mas que nada por que estas guardando una cantidad de strings por cada entrada que tengas, pudiendo ahorrar espacio en la BBDD.
GetSQLValueString($Mensaje, "text"),
GetSQLValueString($Secuencia, "text"));
mysql_select_db($database_conexionsara, $conexionsara);
$Result1 = mysql_query($updateSQL, $conexionsara) or die(mysql_error());
if(($DepTotal)>$ValorAgregado){
$TotalDepreciado = ($Valor + $DepTotal)-1;
$updateSQL1 = sprintf("UPDATE activos SET TOTALDEPRECIADO=%s WHERE SECUENCIA=%s",
GetSQLValueString($TotalDepreciado, "double"),
GetSQLValueString($Secuencia, "text"));
mysql_select_db($database_conexionsara, $conexionsara);
mysql_query("SET NAMES 'utf-8'");
$Result1 = mysql_query($updateSQL1, $conexionsara) or die(mysql_error());
}
if (($RestaAcumulada)<> 0){
$DepreciacionAcumulada = $depacum + $DepDia;
$updateSQL2 = sprintf("UPDATE activos SET DEPRECIACIONACUMULADA=%s WHERE SECUENCIA=%s",
GetSQLValueString($DepreciacionAcumulada, "double"),
GetSQLValueString($Secuencia, "text"));
mysql_select_db($database_conexionsara, $conexionsara);
mysql_query("SET NAMES 'utf-8'");
$Result1 = mysql_query($updateSQL2, $conexionsara) or die(mysql_error());
}
}
//==============================================
// SI EL VALOR ACTUAL ES MENOR A 100
//==============================================
if (($ValorActual)< 100) {
$DepDia = $ValorActual / 365 ;
$DepTotal=$TiempoDeUso * $DepDia;
$NewVal = $ValorActual - $DepTotal;
if (($NewVal)<= 0){
$NewVal = 1;
$TotalDepreciado = $ValorActual - 1;
}else{
$TotalDepreciado = $DepTotal;
}
$updateSQL = sprintf("UPDATE activos SET TOTALDEPRECIADO=%s, VALORREAL=%s, VALORDEPRECDIARIO=%s, FECHAACTUAL=%s, TIEMPOUSO=%s WHERE SECUENCIA=%s",
GetSQLValueString($TotalDepreciado, "double"),
GetSQLValueString($NewVal, "double"),
GetSQLValueString($DepDia, "double"),
GetSQLValueString($date1, "date"),
GetSQLValueString($TiempoDeUso, "text"),
GetSQLValueString($Secuencia, "text"));
mysql_select_db($database_conexionsara, $conexionsara);
/*mysql_query("SET NAMES 'utf-8'");*/
$Result1 = mysql_query($updateSQL, $conexionsara) or die(mysql_error());
}
}
} while ($row_ConsultaActivos = mysql_fetch_assoc($ConsultaActivos));
$rows = mysql_num_rows($ConsultaOrigen);
if($rows > 0) {
mysql_data_seek($ConsultaActivos, 0);
$row_ConsultaActivos = mysql_fetch_assoc($ConsultaActivos);
}
?>