Files
ventas_php/classes/util.class.php

825 lines
16 KiB
PHP
Executable File

<?php
require_once __DIR__ . '/system-config.class.php';
require_once __DIR__ . '/database-manager.class.php';
class Util extends SystemError
{
private $DB = null;
private $DBSelect = null;
private $activeEmpresaId = null;
public function DB()
{
if($this->DB == null )
{
$this->DB = new DB();
}
return $this->DB;
}
public function DBSelect($empresaId)
{
if($this->DBSelect == null || $this->activeEmpresaId != $empresaId)
{
$this->DBSelect = new DB(false, $empresaId);
$this->activeEmpresaId = $empresaId;
}
return $this->DBSelect;
}
function RoundNumber($number)
{
return round($number, 6);
}
function TruncateFloat($number, $digitos)
{
$raiz = 10;
$multiplicador = pow ($raiz,$digitos);
$resultado = ((int)($number * $multiplicador)) / $multiplicador;
return number_format($resultado, $digitos,'.','');
}
function FormatSeconds($sec, $padHours = false)
{
$hms = "";
$hours = intval(intval($sec) / 3600);
$hms .= ($padHours) ? str_pad($hours, 2, "0", STR_PAD_LEFT). ":" : $hours. ":";
$minutes = intval(($sec / 60) % 60);
$hms .= str_pad($minutes, 2, "0", STR_PAD_LEFT). ":";
$seconds = intval($sec % 60);
$hms .= str_pad($seconds, 2, "0", STR_PAD_LEFT);
return $hms;
}
function FormatMins($mins)
{
if($mins > 60)
{
$horas = floor($mins / 60);
$mins = $mins - ($horas * 60);
return $horas."h ".$mins."m";
}
else
{
return $mins."m";
}
}
function FormatFecha($date)
{
$meses = array(1 => "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
$trozos = explode("-",$date);
$trozos[1] = $meses[(int)$trozos[1]];
$trozos[2] = substr($trozos[2],0,2);
return $trozos[2]." de ".$trozos[1]." de ".$trozos[0];
}
function FormatHora($hora)
{
$trozos = explode(":",$hora);
return $trozos[0].":".$trozos[1]." hrs";
}
function FormatFechaHora($date)
{
$meses = array(1 => "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
$trozos = explode(" ",$date);
$fecha = $trozos[0];
$hora = $trozos[1];
$trozosFecha = explode("-",$fecha);
$trozosFecha[1] = $meses[(int)$trozosFecha[1]];
$trozosFecha[2] = substr($trozosFecha[2],0,2);
$fechaFormateada = $trozosFecha[2]." de ".$trozosFecha[1]." de ".$trozosFecha[0];
$trozosHora = explode(":",$hora);
$horaFormateada = $trozosHora[0].":".$trozosHora[1]." hrs";
return $fechaFormateada." ".$horaFormateada;
}
function FormatFechaServidor($date)
{
$trozos = explode("/",$date);
$trozos[1] = (strlen($trozos[1]) == 1) ? "0".$trozos[1] : $trozos[1];
$trozos[0] = (strlen($trozos[0]) == 1) ? "0".$trozos[0] : $trozos[0];
return $trozos[2]."-".$trozos[1]."-".$trozos[0];
}
function GetMonth($mes, $format = null)
{
$meses = array(1 => "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
$mesesAbrev = array(1 => "Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic");
if($format == "abreviado")
return $mesesAbrev[(int)$mes];
else
return $meses[(int)$mes];
}
function GetLetters($string)
{
preg_match_all('/([a-zA-Z]+)/',$string,$results);
return implode('', $results[0]);
}
function GetNumbers($string)
{
preg_match_all('/([0-9]+)/',$string,$results);
return implode('', $results[0]);
}
function ValidateString($value, $max_chars=50, $minChars = 1, $field = "Atributo")
{
if(strlen($value) > $max_chars || strlen($value) < $minChars)
{
return $this->setError(10001, "error", "", $field);
}
else
{
return true;
}
}//validateString
function ValidateInteger($value, $max = null, $min = null, $field = "Atributo")
{
if(ctype_digit((string)$value) == false)
{
return $this->setError(10020, "error", "", $field);
}
else
{
return true;
}
}//ValidateInteger
function ValidateFloat($value, $field)
{
if(!is_numeric($value))
{
return $this->setError(10020, "error", "", $field);
}
else
{
return true;
}
}//ValidateFloat
function ValidateMail($mail, $field = 'Email')
{
$mail = strtolower($mail);
if (!preg_match('/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',trim($mail)))
{
return $this->setError(10002, "error", "", $field);
}
}
function ValidateUrl($url)
{
if (!preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url))
{
$this->error = 10001;
return 10001;
}
}
function ValidateFile($pathToFile)
{
$handle = @fopen($pathToFile, "r");
if ($handle === false)
{
$this->error = 10003;
return 10003;
}
fclose($handle);
return true;
}
function wwwRedirect()
{
if(!preg_match("/^www./", $_SERVER['HTTP_HOST']))
{
header("location: http://www.".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
}
function UploadFile($name, $dir)
{
$path_parts = pathinfo($_FILES[$name]['name']);
$ext = strtolower($path_parts["extension"]);
$extArray = array("jpg", "png", "gif", "jpeg", "pdf", "doc", "docx", "txt", "xlsx");
if(!in_array($ext, $extArray))
{
$this->setError(10010, "error", "", "Imagen");
}
else
{
$newFileName = time().".".$ext;
if(move_uploaded_file($_FILES[$name]['tmp_name'], WEB_ROOT ."/".$dir."/".$newFileName))
{
return $newFileName;
}
else
{
$this->setError(10011, "error", "", "Imagen");
}
}
}
function UploadImage($name, $dir, $size = null)
{
$path_parts = pathinfo($_FILES[$name]['name']);
$ext = strtolower($path_parts["extension"]);
$extArray = array("jpg", "png", "gif", "jpeg");
if(!in_array($ext, $extArray))
{
return $this->setError(10010, "error", "", "Imagen");
}
if($size)
{
list($width, $height) = getimagesize($_FILES[$name]['tmp_name']);
if($width > $size || $height > $size)
return $this->setError(10012, "error", "", "Imagen");
}
$newFileName = time().".".$ext;
if(move_uploaded_file($_FILES[$name]['tmp_name'], WEB_ROOT ."/".$dir."/".$newFileName))
{
return $newFileName;
}
else
{
return $this->setError(10011, "error", "", "Imagen");
}
}
function HandleMultipages($page, $total_items, $link, $pagevar = "p", $limit = 5)
{
$items_per_page = defined('ITEMS_PER_PAGE') ? ITEMS_PER_PAGE : 20;
$total_pages = ceil($total_items / $items_per_page);
$pages = array();
$pages["numbers"] = array();
$pages["first"] = false;
$pages["prev"] = false;
$pages["next"] = false;
$pages["last"] = false;
// Lógica simple de reemplazo o concatenación
$hasPlaceholder = (strpos($link, "|$pagevar|") !== false);
if($page > 0){
if(!$hasPlaceholder)
$pages["first"] = $link."/".$pagevar."/0";
else
$pages["first"] = str_replace("|$pagevar|", "0", $link);
if(!$hasPlaceholder)
$pages["prev"] = $link."/".$pagevar."/".($page-1);
else
$pages["prev"] = str_replace("|$pagevar|", (string)($page-1), $link);
}
for($i = ($page - $limit); $i <= ($page + $limit); $i++)
{
if($i >= 0 && $i < $total_pages)
{
if(!$hasPlaceholder)
$pages["numbers"][$i + 1] = $link."/".$pagevar."/".$i;
else
$pages["numbers"][$i + 1] = str_replace("|$pagevar|", (string)($i), $link);
}
}
if($page < $total_pages - 1){
if(!$hasPlaceholder)
$pages["next"] = $link."/".$pagevar."/".($page+1);
else
$pages["next"] = str_replace("|$pagevar|", (string)($page+1), $link);
if(!$hasPlaceholder)
$pages["last"] = $link."/".$pagevar."/".(max(0, $total_pages - 1));
else
$pages["last"] = str_replace("|$pagevar|", (string)(max(0, $total_pages - 1)), $link);
}
$pages["current"] = $page+1;
$pages["items_per_page"] = $items_per_page;
$pages["start"] = $page * $items_per_page;
return $pages;
}//handle_multipages
function hs_eregi($var1,$var2,$var3 = array()){
if(function_exists("mb_eregi"))
return mb_eregi($var1,$var2,$var3);
else
return preg_match($var1,$var2,$var3);
}//hs_eregi
function hs_preg_replace($var1,$var2,$var3){
// mb_preg_replace no existe, usar directamente preg_replace
return preg_replace($var1,$var2,$var3);
}//hs_preg_replace
function SexoString($sex)
{
switch($sex)
{
case "m": $sexo = "Masculino";break;
case "f": $sexo = "Femenino";break;
default: $sexo = "Masculino";
}
return $sexo;
}
function CalculateIva($price)
{
$ivaRate = 16; // Default IVA rate
if (isset($_ENV['IVA_RATE'])) {
$ivaRate = (float)$_ENV['IVA_RATE'] * 100; // Convert from decimal to percentage
}
return $price * ($ivaRate / 100);
}
function ReturnLang()
{
if(!isset($_SESSION['lang']) || !$_SESSION['lang'])
{
$lang = "es";
}
elseif(isset($_SESSION['lang']) && $_SESSION['lang'] == "es")
{
$lang = "es";
}
else
{
$lang = "en";
}
return $lang;
}
function FormatOutputText(&$text)
{
$text = nl2br($text);
}
function SetIp()
{
if ($_SERVER)
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif (isset($_SERVER['HTTP_CLIENT_IP']))
{
$realip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$realip = $_SERVER['REMOTE_ADDR'];
}
}
else
{
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) )
{
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
}
elseif ( getenv( 'HTTP_CLIENT_IP' ) )
{
$realip = getenv( 'HTTP_CLIENT_IP' );
}
else
{
$realip = getenv( 'REMOTE_ADDR' );
}
}
return $realip;
}
function setError($value = NULL, $type="error", $custom = "", $errorField = "")
{
$this->type[] = $type;
$this->error[] = $value;
$this->errorField[] = $errorField;
$this->complete = true;
}
function GetError()
{
if(!$this->complete)
return false;
else
return true;
}
function GetErrors()
{
return $this->error;
}
function GetErrorField()
{
return $this->errorField;
}
function GetType()
{
return $this->type;
}
function GetField()
{
return $this->errorField;
}
function Reset()
{
$this->type = array();
$this->error = array();
$this->errorField = array();
$this->complete = false;
}
function PrintErrors()
{
if(empty($this->error)){
return false;
}
$errorStr = "<div id='error-box'>";
foreach($this->error as $key => $val)
{
$msg = $this->errorMessage($val);
$field = isset($this->errorField[$key]) ? $this->errorField[$key] : '';
$errorStr .= "<div class='error-item'>";
if($field != "")
{
$errorStr .= "<b>".$field.":</b> ";
}
$errorStr .= $msg;
$errorStr .= "</div>";
}
$errorStr .= "</div>";
echo $errorStr;
return true;
}
function errorMessage($code)
{
global $property;
return $property['error'][$code];
}
function ValidateRfc($rfc, $field)
{
if(strlen($rfc) > 13)
{
return $this->setError(10013,"error","", $field);
}
return true;
}
function ExportToExcel($data, $filename)
{
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Pragma: no-cache");
header("Expires: 0");
foreach($data as $row)
{
echo implode("\t", $row) . "\n";
}
}
function GetMonthRange($startDate, $endDate, $type = "default")
{
$startTime = strtotime($startDate);
$endTime = strtotime($endDate);
if($startTime > $endTime)
return false;
$meses = array();
if($type == "default")
{
while($startTime <= $endTime)
{
$mes = date("n", $startTime);
$year = date("Y", $startTime);
$meses["$year-$mes"] = $this->GetMonth($mes)." ".$year;
$startTime = strtotime("+1 month", $startTime);
}
}
return $meses;
}
function PrepareToSql($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
function ConvertToView($data)
{
$data = stripslashes($data);
$data = htmlspecialchars_decode($data);
return $data;
}
function ToName($string)
{
$string = strtolower($string);
$string = ucwords($string);
return $string;
}
function ValidateFileFormat($file, $formats)
{
$filePathParts = pathinfo($file);
$fileExt = strtolower($filePathParts["extension"]);
if(in_array($fileExt, $formats))
return true;
else
return false;
}
function GetImageSize($src, $maxwidth = null, $maxheight = null)
{
$size = getimagesize($src);
if(!$maxwidth)
$maxwidth = 200;
if(!$maxheight)
$maxheight = 200;
$width = $size[0];
$height = $size[1];
if($width > $maxwidth)
{
$height = ($maxwidth / $width) * $height;
$width = $maxwidth;
}
if($height > $maxheight)
{
$width = ($maxheight / $height) * $width;
$height = $maxheight;
}
return array('width' => round($width), 'height' => round($height));
}
function SendEmail($to, $subject, $body, $from = null, $fromName = null)
{
global $mail;
if(!$from)
$from = SMTP_USER;
if(!$fromName)
$fromName = "Ventas System";
$mail->ClearAddresses();
$mail->AddAddress($to);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->From = $from;
$mail->FromName = $fromName;
if(!$mail->Send())
{
return false;
}
else
{
return true;
}
}
function utf8fix($text)
{
$text = $text;
$length = strlen($text);
$out = '';
$escaped = false;
for($i=0;$i<$length;$i++) {
$c = ord($text[$i]);
if ($c > 128) {
if (!$escaped) {
$out .= '&#';
$escaped = true;
}
$out .= $c;
} else {
if ($escaped) {
$out .= ';';
$escaped = false;
}
$out .= $text[$i];
}
}
if ($escaped) {
$out .= ';';
$escaped = false;
}
return $out;
}
function SendContactFormEmail($fields, $recipients, $subject, $extra = null)
{
global $mail;
$mail->ClearAddresses();
foreach($recipients as $recipient)
$mail->AddAddress($recipient);
$mail->Subject = $subject;
$mail->From = SMTP_USER;
$mail->FromName = "Ventas System";
$body = "<table>";
foreach($fields as $field => $value)
{
$body .= "<tr>";
$body .= "<td><b>".$field."</b></td>";
$body .= "<td>".$value."</td>";
$body .= "</tr>";
}
if(is_array($extra))
{
foreach($extra as $key => $val)
{
$body .= "<tr>";
$body .= "<td><b>".$key."</b></td>";
$body .= "<td>".$val."</td>";
$body .= "</tr>";
}
}
$body .= "</table>";
$mail->Body = $body;
if(!$mail->Send())
{
return false;
}
else
{
return true;
}
}
function SaveLog($txt, $operation = "info")
{
$file = DOC_ROOT."/log/log.txt";
$fp = fopen($file, "a");
fwrite($fp, $operation." : ".date('Y-m-d H:i:s')." : ".$txt."\n");
fclose($fp);
}
function GetNameUsrType($type)
{
switch($type)
{
case 'admin': return 'Administrador';
case 'vendedor': return 'Vendedor';
case 'gerente': return 'Gerente';
case 'supervisor': return 'Supervisor';
case 'cajero': return 'Cajero';
case 'almacen': return 'Almacén';
case 'chofer': return 'Chofer';
case 'cliente': return 'Cliente';
case 'facturacion': return 'Facturación';
case 'direccion': return 'Dirección';
case 'capturista': return 'Capturista';
case 'maquilador': return 'Maquilador';
case 'centralizador': return 'Centralizador';
default: return ucfirst($type);
}
}
function DecodeUrlResult($result)
{
if(!is_array($result))
return $result;
foreach($result as $k => $var)
{
if(is_array($var))
{
foreach($var as $k2 => $var2)
{
$result[$k][$k2] = urldecode($var2);
}
}
else
{
$result[$k] = urldecode($var);
}
}
return $result;
}
function DecodeResult($result)
{
if(!is_array($result))
return $result;
foreach($result as $k => $var)
{
if(is_array($var))
{
foreach($var as $k2 => $var2)
{
$result[$k][$k2] = htmlspecialchars_decode($var2);
}
}
else
{
$result[$k] = htmlspecialchars_decode($var);
}
}
return $result;
}
function EncodeRow($result)
{
if(!is_array($result))
return $result;
foreach($result as $k => $var)
{
if(is_array($var))
{
foreach($var as $k2 => $var2)
{
$result[$k][$k2] = urlencode($var2);
}
}
else
{
$result[$k] = urlencode($var);
}
}
return $result;
}
function EncodeResult($result)
{
if(!is_array($result))
return $result;
foreach($result as $k => $var)
{
if(is_array($var))
{
foreach($var as $k2 => $var2)
{
$result[$k][$k2] = htmlspecialchars($var2);
}
}
else
{
$result[$k] = htmlspecialchars($var);
}
}
return $result;
}
}//Util
?>