<?php
declare(strict_types=0);
// Porcentaje de IVA Código
// No Objeto de Impuesto 6
// Exento de IVA 7
// IVA diferenciado3 8
// 13% 10
// 🔢

function accexdocu($docu)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(empty($docu)){return;}
     
     $sql_acce ='select docum, ';
     $sql_acce.='max(nuev) as nuev, ';
     $sql_acce.='max(modi) as modi, ';
     $sql_acce.='max(anul) as anul, ';
     $sql_acce.='max(elim) as elim, ';
     $sql_acce.='max(apro) as apro, ';
     $sql_acce.='max(proc) as proc, ';
     $sql_acce.='status ';
     $sql_acce.='from acce1 ';
     $sql_acce.='left join acce2 on idnum1=idnum2 ';
     $sql_acce.='left join docu0 on docum=docu_codigo ';
     $sql_acce.='where status not in("O","X") ';
     $sql_acce.='and docum like "'.$docu.'%" ';
     $res_acce=msql_query($sql_acce,$link_data);
     $aso_acce=msql_fetch_assoc($res_acce);
     
     return $aso_acce;
}

function accexuser($user,$docu)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(empty($user)){return;}
     if(empty($docu)){return;}

     $user0=data_maes('user',$user);
     
     $sql_acce ='select * ';
     $sql_acce.='from acce1 ';
     $sql_acce.='left join acce2 on idnum1=idnum2 ';
     $sql_acce.='left join docu0 on docum=docu_codigo ';
     $sql_acce.='where status not in("O","X") ';
     $sql_acce.='and numero='.$user.' ';
//      $sql_acce.='and docu_tabla="'.$docu.'" ';
     $sql_acce.='and docum like "'.$docu.'%" ';
     $res_acce=msql_query($sql_acce,$link_data);
     $aso_acce=msql_fetch_assoc($res_acce);
     
//      echo '=='.$sql_acce;
     
     if(mb_stristr2('.sist.supe.',$user0['user_tipo']))
     {
          if(msql_num_rows($res_acce)==0)
          {
               $sql_acce='select * from acce2 limit 1';
               $res_acce=msql_query($sql_acce,$link_data);
               $aso_acce=msql_fetch_assoc($res_acce);
          }
          if(msql_num_rows($res_acce)==0)
          {
               $sql_inse='insert into acce2(idnum2)value(1)';
               $res_inse=msql_query($sql_inse,$link_data);
               $res_acce=msql_query($sql_acce,$link_data);
               $aso_acce=msql_fetch_assoc($res_acce);
          }
          
          foreach($aso_acce as $key=>$value){$aso_acce[$key]=1;}
     }
     
//      var_dump2($aso_acce);
     return $aso_acce;
}

function set_acce1()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $docu='AXU1';
     
     $sql_user='select * from user0 ';
     $sql_user.='where ifnull(user_status,"")not in("I","X")';
     $sql_user.='order by user_codigo ';
     $res_user=msql_query($sql_user,$link_data);
     
     $sql_docu='select * from docu0 ';
     $sql_docu.='where ifnull(docu_status,"")not in("I","X")';
     $sql_docu.='order by docu_tabla,docu_codigo ';
     $res_docu=msql_query($sql_docu,$link_data);
     
     while($aso_user=msql_fetch_assoc($res_user))
     {
          $sql_acce='select * from acce1 where idnum1='.$aso_user['user_codigo'].'';
          $res_acce=msql_query($sql_acce,$link_data);

          if(msql_num_rows($res_acce)==0)
          {
               $sql_inse='insert into acce1(idnum1,docu,ptoe,numero,fecha,status,idate)value("'.$aso_user['user_codigo'].'","'.$docu.'","001001","'.$aso_user['user_codigo'].'",now(),"-",now())';
               $res_inse=msql_query($sql_inse,$link_data);
          }

          msql_data_seek($res_docu);
          while($aso_docu=msql_fetch_assoc($res_docu))
          {
               
               $sql_acce='select * from acce2 where idnum2='.$aso_user['user_codigo'].' and docum="'.$aso_docu['docu_codigo'].'"';
               $res_acce=msql_query($sql_acce,$link_data);
//                echo '<br>==>'.$sql_acce;
               
               if(msql_num_rows($res_acce)==0)
               {
                    $iddet=get_iddet($docu,$aso_user['user_codigo']);
                    $sql_inse='insert into acce2(idnum2,iddet,docum,idate2)value("'.$aso_user['user_codigo'].'","'.$iddet.'","'.$aso_docu['docu_codigo'].'",now())';
                    $res_inse=msql_query($sql_inse,$link_data);
               }

               
          }
     }
     
}

function sri_codiva($iva=0)
{
     $iva=(int)$iva;
     switch ($iva)
     {
         case 0: $codiva=0; break;
         case 5: $codiva=5; break;
         case 12: $codiva=2; break;
         case 13: $codiva=10; break;
         case 14: $codiva=3; break;
         case 15: $codiva=4; break;
     }
     return $codiva;
}


function uni_clock($xhora='')
{
     $hora=substr($xhora,0,2);
     $minu=substr($xhora,3,2);
     $clock='';
     $unicode=128335;
     $hora=(int)$hora;
     $minu=(int)$minu;
     
     if($hora>12){$hora=$hora-12;}
     if($hora==0){$hora=12;}
     
     if(!empty($hora))
     {
          $unicode=$unicode+$hora;
          if($minu>=30){$unicode=$unicode+12;}
          $clock='&#'.$unicode.';';
     }
     
     $clock=html_entity_decode($clock);
     return $clock;
}


function uni_code($string)
{
     $unicode=array();
     $string=trim(strtolower($string));
     if($string=='publicador'){$unicode['icon']='🗣️'; $unicode['deci']='&#128483;';}
     return $unicode;
}


function mb_stristr2($haystack='',$needle='')
{
     if(strlen(trim($haystack))==0){return false;}
     if(strlen(trim($needle))==0){return false;}
     $result=mb_stristr($haystack,$needle);
     return $result;
}

function var_dump2($array,$nivel=1)
{
     foreach($array as $key=>$value)
     {
          echo '<br>';
          echo str_repeat(' ==',$nivel).'> ';
          echo $key.' : '.$value;
          if(gettype($value)=='array'){var_dump2($value,$nivel+1);}
     }
}

function inse_ulog()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $sql_inse='';
     $sql_inse.='insert into ulog0(ulog_ipip,ulog_url,ulog_iuser,ulog_idate)';
     $sql_inse.='value("'.$_SERVER['REMOTE_ADDR'].'","'.$_SERVER['REQUEST_URI'].'","'.$_SESSION['user_codigo'].'"tunr,now())';
     $res_inse=msql_query($sql_inse,$link_data);
     return;
}



function updt_ipip()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
	$ipip=$_SERVER['REMOTE_ADDR'];
	
	$sql_ipip='insert into ipip0(ipip_codigo,ipip_idate)value("'.$ipip.'",now())';
	$res_ipip=msql_query($sql_ipip,$link_data);
	
	$sql_ipip='update ipip0 set ';
	$sql_ipip.='ipip_user="'.$_SESSION['user_codigo'].'",';
	$sql_ipip.='ipip_descri="'.$_SERVER['REMOTE_PORT'].'",';
	$sql_ipip.='ipip_osver="'.$_SERVER['USER_AGENT'].'",';
	$sql_ipip.='ipip_lused=now(),';
	$sql_ipip.='ipip_status=ipip_status ';
	$sql_ipip.='where ipip_codigo="'.$ipip.'"';
	$res_ipip=msql_query($sql_ipip,$link_data);
	
// 	$sql_ipip='update user0 set user_ip="'.$_SERVER['REMOTE_PORT'].'" where user_codigo="'.$user_codigo.'"';
// 	$res_ipip=msql_query($sql_ipip,$link_data);
	
     return $ipip;	
}



function conn_wsapp()
{
     $conn=file_get_contents('https://api.textmebot.com/status.php?apikey=hBN2gLzCDSTb');
     $html=str_get_html($conn);
     
     echo $html;
     return;

     foreach($html->find('div') as $element)
     {
          if($element->class=='imageee text-center')
          {
               echo'<br>IIIIIIIIIIIIIII <br>';
               echo $element;
               echo'<br>IIIIIIIIIIIIIII <br>';
          }
     }
          
}     

function send_wsapp($message="Test")
{
     
// connect phone 
// https://api.textmebot.com/status.php?apikey=hBN2gLzCDSTb     

     
     
$phone='593963345060';
$apikey='hBN2gLzCDSTb';
$message='Test Message  : '. date('H:i:s'); 
     
// A new TextMeBot APIKey has been created for you: hBN2gLzCDSTb
// Use this link: https://api.textmebot.com/addphone.php?apikey=hBN2gLzCDSTb to get started.     
     
// https://api.textmebot.com/send.php?
// recipient=[phone number]&
// apikey=[your apikey]&
// text=[text to send]&
// file=[url of image]
// document=[]     

     
     
$url='https://api.textmebot.com/send.php?';
$url.='recipient='.$phone;     
$url.='&apikey='.$apikey;
$url.='&text='.urlencode($message);     

    if($ch = curl_init($url))
    {
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $html = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        // echo "Output:".$html;  // you can print the output for troubleshooting
        curl_close($ch);
        return (int) $status;
    }
    else
    {
        return false;
    }
     
     
}

function send_wsapp0($message="Test")
{
//     $phone="+49123123123";  // Enter your phone number here
//     $apikey="123456";       // Enter your personal apikey received in step 3 above
    $phone="+593996030568";  // Enter your phone number here
    $apikey="9805201";       // Enter your personal apikey received in step 3 above
     
    $message='Test Message : '. date('H:i:s'); 

    $url='https://api.callmebot.com/whatsapp.php?source=php&phone='.$phone.'&text='.urlencode($message).'&apikey='.$apikey;

    if($ch = curl_init($url))
    {
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $html = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        // echo "Output:".$html;  // you can print the output for troubleshooting
        curl_close($ch);
        return (int) $status;
    }
    else
    {
        return false;
    }
}


function mail_docu($docu,$idnum,$email='')
{
    //  $xtest=1;
     
//      $email_error='soporte@vcrxol.com';
     
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(!empty($email))
     {
          $email=str_replace(' ',',',$email);
          $email=str_replace(';',',',$email);
          $email=str_replace(',,',',',$email);
     }
     
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);
     $docu0=data_maes('docu',$docu);
     $emis0=data_maes('enti',$empr0['empr_ruc']);
     
     $file_server='vcrxol.com';
    $attach1='';
    $attach2='';
    $attach3='';
     
     $tabla=$docu0['docu_tabla'];
     $tabla1=$tabla.'1';
     $tabla2=$tabla.'2';
     
     $sql_docu='';
     $sql_docu.='select * from '.$tabla1.' ';
     $sql_docu.='left join '.$tabla2.' on idnum1=idnum2 ';
     $sql_docu.='left join enti0 on enti=enti_codigo ';
     $sql_docu.='left join docu0 on docu=docu_codigo ';
     $sql_docu =calc_fields($tabla,$sql_docu);
     $sql_docu.='where ifnull(status,"")not in("O","X") ';
//      $sql_docu.='and docu="'.$docu.'" ';
     $sql_docu.='and idnum1="'.$idnum.'" ';
     $sql_docu.='group by idnum1,iddet ';
     $sql_docu.='order by idnum1,iddet ';
     $res_docu=msql_query($sql_docu,$link_data);
     $aso_docu=msql_fetch_assoc($res_docu);
     
     if(mb_stristr2('.OX',$aso_docu['status'])){return;}
     
     $enti0=data_maes('enti',$aso_docu['enti']);
     $vndd0=data_maes('vndd',$aso_docu['vndd']);

     $email_to=$enti0['enti_emailce'];
     if(strlen($email_to)<6)
     if(!mb_stristr2('@',$email_to))
     {$email_to=$enti0['enti_email'];}
     
     $email_cc=$empr0['empr_email'];
     if(empty($email_cc)){$email_cc=$emis0['enti_email'];}
     
     $email_vndd=$vndd0['enti_email'];
     if(empty($email_vndd))
     {
          $iuser0=data_maes('user',$aso_docu['iuser']);
          $email_vndd=$iuser0['user_email'];
     }
     
     if(mb_stristr2('.vtas.clie.guia',$tabla)){$email_cc.=','.$email_vndd;}
     
     $email_bcc='vicore@hotmail.com';
     if(mb_stristr2('.dtec.span',$empr0['empr_codigo']))
     {$email_bcc.=',xavier_myway@hotmail.com';}
     if(substr($enti0['enti_codigo'],0,4)=='9999')
     {$email_bcc='';}
     
     $email_reply=$empr0['empr_email'];
     if(empty($email_reply)){$email_reply=$email_cc;}
     if(empty($email_reply)){$email_reply='celec@vcrxol.com';}
//      -2.503	FREEMAIL_FORGED_REPLYTO	Freemail in Reply-To, but not From
     if(isfreemail($email_reply)){$email_reply='celec@vcrxol.com';}
     
     if(!empty($email)){$email_to=$email;}
     
     if(1==2)
     if(date('Y-m-d')<='2025-05-31')
     {
          if(mb_stristr2($email_to,'hotmail')){$email_to=$email_cc;}
          if(mb_stristr2($email_to,'outlook')){$email_to=$email_cc;}
          
          if(mb_stristr2($email_to,'hotmail')){return;}
          if(mb_stristr2($email_to,'outlook')){return;}

          if(mb_stristr2($email_cc,'hotmail')){$email_cc='';}
          if(mb_stristr2($email_cc,'outlook')){$email_cc='';}

          if(mb_stristr2($email_bcc,'hotmail')){$email_bcc='vicore1976@gmail.com';}
          if(mb_stristr2($email_bcc,'outlook')){$email_bcc='vicore1976@gmail.com';}
          $email_reply='celec@vcrxol.com';
     }
     
     if($xtest==1)
     {
          $email_to='vicore@hotmail.com';
          $email_cc='vicore1976@gmail.com';
          $email_bcc='vicore@hotmail.com';
          $email_reply='celec@vcrxol.com';
     }
     
     
//      $eol=PHP_EOL;
	$eol="\r\n";
	$random_hash = md5(time()); 
     
     $subject=$aso_docu['docu_descri'];
//      if($tabla=='vtas' and substr($docu,0,2)=='FC'){$subject='FACTURA';}
//      if($tabla=='vtas' and substr($docu,0,2)=='NC'){$subject='N/CREDITO';}
//      if($tabla=='guia' and substr($docu,0,2)=='GR'){$subject='GUIA';}
//      if($tabla=='retp' and substr($docu,0,2)=='RP'){$subject='RETENCION';}
     if($tabla=='vtas' and substr($docu,0,2)=='FC'){$subject='Factura';}
     if($tabla=='vtas' and substr($docu,0,2)=='NC'){$subject='N/Credito';}
     if($tabla=='guia' and substr($docu,0,2)=='GR'){$subject='Guia Remi.';}
     if($tabla=='retp' and substr($docu,0,2)=='RP'){$subject='Retencion';}
     $subject.=' ';
     $subject.=$aso_docu['ptoe'].'-'.$aso_docu['numero'];
     $subject.=' ';
     $subject.=alltrim($aso_docu['enti_descri']);
     
     $subject=substr($subject,0,70);
     $subject.=' ';
     $subject.=date('(H:i)');

     
     
     
     // HEADERS     
     {
          $headers='';
          $headers.='From: VCRXOL.COM - '.$empr0['empr_descri'].' <celec@vcrxol.com>'. $eol;
          $headers0=$headers;
          $headers.='List-Unsubscribe: <mailto:unsubscribe@vcrxol.com>'.$eol;     
          if(!empty($email_reply)){$headers.='Reply-To:'.$email_reply.$eol;}
          if(!empty($email_cc)){$headers.='Cc:'.$email_cc.$eol;}
          if(!empty($email_bcc)){$headers.='Bcc:'.$email_bcc.$eol;}
          $headers.= 'Return-Path: Soporte '.$empr0['empr_descri'].' <celec@vcrxol.com>'.$eol;
          if(!empty($email_error)){$headers.='Errors-To:'.$email_error.$eol;}
          $headers.='MIME-Version: 1.0' . $eol;
          $headers.='Content-Type: multipart/mixed; boundary="PHP-mixed-'.$random_hash.'"'.$eol;
          
          $headers=str_replace(':,',':',$headers);
          $headers=str_replace(': ,',':',$headers);
          $headers=str_replace(':',': ',$headers);
          $headers=str_replace('  ',' ',$headers);
          $headers=str_replace('  ',' ',$headers);
          
     }

     // MESSAGE
     {
//           $url_docu='https://'.$empr0['empr_codigo'].'.vcrxol.com/index3.php?scri=info_docu3&prnt=1&mailsend=0&clave='.$aso_docu['claveacc'];
          $url_docu='https://'.$empr0['empr_codigo'].'.vcrxol.com/?scri=info_docu3&prnt=1&mailsend=0&clave='.$aso_docu['claveacc'];
          $html_docu=file_get_contents($url_docu);
//           $url_docu='https://'.$empr0['empr_codigo'].'.vcrxol.com/index3.php?scri=info_docu3&prnt=1&mailsend=1&clave='.$aso_docu['claveacc'];
          $url_docu='https://'.$empr0['empr_codigo'].'.vcrxol.com/?scri=info_docu3&prnt=1&mailsend=1&clave='.$aso_docu['claveacc'];
          $html_docu=file_get_contents($url_docu);
          
//           $text_docu=html2text($html_docu);
          
          $html_docu=str_replace('<a','<span',$html_docu);
          $html_docu=str_replace('</a','</span',$html_docu);
          $domd=new DOMDocument;
          $domd->loadHTML($html_docu);
          
          $ele_main=$domd->getElementById('main1');
          $ele_body=$domd->getElementById('main_body');
          
          $html_docu = $domd->saveHTML($ele_main);
          $text_docu = $domd->saveHTML($ele_body);
   
          
          
     }
          
     // HTML   
     {
          $url_html='https://vcrxol.com/'.$empr0['empr_codigo'].'/-docu/'.$aso_docu['claveacc'].'.html';
          $file_html=file_get_contents($url_html);
          $file_html=str_replace('<a','<span',$file_html);
          $file_html=str_replace('</a','</span',$file_html);
          $attach1=chunk_split(base64_encode($file_html));
     }
     
     // PDF
     if(substr($aso_docu['enti'],0,2)!='99')
     if(mb_stristr2('.vtas.retp.guia.clie.prov',$tabla))
     {
          file_get_contents('https://'.$file_server.'/_lib/crea_html2pdf.php?desti=3&empr='.strtolower($empr0['empr_codigo']).'&clave='.$aso_docu['claveacc'].'');
          $url_pdf='https://'.$file_server.'/'.$empr0['empr_codigo'].'/-docu/'.$aso_docu['claveacc'].'.pdf';
          $attach2=chunk_split(base64_encode(file_get_contents($url_pdf)));
     }
	
     // XML
     if(mb_stristr2('.vtas.retp.guia.clie.prov',$tabla))
     {
          $url_xml='https://'.$file_server.'/_cele/'.date('Ymd',strtotime($aso_docu['fecha'])).'/'.$aso_docu['claveacc'].'.xml';
          $str_xml=file_get_contents($url_xml);
          if(empty($str_xml))
          {
               $url_xml='https://'.$file_server.'/_cele/'.date('Ymd',strtotime($aso_docu['fecha'])).'/'.$aso_docu['claveacc'].'.sign.xml';
               $str_xml=file_get_contents($url_xml);
          }
          $attach3=chunk_split(base64_encode($str_xml));
     }


     $message='';
     $message.='--PHP-mixed-'.$random_hash.$eol;
     $message.='Content-Type: multipart/alternative; boundary="PHP-alternative-'.$random_hash.'"'.$eol;
     $message.=$eol;
     $message.='--PHP-alternative-'.$random_hash.$eol;
     
     // message text
     $text_docu='';
//      $text_docu=html2text($text_docu);
     if(!empty($text_docu))
     {
          $message.='--PHP-alternative-'.$random_hash.$eol;
          $message.='Content-Type: text/plain; charset="iso-8859-1"'.$eol; 
          $message.='Content-Transfer-Encoding: 7bit'.$eol; 
          $message.= $text_docu.$eol;  
          $message.=$eol;
     }
     
     // message html
     {
          $message.='--PHP-alternative-'.$random_hash.$eol;
          $message.='Content-Type: text/html; charset="iso-8859-1"'.$eol; 
          $message.='Content-Transfer-Encoding: 7bit'.$eol; 
          $message.= $html_docu.$eol;  
          $message.=$eol;
     }
     
     $message.='--PHP-alternative-'.$random_hash.'--'.$eol;
     $message.=$eol;
     
     
     
     
     
     
	if($attach1!='')
	{
          $message.='--PHP-mixed-'.$random_hash.$eol;   
          $message.='Content-Type: text/html;'.'name="'.$aso_docu['claveacc'].'.html"'.$eol; 
          $message.='Content-Transfer-Encoding: base64'.$eol; 
          $message.='Content-Disposition: attachment;'.$eol;  
          $message.= $eol; 
          $message.= $attach1.$eol;  
	}	
     
    // if(1==2) 
	if($attach2!='')
	{
          $message.='--PHP-mixed-'.$random_hash.$eol;   
          $message.='Content-Type: application/pdf;'.'name="'.$aso_docu['claveacc'].'.pdf"'.$eol; 
          $message.='Content-Transfer-Encoding: base64'.$eol; 
          $message.='Content-Disposition: attachment;'.$eol;  
          $message.= $eol; 
          $message.= $attach2.$eol;  
	}	
     
	if($attach3!='')
	{
          $message.='--PHP-mixed-'.$random_hash.$eol;   
          $message.='Content-Type: application/xml;'.'name="'.$aso_docu['claveacc'].'.xml"'.$eol; 
          $message.='Content-Transfer-Encoding: base64'.$eol; 
          $message.='Content-Disposition: attachment;'.$eol;  
          $message.= $eol; 
          $message.= $attach3.$eol;  
	}	
     
//      $message.='--PHP-mixed-'.$random_hash.$eol;   
     $mess_ok=1;
     
//      $attach1='';
//      $attach2='';
//      $attach3='';f
     
//      if(
//         strlen($subject)<15 
//         or mb_stristr2($message,'ERROR : (') 
//         or mb_stristr2($message,'*** Nuev')
//        )
//      {
//           $mess_ok=0; 
//           $subject='*** ERROR *** '.$subject;
//           $email_to='vicore@hotmail.com';
//      }
     
//      if(){$mess_ok=0; $subject='*** ERROR *** '.$subject;}
//      if(strlen($subject)<15){$mess_ok=0; $subject='*** ERROR *** '.$subject;}
     
//      if($mess_ok==0)
//      {mail('vicore@hotmail.com', $subject, $message, $headers0);}

//      file_put_contents('_mail_head_3.txt',$headers);
//      file_put_contents('_mail_mess_3.txt',$message);
//      $email_to='vicore1976@gmail.com ';



     if($mess_ok==1)
     {$mail_ok=mail($email_to,$subject,$message,$headers);}
     
     if(empty($xtest))
     if($mail_ok==1)
     {
          $sql_updt='update '.$tabla1.' set emailfec=now() ';
          $sql_updt.='where ifnull(status,"")not in("X") ';
          $sql_updt.='and idnum1="'.$idnum.'" ';
          $res_updt=msql_query($sql_updt,$link_data);
     }
     
     return $mail_ok;
}




function vali_enti($codigo)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);

     $tabla='enti';
     $codigo10=substr($codigo,0,10);
     $codigo11=substr($codigo,0,10).'%';
     $codigo13=substr($codigo,0,10).'001';
     
     $enti10=data_maes('enti',$codigo10);
     $enti13=data_maes('enti',$codigo13);
     
     if(empty($enti13['enti_descri']) or empty($enti13['enti_actividad']))
     {
          $ruczip=ruc_zip($codigo13);
          if(gettype($ruczip)=='object')
          {
               $rucstr=$ruczip->getElementsByTagName('ruczip')->item(0)->nodeValue;
               $descri=$ruczip->getElementsByTagName('RAZON_SOCIAL')->item(0)->nodeValue;
               $razsoc=$ruczip->getElementsByTagName('RAZON_SOCIAL')->item(0)->nodeValue;
               $nomcom=$ruczip->getElementsByTagName('NOMBRE_COMERCIAL')->item(0)->nodeValue;
               $nomcom2=$ruczip->getElementsByTagName('NOMBRE_FANTASIA_COMERCIAL')->item(0)->nodeValue;
               $struc=$ruczip->getElementsByTagName('ESTADO_CONTRIBUYENTE')->item(0)->nodeValue;
               $obcon=$ruczip->getElementsByTagName('OBLIGADO')->item(0)->nodeValue;
               $tiporuc=$ruczip->getElementsByTagName('TIPO_CONTRIBUYENTE')->item(0)->nodeValue;
               $fechaini=$ruczip->getElementsByTagName('FECHA_INICIO_ACTIVIDADES')->item(0)->nodeValue;
               $provincia=$ruczip->getElementsByTagName('DESCRIPCION_PROVINCIA')->item(0)->nodeValue;
               $ciudad=$ruczip->getElementsByTagName('DESCRIPCION_CANTON')->item(0)->nodeValue;
               $parroq=$ruczip->getElementsByTagName('DESCRIPCION_PARROQUIA')->item(0)->nodeValue;
               $sciiu=$ruczip->getElementsByTagName('CODIGO_CIIU')->item(0)->nodeValue;
               $actividad=$ruczip->getElementsByTagName('ACTIVIDAD_ECONOMICA')->item(0)->nodeValue;
               if(empty($nomcom)){$nomcom=$nomcom2;}
               if(empty($nomcom)){$nomcom=$razsoc;}


               if(mb_stristr2($rucstr,$codigo)){inse_maes($tabla,$codigo13,$descri);}

               if(!empty($descri)){updt_maes($tabla,$codigo11,'descri',$razsoc);}
               if(!empty($razsoc)){updt_maes($tabla,$codigo11,'razsoc',$razsoc);}
               if(!empty($nomcom)){updt_maes($tabla,$codigo11,'nomcom',$nomcom);}
               updt_maes($tabla,$codigo11,'obcon',$obcon);
               updt_maes($tabla,$codigo11,'fechaini',$fechaini);
               updt_maes($tabla,$codigo11,'provincia',$provincia);
               updt_maes($tabla,$codigo11,'ciudad',$ciudad);
               updt_maes($tabla,$codigo11,'parroq',$parroq);
               updt_maes($tabla,$codigo11,'actividad',$actividad);
               updt_maes($tabla,$codigo11,'ciiu',$ciiu);
               if($ruc_tipo=='N')
               {
                    $names=split_name($descri);
                    updt_maes($tabla,$codigo11,'nom1',$names['nom1']);
                    updt_maes($tabla,$codigo11,'nom2',$names['nom2']);
                    updt_maes($tabla,$codigo11,'ape1',$names['ape1']);
                    updt_maes($tabla,$codigo11,'ape2',$names['ape2']);
               }
          }
          $enti13=data_maes('enti',$codigo13);
     }     
     
//      echo $rucsearch1->saveXML();
     if(empty($enti13['enti_descri']))
     {
          $rucsearch1=ruc_search1($codigo13);
          if(gettype($rucsearch1)=='object')
          {
               $razsoc=$rucsearch1->getElementsByTagName('razsoc')->item(0)->nodeValue;
               $nomcom=$rucsearch1->getElementsByTagName('nomcom')->item(0)->nodeValue;
               if(!empty($razsoc)){updt_maes($tabla,$codigo11,'descri',$razsoc);}
               if(!empty($razsoc)){updt_maes($tabla,$codigo11,'razsoc',$razsoc);}
               if(!empty($nomcom)){updt_maes($tabla,$codigo13,'nomcom',$nomcom);}
          }
     }
     
     if(empty($enti10['enti_descri']))
     {
          $nombre_ant=get_ced_ant($codigo10);
          if(!empty($nombre_ant))
          {
               $names=split_name($nombre_ant);
               updt_maes($tabla,$codigo10,'descri',$nombre_ant);
               updt_maes($tabla,$codigo10,'razsoc',$nombre_ant);
               updt_maes($tabla,$codigo10,'nomcom',$nombre_ant);
               updt_maes($tabla,$codigo11,'nom1',$names['nom1']);
               updt_maes($tabla,$codigo11,'nom2',$names['nom2']);
               updt_maes($tabla,$codigo11,'ape1',$names['ape1']);
               updt_maes($tabla,$codigo11,'ape2',$names['ape2']);
          }
          $enti10=data_maes('enti',$codigo10);
     }     
     
     if(empty($enti10['enti_descri']))
     {
          $nombre_atm=get_ced_atm($codigo10);
          if(!empty($nombre_atm))
          {
               $names=split_name($nombre_atm);
               updt_maes($tabla,$codigo10,'descri',$nombre_atm);
               updt_maes($tabla,$codigo10,'razsoc',$nombre_atm);
               updt_maes($tabla,$codigo10,'nomcom',$nombre_atm);
               updt_maes($tabla,$codigo11,'nom1',$names['nom1']);
               updt_maes($tabla,$codigo11,'nom2',$names['nom2']);
               updt_maes($tabla,$codigo11,'ape1',$names['ape1']);
               updt_maes($tabla,$codigo11,'ape2',$names['ape2']);
          }
     }
     
     if(empty($enti10['enti_sexo']))
     {vali_sexo($codigo10);}
     
}


function vali_cntn($codigo)
{
     $codigo=str_replace('-','',$codigo);
     if(mb_stristr2('.UJZ',substr($codigo,3,1)))
     {
          for ($idx= 0; $idx < 10; $idx++)
          { 
               $xchar=substr($codigo,$idx,1);
               if(mb_stristr2('.A',$xchar)){$xval=ord($xchar)-55;}
               if(mb_stristr2('.BCDEFGHIJK',$xchar)){$xval=ord($xchar)-54;}
               if(mb_stristr2('.LMNOPQRSTU',$xchar)){$xval=ord($xchar)-53;}
               if(mb_stristr2('.VWXYZ',$xchar)){$xval=ord($xchar)-52;}
               if(mb_stristr2('.0123456789',$xchar)){$xval=intval($xchar);}
               $xsum = $xsum + $xval * pow(2, $idx);
          }
          $xcheck = floor($xsum - floor($xsum / 11) * 11);
          if ($xcheck==substr($codigo,-1))
          {
//                inse_maes('cntn',$codigo);
               return true;
          }
     }
     return false;
}



function acce_docu($user_codigo)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);
     
     $sql_acce='select * from acce1 left join acce2 on idnum1=idnum2 where numero='.$user_codigo.' ';
     $res_acce=msql_query($sql_acce,$link_data);
     
     
     
}


function porc_varia($val_ini,$val_fin=0)
{
//      if($val_ini==0){$val_ini=$val_fin;}
//      if($val_ini==0){$val_ini=1;}
     if($val_ini==0){$porc=0;}
     
     if($val_ini!=0)
     {$porc=($val_fin-$val_ini)/$val_ini*100;}
     
     return $porc;
}

function set_varsession()
{
     var_session('sdom');
     var_session('user_codigo');
}

function var_session($varses)
{if(!isset($_SESSION[$varses])){$_SESSION[$varses]='';}}



function add_unicode($string)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);
//      echo '*/*/*/'.$_SESSION['empr_codigo'];
     
//      $string=str_replace('#','№ ',$string);
     $xstring=strtolower($string);

//      ☑✅⍻📍🗺 📑🗺️🖥️⚙️📝🎛️🛐
     
     if($xstring=='código'){$string='🆔'.$string;}
     if($xstring=='valor $'){$string='valor 💲';}
     if($xstring=='numero'){$string='№ ';}
     if($xstring=='factura'){$string='№ '.$string;}
//      if($xstring=='congregación'){$string='🛐 '.$string;}
     if($xstring=='procesar'){$string='🖥️ '.$string;}
     if($xstring=='proceso'){$string='🖥️ '.$string;}
     if($xstring=='editar'){$string='✏️ '.$string;}
     if($xstring=='documento'){$string='📝 '.$string;}
     if($xstring=='docum.'){$string='📃 '.$string;}
     if($xstring=='territorio'){$string='🗺️ '.$string;}
     if($xstring=='mz.bl.'){$string='🏘️ '.$string;}
     if($xstring=='mz.'){$string='🏘️ '.$string;}
     if($xstring=='bloq.'){$string='🏘️ '.$string;}
     if($xstring=='villa'){$string='🏠 '.$string;}
     if($xstring=='piso'){$string='🏢 '.$string;}
     if($xstring=='dpto'){$string='🚪 '.$string;}
//      if($xstring=='usuario'){$string='👤 '.$string;}
     if(strtolower(substr($string,0,7))=='pto.emi'){$st🚪ing='🅿 '.$string;}
     if(strtolower(substr($string,0,7))=='pto.vta'){$string='🅿 '.$string;}

//      🔎📑🖼️
     
     if($xstring=='informe'){$string='📚 '.$string;}
     if($xstring=='módulo'){$string='🗃️ '.$string;}
//      if($xstring=='módulo'){$string='📇 '.$string;}
     
//      if($xstring=='consultar'){$string='🔎 '.$string;}
     
//      if($xstring=='ordernar x'){$string='↕️ '.$string;}
     if($xstring=='direccion'){$string='🛣️ '.$string;}
     if($xstring=='dirección'){$string='🛣️ '.$string;}
     if(strtolower(substr($string,0,5))=='calle'){$string='🏠 '.$string;}
     if($xstring=='matriz'){$string='🏢 '.$string;}
     if($xstring=='cliente'){$string='👤 '.$string;}
     if($xstring=='cedula'){$string='🪪 '.$string;}
     if($xstring=='cédula'){$string='🪪 '.$string;}
     if($xstring=='doctor'){$string='🧑🏻‍⚕️ '.$string;}
     if($xstring=='medico'){$string='🧑🏻‍⚕️ '.$string;}
     if($xstring=='médico'){$string='🧑🏻‍⚕️ '.$string;}
     if($xstring=='medicina'){$string='💊 '.$string;}
     if($xstring=='medicamento'){$string='💊 '.$string;}
     
     
     
     if($xstring=='solicita'){$string='👤 '.$string;}
     if($xstring=='proveedor'){$string='🏭 '.$string;}
//      🧑🏻‍✈️
     if($xstring=='conductor'){$string='✇ '.$string;}
//   💼🗣
     if($xstring=='asignado'){$string='👤 '.$string;}
     if($xstring=='publicador'){$string='🗣️ '.$string;}
     if($xstring=='vendedor'){$string='💼 '.$string;}
     if($xstring=='recaudador'){$string='💼 '.$string;}
     if($xstring=='empleado'){$string='👷 '.$string;}
     if($xstring=='usuario'){$string='👤 '.$string;}
     if($xstring=='paciente' and $empr0['empr_clinica']==1){$string='🤒 '.$string;}
//      if($xstring=='paciente' and $empr0['empr_veterinaria']==1){$string='🐶🐾 '.$string;}
//      if($xstring=='paciente' and $empr0['empr_veterinaria']==1){$string='🐾 '.$string;}
     if($xstring=='paciente' and $empr0['empr_veterinaria']==1){$string='🐾 '.'Mascota';}
     if($xstring=='mascota'){$string='🐶 '.$string;}
//      if($xstring=='garage'){$string='&#xE206;'.$string;}
//      &#57862;
     

//🌡 💓💗👃📏🫀🏠🏢☎💵👃🖼️📷📦⌨️
     if($xstring=='aaaaaaa'){$string=' '.$string;}
     
     if(strtolower(substr($string,0,4))=='temp'){$string='🤒 '.$string;}
     if($xstring=='edad'){$string='⏳ '.$string;}
     if($xstring=='temperatura'){$string='🤒 '.$string;}
//      if($xstring=='talla'){$string='📏 '.$string;}
     if(strtolower(substr($xstring,-3))=='cm.'){$string='📏 '.$string;}
     if($xstring=='peso'){$string='⚖️ '.$string;}
//      if(mb_stristr2($xstring,'talla')){$string='📏 '.$string;}
     if(mb_stristr2($xstring,'texto')){$string='⌨️ '.$string;}
     if(mb_stristr2($xstring,'stock')){$string='📦 '.$string;}
     if(mb_stristr2($xstring,'foto')){$string='🖼️ '.$string;}
     if(mb_stristr2($xstring,'peso')){$string='⚖️ '.$string;}
     if(mb_stristr2($xstring,'f.cardi')){$string='💓 '.$string;}
     if(mb_stristr2($xstring,'pulso')){$string='💓 '.$string;}
//      if(mb_stristr2($xstring,'cardia')){$string='💓 '.$string;}
     if(mb_stristr2($xstring,'presión')){$string='💗 '.$string;}
     if(mb_stristr2($xstring,'sistó')){$string='💗 '.$string;}
     if(mb_stristr2($xstring,'diastó')){$string='💗 '.$string;}
//      if(mb_stristr2($xstring,'respira') and $empr0['empr_clinica']==1){$string='👃 '.$string;}
//      if(mb_stristr2($xstring,'respira') and $empr0['empr_veterinaria']==1){$string='🐽 '.$string;}
     if(mb_stristr2($xstring,'f.respira') and $empr0['empr_clinica']==1){$string='👃 '.$string;}
     if(mb_stristr2($xstring,'f.respira') and $empr0['empr_veterinaria']==1){$string='🐽 '.$string;}
     
     if($xstring=='id.exterior'){$string='🔢 '.$string;}
     if($xstring=='pasaporte'){$string='🛂 '.$string;}
     
     
     
     if($xstring=='pais'){$string='🌎 '.$string;}
     if($xstring=='país'){$string='🌎 '.$string;}
     if($xstring=='color'){$string='🎨 '.$string;}
     if($xstring=='sangre'){$string='🩸 '.$string;}
     if($xstring=='sexo'){$string='⚤ '.$string;}
     if($xstring=='celular'){$string='📱 '.$string;}
     if($xstring=='teléfono'){$string='☎️ '.$string;}
     if($xstring=='wsapp'){$string='✆ '.$string;}
     if($xstring=='e-mail'){$string='@ '.$string;}
     if($xstring=='email'){$string='@ '.$string;}
     if($xstring=='e-mail ce'){$string='📧 '.$string;}
     if($xstring=='email ce'){$string='📧 '.$string;}
     if($xstring=='vehículo'){$string='🚘 '.$string;}
     if($xstring=='vehiculo'){$string='🚘 '.'vehículo';}
     if($xstring=='placa'){$string='🚘 '.$string;}
     if($xstring=='vhcl'){$string='🚘 '.$string;}
     if($xstring=='plvh'){$string='🚘 '.$string;}

     
     if(substr($xstring,0,5)=='cta.b'){$string='🏦 '.$string;}
     if(substr($xstring,0,5)=='impor'){$string='🚢 '.$string;}
     if(substr($xstring,0,5)=='expor'){$string='🚢 '.$string;}
     if(substr($xstring,0,5)=='venta'){$string='💵 '.$string;}
     if(substr($xstring,0,5)=='contab'){$string='📗 '.$string;}
     if(substr($xstring,0,5)=='produ'){$string='🏭 '.$string;}
     if(substr($xstring,0,5)=='orden'){$string='🔃 '.$string;}
     
     if(mb_stristr2($xstring,'cxc')){$string='📘 '.$string;}
     if(mb_stristr2($xstring,'cxp')){$string='📕 '.$string;}
//      if(substr($xstring,0,5)=='nómin'){$string='👥 '.$string;}
     
//      if($xstring=='t.pago'){$string='💸 '.$string;}
     if($xstring=='status'){$string='🔘 '.$string;}
     if($xstring=='concepto'){$string='⌨️ '.$string;}
     if($xstring=='detalle'){$string='⌨️ '.$string;}
     if($xstring=='notas'){$string='⌨️ '.$string;}
     // if($xstring=='item'){$string='⑉ '.$string;}
     if($xstring=='item'){$string='📦 '.$string;}
     if($xstring=='producto'){$string='📦 '.$string;}
     if($xstring=='p.unit'){$string='🏷️ '.$string;}
//      if($xstring=='dcto'){$string='🔖 '.$string;}
     if($xstring=='cantidad'){$string='#️⃣ '.$string;}
     if($xstring=='cant.'){$string='#️⃣ '.$string;}
     
//      🍽️
     if($xstring=='caja'){$string='💰 '.$string;}
     if($xstring=='banco'){$string='🏦 '.$string;}
     if($xstring=='bancos'){$string='🏦 '.$string;}
     if($xstring=='taxi'){$string='🚕 '.$string;}
     if($xstring=='restaurante'){$string='🍴 '.$string;}
     if($xstring=='garage'){$string='🅿 '.$string;}
     if($xstring=='automotriz'){$string='🚗 '.$string;}
     if($xstring=='veterinaria'){$string='🐶 '.$string;}
     if($xstring=='nómina'){$string='👥 '.$string;}
     if($xstring=='clínica'){$string='🏥 '.$string;}
     if($xstring=='farmacia'){$string='🏪 '.$string;}
     if($xstring=='bodega'){$string='🏬 '.$string;}
     if($xstring=='inventario'){$string='🗃️ '.$string;}
     if($xstring=='catálogo'){$string='📒 '.$string;}
     if($xstring=='marca'){$string='® '.$string;}
     if($xstring=='carrito'){$string='🛒 '.$string;}
     if($xstring=='taller'){$string='🧰 '.$string;}
//      if($xstring=='bodega'){$string='🅱 '.$string;}📒👥🅿🏗🛒
     
     
     return $string;
}

function set_commas($string)
{
     while(mb_stristr2($string,'  ')){$string=str_replace('  ',' ',$string);}
     $string=str_replace(', ',',',$string);
     $string=str_replace('; ',';',$string);
     $string=str_replace(' ,',',',$string);
     $string=str_replace(' ;',';',$string);
     $string=str_replace(',',', ',$string);
     $string=str_replace(';','; ',$string);
     return $string;      
}     
     
function set_config($empr)
{
     if(empty($empr)){$empr=$_SESSION['empr_codigo'];}     
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $config=[];
     $config['dias_anul']=90;
     $config['dias_elim']=90;
     $config['dias_edit']=90;
     
//      $config['pyme']=1;
     
//      if($empr=='demo')
//      {
//           $config['carr']=1;
//           $config['ptovta']=1;
//           $config['taxi']=1;
//           $config['farmacia']=1;
//           $config['clinica']=1;
//           $config['automotriz']=1;
//      }
     
//      if(mb_stristr2('.orel.gmny.gnya.imcp',$empr))
//      {
//           $config['carr']=1;
//      }
     
//      if(mb_stristr2('.taxi',$empr))
//      {
//           $config['taxi']=1;
//      }
     
//      if(mb_stristr2('.hg01',$empr))
//      {
//           $config['farmacia']=1;
//           $config['ptovta']=1;
//      }
     
//      if(mb_stristr2('.anml',$empr))
//      {
//           $config['veterinaria']=1;
//      }
     
//      if(mb_stristr2('.tgck.sawo',$empr))
//      {
//           $config['automotriz']=1;
//      }
     
//      if(mb_stristr2('.dtje',$empr))
//      {
//           $config['clinica']=1;
//      }
     
     
     return $config;
}

function dele_dec0($value)
{
//      if(substr($value,-1)=='0' and )
     return $value;     
}

function max_puni()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_puni='select max(round(item_puni1,0)) as puni, item_dpre as dpre from item0 where item_codigo not like "99%" ';
     $res_puni=msql_query($sql_puni,$link_data);
     
//      $sql_puni='select item_puni1-truncate(item_puni1,0) as puni from (';
//      $sql_puni.='select item_puni1 from item0 where item_codigo not like "99%" and item_puni1>0 ';
//      $sql_puni.='union select item_puni2 from item0 where item_codigo not like "99%" and item_puni2>0 ';
//      $sql_puni.='union select item_puni3 from item0 where item_codigo not like "99%" and item_puni3>0 ';
//      $sql_puni.='union select item_puni4 from item0 where item_codigo not like "99%" and item_puni4>0 ';
//      $sql_puni.='union select item_puni5 from item0 where item_codigo not like "99%" and item_puni5>0 ';
//      $sql_puni.=') as puni0 ';
//      $sql_puni.='where item_puni1<10 ';
//      $sql_puni.='order by item_puni1 desc';
//      $res_puni=msql_query($sql_puni,$link_data);
//      while($aso_puni=msql_fetch_assoc($res_puni))
//      {
//      }

     $max_puni=msql_result($res_puni,0,'puni');
     return $max_puni;
     $max_puni=9999;
     $m_puni=msql_result($res_puni,0,'puni');
     $d_prec=msql_result($res_puni,0,'dpre');
     if($m_puni>=10)
     {
          $m_puni=round($m_puni,2);
          $max_puni=str_repeat('9',strlen($m_puni));   
     }
     else
     {
          $m_puni=round($m_puni,$d_prec);
          $max_puni=str_repeat('9',strlen($m_puni));   
     }
//      if($max_puni<=9999){$max_puni=9999;}
//      echo '*/*/'.$max_puni;
     return $max_puni;
     
}

function new_numero($_PARAMS)
{
     foreach($_PARAMS as $key => $value){${$key}=trim($value);} 
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $empr0=data_maes('empr',$cfg_empr);
     $docu0=data_maes('docu',$docu);
     $user0=data_maes('user',$_SESSION['user_codigo']);
     $tabla=$docu0['docu_tabla'];
     $tabla1=$tabla.'1';
     $new_numero=0;
     
     if(empty($ptoe)){$ptoe='001001';}
     
     if($tabla=='caja'){$caja0=data_maes('caja',$caja);}
     if($tabla=='bcos'){$ctab0=data_maes('ctab',$ctab);}
     if($tabla=='inve'){$bode0=data_maes('bode',$bode);}
     if($tabla=='infi'){$bode0=data_maes('bode',$bode);}
     
     if(!empty($plvh))
     if($tabla=='inve'){$plvh0=data_maes('plvh',$plvh);}
 
     $fecha_rst='2022-01-01';
     // FECHAS RANGOS
     if(1==2)
     {
          $fecha_w1=date('Y-m-d',strtotime('-1 week'));
          $fecha_w2=date('Y-m-d',strtotime('-2 week'));
          $fecha_w3=date('Y-m-d',strtotime('-3 week'));
          $fecha_w4=date('Y-m-d',strtotime('-4 week'));

          $fecha_m1=date('Y-m-01',strtotime('-1 month'));
          $fecha_m2=date('Y-m-01',strtotime('-2 month'));
          $fecha_m3=date('Y-m-01',strtotime('-3 month'));
          $fecha_m4=date('Y-m-01',strtotime('-4 month'));
          $fecha_m5=date('Y-m-01',strtotime('-5 month'));
          $fecha_m6=date('Y-m-01',strtotime('-6 month'));

          $fecha_y1=date('Y-01-01',strtotime('-12 month'));
          $fecha_y2=date('Y-01-01',strtotime('-24 month'));
          $fecha_y3=date('Y-01-01',strtotime('-36 month'));
          $fecha_y4=date('Y-01-01',strtotime('-48 month'));
          $fecha_y5=date('Y-01-01',strtotime('-60 month'));
          $fecha_y6=date('Y-01-01',strtotime('-72 month'));
          
     }
     
     $sql_nume ='select * from '.$tabla1.' ';
//      $sql_nume.='where ifnull(status,"") not in("X") ';
     $sql_nume.='where status!="X" ';
     $sql_nume.='and docu like "'.$docu.'" ';
     $sql_nume.='and (numero*1)>0 ';
     $sql_nume.='and ifnull(fecha,"")!="" ';
     $sql_nume.='and fecha>="'.$fecha_rst.'" ';
//      $sql_nume.='and fecha>="'.$fecha_y6.'" ';
//      $sql_nume.='and fecha>="'.date('Y-m-01',strtotime('-36 month')).'" ';

     // FECHA DESDE
     {
//           $fecha_docu=date('Y-m-01',strtotime('-2 weeks'));
          $fecha_docu=date('Y-m-01',strtotime('-1 month'));
//           if($docu=='CC10'){$fecha_docu=$fecha_y3;}
//           if($tabla=='cont'){$fecha_docu=$fecha_m6;}
//           if($tabla=='retp'){$fecha_docu=$fecha_m1;}

//           if(mb_stristr2('.vtas.clie.carr',$tabla)){$sql_nume.='and fecha>="'.$fecha_docu.'" ';}
//           if($tabla=='comp'){$fecha_docu=$fecha_w2;}
//           if($tabla=='retp'){$fecha_docu=$fecha_m3.'" ';}
//           if($tabla=='cont'){$fecha_docu=$fecha_m6.'" ';}
          
//           if($tabla=='nomi'){$sql_nume.='and fecha="'.$fecha.'" ';}
          
//           if($docu=='CC10'){$fecha_docu=$fecha_y3;}

//           {$sql_nume.='and fecha>="'.$fecha_docu.'" ';}
          {$sql_nume.='and idate>="'.$fecha_docu.'" ';}
     }

     // PUNTOS DE EMISION
     {
          
          if(mb_stristr2('.vtas.clie.carr',$tabla)){$sql_nume.='and ptov="'.$ptov.'" ';}
          if(mb_stristr2('.comp.prov',$tabla)){$sql_nume.='and ptoe="'.$ptoe.'" ';}
          if(mb_stristr2('.retc.retp',$tabla)){$sql_nume.='and ptoe="'.$ptoe.'" ';}
          if(mb_stristr2('.btcr.avso',$tabla)){$sql_nume.='and ptoe="'.$ptoe.'" ';}
          if(mb_stristr2('.inve.infi',$tabla)){$sql_nume.='and bode="'.$bode.'" ';}

          if($tabla=='caja'){$sql_nume.='and caja="'.$caja.'" ';}
          if($tabla=='bcos'){$sql_nume.='and ctab="'.$ctab.'" ';}
          
          
     }

     // ESPECIALES 
     {
          if(mb_stristr2('.vtas.clie.carr',$tabla)){$sql_nume.='and (numero*1)<100000 ';}
          if(mb_stristr2('.vtas.clie.carr',$tabla) and $empr0['empr_ceuser']==1){$sql_nume.='and vndd like "'.trim($user0['user_cedula']).'%" ';}
          
          if($docu=='FP10'){$sql_nume.='and left(enti,10) like "'.substr($enti,0,10).'%"';}
          if($tabla=='rmed'){$sql_nume.='and mdco like "'.trim($user0['user_cedula']).'%" ';}
          
     }
     
     // IMCP
     {if($empr0['empr_codigo']=='imcp' and $tabla=='vtas' and $ptov=='003102'){$sql_nume.='and fecha>="2024-11-15" ';}}
     
     $xorder='order by numero desc ';
//      $xorder='order by idate,numero desc ';
     $sql_nume.=$xorder;
     
     $sql_nume.='limit 5 ';
     $res_nume=@msql_query($sql_nume,$link_data);
     
     if(msql_num_rows($res_nume)==0)
     for($idx=2; $idx<=(12*3); $idx++)
     {
          $sql_nume=str_replace($fecha_docu,date('Y-m-01',strtotime('-'.$idx.' month')),$sql_nume);
          $res_nume=@msql_query($sql_nume,$link_data);
//           if(msql_num_rows($res_nume)!=0){break;}
          if(msql_num_rows($res_nume)>=2){break;}
          $fecha_docu=date('Y-m-01',strtotime('-'.$idx.' month'));
//                echo ' ======> '.$idx.' ==== '.$sql_nume;

     }
     
//      echo '======>>>>>>>>>>>>>> '.$idx.' ==== '.$sql_nume;

//      return;
//      if(msql_num_rows($res_nume)==0)
//      {
//           $fecha_docu=date('Y-m-01',strtotime('-2 week'));
//           $sql_nume=str_replace($fecha_docu,date('Y-m-01',strtotime('-3 month')),$sql_nume);
//           $res_nume=@msql_query($sql_nume,$link_data);
//      }
     
//      if(msql_num_rows($res_nume)==0)
//      {
//           $fecha_docu=date('Y-m-01',strtotime('-3 month'));
//           $sql_nume=str_replace($fecha_docu,date('Y-m-01',strtotime('-6 month')),$sql_nume);
//           $res_nume=@msql_query($sql_nume,$link_data);
//      }
     
//      if(msql_num_rows($res_nume)==0)
//      {
//           $fecha_docu=date('Y-m-01',strtotime('-6 month'));
//           $sql_nume=str_replace($fecha_docu,date('Y-m-01',strtotime('-12 month')),$sql_nume);
//           $res_nume=@msql_query($sql_nume,$link_data);
//      }
     
//      if(msql_num_rows($res_nume)==0)
//      {
//           $fecha_docu=date('Y-m-01',strtotime('-12 month'));
//           $sql_nume=str_replace($fecha_docu,date('Y-m-01',strtotime('-18 month')),$sql_nume);
//           $res_nume=@msql_query($sql_nume,$link_data);
//      }
     
//      if(msql_num_rows($res_nume)==0)
//      {
//           $fecha_docu=date('Y-m-01',strtotime('-18 month'));
//           $sql_nume=str_replace($fecha_docu,date('Y-m-01',strtotime('-24 month')),$sql_nume);
//           $res_nume=@msql_query($sql_nume,$link_data);
//      }
     
//      if(msql_num_rows($res_nume)==0)
//      {
//           $fecha_docu=date('Y-m-01',strtotime('-24 month'));
//           $sql_nume=str_replace($fecha_docu,date('Y-m-01',strtotime('-36 month')),$sql_nume);
//           $res_nume=@msql_query($sql_nume,$link_data);
//      }
     
     $new_numero=msql_result($res_nume,0,'numero');
     if(empty($new_numero)){$new_numero=0;}
     $new_numero++;
     $new_numero=str_pad($new_numero,9,'0',STR_PAD_LEFT);
     return $new_numero;
}     

function siglas($string)
{
     if(gettype($string)!='string'){return;}
     
     $string=trim($string);
     
     for($idx=97; $idx<=122; $idx++)
     {
          $string=str_replace('.'.chr($idx).'.','.'.chr($idx-32).'.',$string);
          $string=str_replace('. '.chr($idx).'.','. '.chr($idx-32).'.',$string);
          $string=str_replace(chr($idx).'&',chr($idx-32).'&',$string);
          $string=str_replace('&'.chr($idx),'&'.chr($idx-32),$string);
     }

     return $string;
}     

function abrevia($string)
{
     if(gettype($string)!='string'){return;}
     
     $string=trim($string);
          
//      if($cfg_empr=='hfre')
     if($_SESSION['empr_codigo']=='hfre')
     {
     $string=str_replace('SE RECIBE','RECEP.',$string);
     $string=str_replace('SE ENVIA','ENVIO',$string);
     $string=str_replace('SE TRANSFIERE','TRANSF.',$string);
     }

     if(strlen($string)<=15){return $string;}

     $string=str_replace(',',', ',$string);
     $string=str_replace(',  ',', ',$string);
     
     
//      $string=str_replace(' DE ',' D\' ',$string);
     $string=str_replace(' DE ',' D. ',$string);
     
     $string=str_replace('AUDIOVISUAL','AUD.VIS.',$string);
     $string=str_replace('ACCESORIO','ACCE.',$string);
     $string=str_replace('MANTENIMIENTO','MANT.',$string);
     $string=str_replace('INFRAESTRUCTURA','INFRA.',$string);
     
     $string=str_replace('SERVICIO','SERV.',$string);
     
     $string=str_replace('TRANSFIERE','TRANSF.',$string);
     $string=str_replace('TRANSFERENCIA','TRANSF.',$string);
     $string=str_replace('PRODUCCION','PRODUC.',$string);
     $string=str_replace('IMPORTACION','IMPORT.',$string);
     $string=str_replace('EXPORTACION','EXPORT.',$string);
     $string=str_replace('CONSIGNACION','CONSIG.',$string);
     $string=str_replace('DEVOLUCION','DEVOL.',$string);
     $string=str_replace('ALQUILER','ALQUI.',$string);
     $string=str_replace('SOCIEDAD','SOC.',$string);
     
     $string=str_replace('COMPROBANTE','COMPBTE.',$string);
     $string=str_replace('RETENCIONES','RETEN.',$string);
     $string=str_replace('PROVEEDORES','PROVEED.',$string);
     $string=str_replace('PROVEEDOR','PROVEED.',$string);
     $string=str_replace('LIQUIDACION','LIQ.',$string);
     
     $string=str_replace('HACIENDA','HCDA.',$string);
     $string=str_replace('PARA ','P.',$string);
     $string=str_replace('INGRESO','ING.',$string);
     $string=str_replace('EGRESO','EGR.',$string);
     $string=str_replace('SEMANA','SEM.',$string);
     $string=str_replace('FACTURA ','FAC.',$string);
     $string=str_replace('ENVIO','ENV.',$string);
     $string=str_replace('RECEPCION','RECEP.',$string);
     $string=str_replace('MATERIALES','MATERIAL',$string);
     
     $string=str_replace('LUNES','LUN',$string);
     $string=str_replace('MARTES','MAR',$string);
     $string=str_replace('MIERCOLES','MIE',$string);
     $string=str_replace('JUEVES','JUE',$string);
     $string=str_replace('VIERNES','VIE',$string);
     $string=str_replace('SABADO','SAB',$string);
     $string=str_replace('DOMINGO','DOM',$string);
     
     $string=str_replace('ENERO','ENE',$string);
     $string=str_replace('FEBRERO','FEB',$string);
     $string=str_replace('MARZO','MAR',$string);
     $string=str_replace('ABRIL','ABR',$string);
     $string=str_replace('MAYO','MAY',$string);
     $string=str_replace('JUNIO','JUN',$string);
     $string=str_replace('JULIO','JUL',$string);
     $string=str_replace('AGOSTO','AGO',$string);
     $string=str_replace('SEPTIEMBRE','SEP',$string);
     $string=str_replace('OCTUBRE','OCT',$string);
     $string=str_replace('NOVIEMBRE','NOV',$string);
     $string=str_replace('DICIEMBRE','DIC',$string);
     
     return $string;
}

function show_debug($backtrace,$type='html')
{
     $debug='';
     foreach($backtrace as $key1)
     {
          if($type=='html'){$debug.='<br>';}
          if($type=='txt'){$debug.="\n";}
          $debug.=' ==> '.$key1;
          foreach($key1 as $key=>$value)
          {$debug.=' || '.$key.'='.$value;}
     }
     return $debug;
}

function inse_maes($tabla,$codigo,$descri='*** NUEVO ***')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $codigo=trim($codigo);
     $sql_vali ='select * from '.$tabla.'0  where '.$tabla.'_codigo ="'.$codigo.'"';
     $res_vali=msql_query($sql_vali,$link_data);          
     
     if(msql_num_rows($res_vali)==0)
     {
          $sql_inse ='insert into '.$tabla.'0('.$tabla.'_codigo,'.$tabla.'_descri,'.$tabla.'_status,'.$tabla.'_iuser,'.$tabla.'_idate)';
          $sql_inse.='value("'.$codigo.'","'.$descri.'","-","'.$user_codigo.'",now())';
          $res_inse=msql_query($sql_inse,$link_data);          
     }

     if(msql_num_rows($res_vali)!=0)
     {
          if(!empty($descri) and substr($descri,0,3)!='***')
          {
               $sql_updt ='update '.$tabla.'0 set '.$tabla.'_descri="'.$descri.'" where trim('.$tabla.'_codigo)="'.$codigo.'" ';
               $res_updt=msql_query($sql_updt,$link_data);          
               
//                echo '<br>====> '.$sql_updt;
          }
     }     
     
     return;
}     

function updt_maes($tabla,$codigo,$column,$value)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $value=str_replace('"','\"',$value);
     $sql_updt ='update '.$tabla.'0 set ';
     $sql_updt.=$tabla.'_'.$column.'="'.$value.'",';
     $sql_updt.=$tabla.'_udate=now() ';
     $sql_updt.='where '.$tabla.'_codigo like "'.$codigo.'"';
     $res_updt=msql_query($sql_updt,$link_data);          
     
//      if(mb_stristr('provincia',$column)){echo '*/*/*/*'.$sql_updt;}
}     

function val_mod10($pstring,$pverif=false)
{
	$xalgo=10;
	$dchek='-';
	$pstring=trim($pstring);
	$pstring1=$pstring;
	if($pverif){$pstring1=substr($pstring,0,strlen($pstring)-1);}
	$xcoef=substr(str_repeat('12',strlen($pstring1)),strlen($pstring1)*-1);
	$xsuma=0;
	$xprod=0;
	for($xcco=0; $xcco<strlen($pstring1); $xcco++ )
	{
		$xprod=substr($pstring1,$xcco,1)*substr($xcoef,$xcco,1);
		while($xprod>9){$xprod-=9;}
		$xsuma+=$xprod;
	}
	$xresi=$xsuma % $xalgo;
	$xveri=$xalgo-$xresi;
	if($xresi==0){$xveri=0;}
	$dchek=$xveri;

	if($pverif)
	{
		$dchek=false;
		if($xveri==substr($pstring,-1)){$dchek=true;}
	}
	return $dchek;	
}

function val_mod11($pstring,$pverif=false)
{
	$xalgo=11;
	$dchek='-';
	$pstring=trim($pstring);
	$pstring1=$pstring;
	if($pverif){$pstring1=substr($pstring,0,strlen($pstring)-1);}
	$xcoef=substr(str_repeat('765432',strlen($pstring1)),strlen($pstring1)*-1);
	$xsuma=0;
	$xprod=0;
	for($xcco=0; $xcco<strlen($pstring1); $xcco++ )
	{
          $xfactor1=substr($pstring1,$xcco,1);
          $xfactor2=substr($xcoef,$xcco,1);
		$xprod=(int)$xfactor1*(int)$xfactor2;
		$xsuma+=$xprod;
	}
	$xresi=$xsuma % $xalgo;
	$xveri=$xalgo-$xresi;
	if($xresi==0){$xveri=0;}
	
	if($xveri==10){$xveri=1;}
	if($xveri==11){$xveri=0;}
	$dchek=$xveri;

	if($pverif)
	{
		$dchek=false;
		if($xveri==substr($pstring,-1)){$dchek=true;}
	}
	return $dchek;	
}

function ruc_tipo($pnumruc)
{
//      echo 'RUCNUM==> '.$pnumruc;
     $pnumruc=str_replace(' ','',$pnumruc);
     $pnumruc=str_replace('-','',$pnumruc);
     $pnumruc=trim($pnumruc);
     $pnumruc=substr($pnumruc,0,10);
//      echo 'RUCNUM==> '.$pnumruc;
     $xruced='0';
  
     if(!ctype_digit($pnumruc)){return $xruced;}
     if(strlen($pnumruc)!=10){return $xruced;}

     if(strlen($pnumruc)==10 and substr($pnumruc,0,2)>='01' and substr($pnumruc,0,2)<='24')
     {
          if(substr($pnumruc,2,1)<=5){if(val_mod10(substr($pnumruc,0,10),true)){$xruced='N';}}
          if(substr($pnumruc,2,1)==6){if(val_mod11(substr($pnumruc,0,9),true)){$xruced='P';}}
          if(substr($pnumruc,2,1)==9){$xruced='J';}
          if($xruced==0)
          {if(substr($pnumruc,2,1)==6){if(val_mod10(substr($pnumruc,0,10),true)){$xruced='N';}}}

     }
     if(strlen($pnumruc)==10 and substr($pnumruc,0,2)=='99'){$xruced='N';}
     
     return $xruced;	
}

function val_ean($pstring,$pverif=false)
{
     $xalgo=10;
     $xfactor='13';
     $dchek='-';
     $pstring=trim($pstring);
     $pstring=str_replace(' ','',$pstring);
     $pstring=str_replace('-','',$pstring);
     $pstring=str_replace('.','',$pstring);
     $pstring=str_replace('\t','',$pstring);
     $pstring1=$pstring;

     if($pstring==''){return '';}
     if(strlen($pstring)==10){return '';}

     if(!ctype_digit($pstring)){return '';}

     if(!mb_stristr2('.0123456789',substr($pstring,0,1))){return '';}
     if(!mb_stristr2('.0123456789',substr($pstring,-1,1))){return '';}

     if($pverif){$pstring1=substr($pstring,0,strlen($pstring)-1);}
     $xcoef=substr(str_repeat($xfactor,strlen($pstring1)),strlen($pstring1)*-1);
     $xsuma=0;
     $xprod=0;
 
	for($xcco=0; $xcco<strlen($pstring1); $xcco++ )
	{
		$xprod=substr($pstring1,$xcco,1)*substr($xcoef,$xcco,1);
		$xsuma+=$xprod;
	}
	$xresi=$xsuma % $xalgo;
	$xveri=$xalgo-$xresi;
	if($xresi==0){$xveri=0;}
	$dchek=$xveri;

//   echo 'VAL:'.$pstring;
//   echo 'DCHECK:'.$dchek;
	if($pverif)
	{
		$dchek=false;
		if($xveri==substr($pstring,-1)){$dchek=true;}
    
//     include('php_session.php');
//     if(@mb_stristr2('.sist.supe.admi.oper',$user_tipo))
//     {
//       if($dchek)
//       {
//         include('../_cfg/config.php');
//         $sql_ean1='insert into item0(item_codigo,item_descri,item_status,item_idate,item_lused)value("'.$pstring.'","*** NUEVO EAN","-",now(),now())';
//         $res_ean1=msql_query($sql_ean1,$link_data);
        

//         $sql_ean1='update item0 set item_ean="'.$pstring.'" where item_codigo="'.$pstring.'"';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_tipo="-" where item_codigo="'.$pstring.'" and (item_tipo="" or item_tipo is null)';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_codigov="'.$pstring.'" where item_codigo="'.$pstring.'" and (item_codigov="" or item_codigov is null)';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_mrca="GENE" where item_codigo="'.$pstring.'" and (item_mrca="" or item_mrca is null)';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_lsub="GENE-GENE" where item_codigo="'.$pstring.'" and (item_lsub="" or item_lsub is null)';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_umdd="UNID" where item_codigo="'.$pstring.'" and (item_umdd="" or item_umdd is null)';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_iuser="'.$user_codigo.'" where item_codigo="'.$pstring.'" and (item_iuser="" or item_iuser is null)';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_dcto=0 where item_codigo="'.$pstring.'" and item_dcto is null';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_ice=0 where item_codigo="'.$pstring.'" and item_ice is null';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_iva=0 where item_codigo="'.$pstring.'" and item_iva is null';
//         $res_ean1=msql_query($sql_ean1,$link_data);
//         $sql_ean1='update item0 set item_irbp=0 where item_codigo="'.$pstring.'" and item_irbp is null';
//         $res_ean1=msql_query($sql_ean1,$link_data);
        
//       }
//     }
	}

	if(strlen($pstring)<4){$dchek='';}

	return $dchek;	
}

function send_pin($codigo,$tuser='usrt')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(empty($cfg_empr)){$cfg_empr=$_SESSION['cfg_empr'];}
     
     $tuser0=$tuser.'0';
     $empr0=data_maes('empr',$cfg_empr);
     $user0=data_maes($tuser,$codigo);
     $pin=rand(100000,999999);
     $crlf="\r\n";

     $sql_updt='update '.$tuser0.' set '.$tuser.'_pin='.$pin.' where '.$tuser.'_codigo='.$codigo.'';
     $res_updt=msql_query($sql_updt,$link_data);

     $email=$user0[$tuser.'_email'];
//      $reply=$empr0['empr_email'];
     $emailreply='soporte@vcrxol.com';
     $emailerror='soporte@vcrxol.com';
     $emailcc=$empr0['empr_email'];
     if(empty($emailcc))
     {$emailcc='vicore1976@gmail.com';}
     
     $emailbcc='vicore@hotmail.com';
     if(mb_stristr2('.gmny.gnya',$cfg_empr)){$emailbcc='germanyasa2020@hotmail.com,vicore@hotmail.com,vicore1976@gmail.com';}

     if($tuser=='usrt')
     {$subject ='Registro de Usuario en : '.$empr0['empr_descri'];}
     
     if($tuser=='user')
     {$subject ='Reseteo de Clave en : '.$empr0['empr_descri'];}
     
     $subject.=' <'.date('H:i:s').'>';
     
     
     
     $headers='';
     $headers.='From: VCRXOL.COM - '.$empr0['empr_descri'].' <soporte@vcrxol.com>'.$crlf;
     $headers.='List-Unsubscribe: <mailto:unsubscribe@vcrxol.com>'.$crlf;     
     $headers.='Reply-To:'.$emailreply.$crlf;
     $headers.='Cc:'.$emailcc.$crlf;
     $headers.='Bcc:'.$emailbcc.$crlf;
     $headers.='Return-Path: Soporte '.$empr0['empr_descri'].' <soporte@vcrxol.com>'.$crlf;
     $headers.='Errors-To:'.$emailerror.$crlf;
     $headers.='MIME-Version: 1.0' .$crlf;
     $headers.='Content-type: text/html; charset=iso-8859-1' .$crlf;
     
//      $headers.='Content-Type: multipart/mixed; boundary="PHP-mixed-'.$random_hash.'"'.$crlf;
     
     $headers=str_replace(':,',':',$headers);
     $headers=str_replace(': ,',':',$headers);
     $headers=str_replace(':',': ',$headers);
     $headers=str_replace('  ',' ',$headers);
     $headers=str_replace('  ',' ',$headers);
     
     
     $dom=new DomDocument();
          $dom->encoding = 'utf-8';
          $dom->xmlVersion = '1.0';
          $dom->formatOutput = true;
     $elem=$dom;
     
     $tlink=' PIN DE CONFIRMACION : '.$pin;
//      $enlace ='https://'.$_SERVER['SERVER_NAME'].'/index3.php?scri='.$tuser.'_confirm0';
     $enlace ='https://'.$_SERVER['SERVER_NAME'].'/?scri='.$tuser.'_confirm0';
     $enlace.='&'.$tuser.'='.$codigo;
     $enlace.='&email='.$user0[$tuser.'_email'];
//      $enlace.='&wsapp='.$user0['usrt_wsapp'];
     $enlace.='&pin='.$pin;
     
     if($tuser=='usrt')
     {
     $titulo='Registro de Usuario en '.$empr0['empr_descri'];
     $texto1='Usted se ha registrado en nuestro sistema, para activar su registro de click en el siguiente enlace : ';
     }
     if($tuser=='user')
     {
     $titulo='Reseteo de Clave en '.$empr0['empr_descri'];
     $texto1='Usted ha solicitado cambio de clave, para activar la nueva clave de click en el siguiente enlace : ';
     }
     $texto2='Si el enlace no funciona, copie y pegue el siguiente texto en su navegador : ';
     $texto3='Si usted no ha solicitado este registro, ignore este mensaje. ';
     
     $html=$elem->appendChild($dom->createElement("html"," "));   
          $html->setAttribute("style","font-weight:bold;");
          $head=$html->appendChild($dom->createElement("head"," "));   
               $title=$head->appendChild($dom->createElement("title",$titulo));   
          $div=$elem->appendChild($dom->createElement("div",$titulo));   
          $hr=$elem->appendChild($dom->createElement("hr"," "));   
     
          $div=$elem->appendChild($dom->createElement("div",$texto1));   
          $alink=$elem->appendChild($dom->createElement("a",$tlink));   
               $alink->setAttribute("href",$enlace);
               $alink->setAttribute("style","font-weight:bold;");
               $alink->setAttribute("target","_blank");
          $div=$elem->appendChild($dom->createElement("br",' '));  
     
          $div=$elem->appendChild($dom->createElement("div",$texto2));   
          $alink=$elem->appendChild($dom->createElement("a",htmlspecialchars($enlace)));   
               $alink->setAttribute("href",$enlace);
               $alink->setAttribute("target","_blank");
          $div=$elem->appendChild($dom->createElement("br",' '));   
     
          $div=$elem->appendChild($dom->createElement("div",$texto3));   

     $message=$dom->saveXML();

     $xmail=mail($email,$subject,$message,$headers);

     return $xmail;
}

function user_recover($codigo)
{
     
}

function esMovil()
{
	if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$_SERVER['HTTP_USER_AGENT'])||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($_SERVER['HTTP_USER_AGENT'],0,4)))
     {return true;}else{return false;}
}

function getBrowser()
{
     $user_agent = $_SERVER['HTTP_USER_AGENT'];
     if(strpos($user_agent, 'MSIE') !== FALSE)return 'Internet explorer';
     elseif(strpos($user_agent, 'Edg') !== FALSE)return 'Microsoft Edge';
     elseif(strpos($user_agent, 'Trident') !== FALSE)return 'Internet explorer';
     elseif(strpos($user_agent, 'Opera Mini') !== FALSE)return "Opera Mini";
     elseif(strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR') !== FALSE)return "Opera";
     elseif(strpos($user_agent, 'Firefox') !== FALSE)return 'Mozilla Firefox';
     elseif(strpos($user_agent, 'Chrome') !== FALSE)return 'Google Chrome';
     elseif(strpos($user_agent, 'Safari') !== FALSE)return "Safari";
     else return 'No hemos podido detectar su navegador';
}

function getPlatform()
{
//      $platform=$_SERVER['HTTP_SEC_CH_UA_PLATFORM'];
//      return $platform;
     
     $user_agent = $_SERVER['HTTP_USER_AGENT'];
     $plataformas = array(
      'Windows 10' => 'Windows NT 10.0+',
      'Windows 8.1' => 'Windows NT 6.3+',
      'Windows 8' => 'Windows NT 6.2+',
      'Windows 7' => 'Windows NT 6.1+',
      'Windows Vista' => 'Windows NT 6.0+',
      'Windows XP' => 'Windows NT 5.1+',
      'Windows 2003' => 'Windows NT 5.2+',
      'Windows' => 'Windows otros',
      'iPhone' => 'iPhone',
      'iPad' => 'iPad',
      'Mac OS X' => '(Mac OS X+)|(CFNetwork+)',
      'Mac otros' => 'Macintosh',
      'Android' => 'Android',
      'BlackBerry' => 'BlackBerry',
      'Linux' => 'Linux',
       );
     
        $platform=$user_agent;
        foreach($plataformas as $plataforma=>$pattern)
        {if (preg_match('/(?i)'.$pattern.'/', $user_agent)){$platform=$plataforma;}}
     
        return $platform;
//         return 'Otras';
}

function trunc_real($val,$dec='')
{
     if(empty($dec)){$dec=2;}
     if(gettype($val)=='real')
     {
          while(substr($val,-2)=='00')
          {
               if(substr($val,-$dec-1,1)=='.'){break;}
               $val=substr($val,0,-1);
          }
     }
     return $val;
}

function Xtrim_rzero($pnumero)
{
     $decidigi=0;
     $pnumero=$pnumero*1;
     $strnum=$pnumero;
//      echo '*/*/*'.$strnum;
     if(mb_stristr2($strnum,'.'))
     {
          $strnum=substr($strnum,strpos($strnum,'.')+1);
          while(substr($strnum,-1)=='0')
          {$strnum=substr($strnum,0,strlen($strnum)-1);}
          $decidigi=strlen($strnum);
     }
     return $decidigi;
}

function trim_rzero($pnumero,$min=0)
{
     $decidigi=0;
     $pnumero=$pnumero*1;
     
     
     if(empty($min)){return $pnumero;}
     
//      $entero=(int)$pnumero;
//      $decimal=$pnumero-$entero;
     
     $entero=substr($pnumero,0,strpos($pnumero,'.'));
     $decimal=substr($pnumero,strpos($pnumero,'.'));
     
//      echo '==='.$pnumero;
//      echo '==='.$entero;
//      echo '==='.$decimal;
     
     if(empty($decimal)){$decimal='0.0';}
     $decimal=substr($decimal,strpos($decimal,'.')+1);
     
     $digidec=strlen($decimal);
     
     if($digidec<$min)
     {$decimal=str_pad($decimal,$min,'0',STR_PAD_RIGHT);}

     $pnumero=$entero.'.'.$decimal;
//      echo '==='.$pnumero;
     
     return $pnumero;
}

function json_encode2($parray)
{
     $json='';
//      $json.='{';
     foreach ($parray as $key => $value)
     {$json.="{$key}:'{$value}',";}
     $json=substr($json,0,-1);
//      $json.='}';
//      $json=str_replace(',}','}',$json);
     return $json;
}


function alltrim($string,$full=0)
{
     $string=trim($string);
     $string=str_replace('  ',' ',$string);
     if($full==1)
     {$string=str_replace(' ','',$string);}
     
     $string=str_replace(' ,',',',$string);
     $string=str_replace(' ;',';',$string);
     $string=str_replace(' /','/',$string);
     
     $string=str_replace(', ',',',$string);
     $string=str_replace('; ',';',$string);
     $string=str_replace('/ ','/',$string);

     $string=str_replace(',',', ',$string);
     $string=str_replace(';','; ',$string);
     $string=str_replace('/',' /',$string);

     
//      while(mb_stristr2($string,'  ')){$string=str_replace('  ',' ',$string);}
     
//      while(mb_stristr2($string,' ,')){$string=str_replace(' ,',',',$string);}
//      while(mb_stristr2($string,' ;')){$string=str_replace(' ;',';',$string);}
//      while(mb_stristr2($string,' /')){$string=str_replace(' /','/',$string);}
     
//      while(mb_stristr2($string,', ')){$string=str_replace(', ',',',$string);}
//      while(mb_stristr2($string,'; ')){$string=str_replace('; ',';',$string);}
//      while(mb_stristr2($string,'/ ')){$string=str_replace('/ ','/',$string);}
     
     
//      $string=str_replace_all(" ,",",",$string);
//      $string=str_replace_all(" ;",";",$string);
//      $string=str_replace_all("/ ","/",$string);
//      $string=str_replace_all("  "," ",$string);
          
//      $string=str_replace(",",", ",$string);
//      $string=str_replace(";","; ",$string);
//      $string=str_replace("/"," /",$string);
     
//      $string=str_replace(', ',',',$string);
//      $string=str_replace('; ',';',$string);
//      $string=str_replace('/ ','/',$string);
     
//      $string=str_replace(' ,',',',$string);
//      $string=str_replace(' ;',';',$string);
//      $string=str_replace(' /','/',$string);
     
//      $string=str_replace(',',', ',$string);
//      $string=str_replace(';','; ',$string);
     
//      for($idx=0;$idx<=9;$idx++)
//      {$string=str_replace($idx." /",$idx."/",$string);}
          
     return $string;
}

function str_replace_all($search,$replace,$string)
{
     if($search==$replace){return $string;}
     if(empty($search)){return $string;}
     if(empty($string)){return $string;}
     while(mb_stristr2($string,$search))
     {$string=str_replace($search,$replace,$string);}
     return $string;
}


function valid_user($user,&$error_user)
{
   if(strlen($user) < 10){$error_user = "El usuario debe tener al menos 10 caracteres";return false;}
   if(!val_email($user))
   {
     $nick=substr($user,0,strpos($user,'@'));
     $host=substr($user,strpos($user,'@')+1);
     if(strlen($nick)<=1){$error_user = "Usuario ".$nick." NO VALIDO";return false;}
     exec("ping -c 4 " .$host, $output, $result);
     if($result!=0){$error_user = "Dominio ".$host." NO VALIDO";return false;}
     $error_user = "E-Mail ".$user." NO VALIDO";return false;
   }
   $error_user = "";
   return true;
}

function valid_pass($pass,&$error_pass)
{
   if(strlen($pass) < 8){$error_pass = "La clave debe tener al menos 8 caracteres";return false;}
   if(strlen($pass) > 16){$error_pass = "La clave no puede tener más de 16 caracteres";return false;}
   if(!preg_match('`[a-z]`',$pass)){$error_pass = "La clave debe tener al menos una letra minúscula";return false;}
   if(!preg_match('`[A-Z]`',$pass)){$error_pass = "La clave debe tener al menos una letra mayúscula";return false;}
   if(!preg_match('`[0-9]`',$pass)){$error_pass = "La clave debe tener al menos un caracter numérico";return false;}
   $error_pass = "";
   return true;
}

function val_email($email)
{
   $regex = "/^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$/i";
   if (preg_match($regex,$email))
   {if(checkdnsrr(array_pop(explode("@",$email)),"MX")){return true;}else{return false;}}
   else{return false;}    
}

function val_telefono($numero)
{
  $regex = '#^\(?\d{3}\)? [\s\.-] ?\d{2} [\s\.-] ?\d{8}$#';
  return preg_match($regex, $numero);
}
  
function ucfirst2($cadena)
{
	$cadena=strtolower($cadena);
	$cadena=ucfirst($cadena);
	$cadena=str_replace('Á','á',$cadena);
	$cadena=str_replace('É','é',$cadena);
	$cadena=str_replace('Í','í',$cadena);
	$cadena=str_replace('Ó','ó',$cadena);
	$cadena=str_replace('Ú','ú',$cadena);
	$cadena=str_replace('Ñ','ñ',$cadena);
	return $cadena;
}

function ucwords2($cadena)
{
	$cadena=strtolower($cadena);
	$cadena=str_replace('/','/ ',$cadena);
	$cadena=str_replace('.','. ',$cadena);
	$cadena=str_replace('(','( ',$cadena);
	$cadena=str_replace('-','- ',$cadena);
     
	$cadena=ucwords($cadena);
     
	$cadena=str_replace('/ ','/',$cadena);
	$cadena=str_replace('. ','.',$cadena);
	$cadena=str_replace('( ','(',$cadena);
	$cadena=str_replace('- ','-',$cadena);
     
	$cadena=str_replace('Á','á',$cadena);
	$cadena=str_replace('É','é',$cadena);
	$cadena=str_replace('Í','í',$cadena);
	$cadena=str_replace('Ó','ó',$cadena);
	$cadena=str_replace('Ú','ú',$cadena);
	$cadena=str_replace('Ñ','ñ',$cadena);
     
	$cadena=str_replace('Iii','III',$cadena);
	$cadena=str_replace('Ii','II',$cadena);
     
	$cadena=str_replace('Iv ','IV ',$cadena);
     
	$cadena=str_replace('Viii','VIII',$cadena);
	$cadena=str_replace('Vii','VII',$cadena);
	$cadena=str_replace('Vi ','VI ',$cadena);
     
	$cadena=str_replace('Ix','IX',$cadena);
     
	$cadena=str_replace('Xiii','XIII',$cadena);
	$cadena=str_replace('Xii','XII',$cadena);
	$cadena=str_replace('Xi ','XI ',$cadena);
     
     $cadena=' '.$cadena;
     $cadena=str_replace(' á','Á',$cadena);
     $cadena=str_replace(' é','É',$cadena);
     $cadena=str_replace(' í','Í',$cadena);
     $cadena=str_replace(' ó','Ó',$cadena);
     $cadena=str_replace(' ú','Ú',$cadena);
     $cadena=str_replace(' ñ','Ñ',$cadena);
     $cadena=trim($cadena);
     
	return $cadena;
}



function int_date($format,$datetime)
{
//      $fecha = new DateTime("2025-02-06");
//      $formatter = new IntlDateFormatter('es_ES', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
//      $formatter->setPattern('EEEE d'); // Formato "Jueves 6"
//      echo ucfirst($formatter->format($fecha)); // Salida: Jueves 6
     
}

function strftime2($format,$datetime)
{
//      setlocale(LC_TIME, "es_ES.UTF-8"); 
     $cadena=strftime($format,$datetime);

     $cadena=strtolower($cadena);
     
     $cadena=str_replace('monday','lunes',$cadena);
     $cadena=str_replace('tuesday','martes',$cadena);
     $cadena=str_replace('wednesday','miércoles',$cadena);
     $cadena=str_replace('thursday','jueves',$cadena);
     $cadena=str_replace('friday','viernes',$cadena);
     $cadena=str_replace('saturday','sábado',$cadena);
     $cadena=str_replace('sunday','domingo',$cadena);
     
     $cadena=str_replace('january','enero',$cadena);
     $cadena=str_replace('february','febrero',$cadena);
     $cadena=str_replace('march','marzo',$cadena);
     $cadena=str_replace('april','abril',$cadena);
     $cadena=str_replace('may','mayo',$cadena);
     $cadena=str_replace('june','junio',$cadena);
     $cadena=str_replace('july','julio',$cadena);
     $cadena=str_replace('august','agosto',$cadena);
     $cadena=str_replace('september','septiembre',$cadena);
     $cadena=str_replace('october','octubre',$cadena);
     $cadena=str_replace('november','noviembre',$cadena);
     $cadena=str_replace('december','diciembre',$cadena);

     
     $cadena=str_replace('mon','lun',$cadena);
     $cadena=str_replace('tue','mar',$cadena);
     $cadena=str_replace('wed','mié',$cadena);
     $cadena=str_replace('thu','jue',$cadena);
     $cadena=str_replace('fri','vie',$cadena);
     $cadena=str_replace('sat','sáb',$cadena);
     $cadena=str_replace('sun','dom',$cadena);
     
     
     $cadena=str_replace('jan','ene',$cadena);
     $cadena=str_replace('feb','feb',$cadena);
     $cadena=str_replace('mar','mar',$cadena);
     $cadena=str_replace('apr','abr',$cadena);
     $cadena=str_replace('may','may',$cadena);
     $cadena=str_replace('jun','jun',$cadena);
     $cadena=str_replace('jul','jul',$cadena);
     $cadena=str_replace('aug','ago',$cadena);
     $cadena=str_replace('sep','sep',$cadena);
     $cadena=str_replace('oct','oct',$cadena);
     $cadena=str_replace('nov','nov',$cadena);
     $cadena=str_replace('dec','dic',$cadena);

     
     
     $cadena=ucwords2($cadena);
     return $cadena;
}

function split_name($completo)
{
     $completo=trim($completo);
     $completo= preg_replace('/[^a-zA-ZñÑ]/u', ' ', $completo);     
     
     $completo=strtoupper($completo);
     $completo=str_replace('  ',' ',$completo);
     $spacs=substr_count($completo,' ');
     $completo=str_replace(' DEL ',' DEL_',$completo);
     $completo=str_replace(' DE LA ',' DE_LA_',$completo);
     $completo=str_replace(' DE LOS ',' DE_LOS_',$completo);
     
     
     $apenom=array();
     $apenom2=array();
     $apenom=explode(' ',$completo);
     
     
//      for($idx=0; $idx<=count($completo); $idx++)
//      {$apenom[$idx]=str_replace('_','',$apenom[$idx]);}

//      echo '<br>==='.count($apenom);
//     return;
     
     for($idx=0; $idx<count($apenom); $idx++)
     {$apenom[$idx]=str_replace('_',' ',$apenom[$idx]);}

     
     if(count($apenom)==2)
     {
          $apenom2['ape1']=$apenom[0];
          $apenom2['nom1']=$apenom[1];
     }
     
     if(count($apenom)==3)
     {
          $apenom2['ape1']=$apenom[0];
          $apenom2['ape2']=$apenom[1];
          $apenom2['nom1']=$apenom[2];
     }
     
     if(count($apenom)>=4)
     {
          $apenom2['ape1']=$apenom[0];
          $apenom2['ape2']=$apenom[1];
          $apenom2['nom1']=$apenom[2];
          $apenom2['nom2']=$apenom[3];
     }
     
//      echo '<br>****<br>';
//      var_dump2($apenom);
     
     
     return $apenom2;
     
     
     $ape1=0;
     $ape2=strpos($completo,' ');
     $nom1=@strpos($completo,' ',$ape2+1);
     $nom2=@strpos($completo,' ',$nom1+1);

     
     $ape1=substr($completo,$ape1+0,100);
     $ape2=substr($completo,$ape2+1,100);
     $nom1=substr($completo,$nom1+1,100);
     $nom2=substr($completo,$nom2+1,100);
     
     
     $ape1=substr($ape1,0,strpos($ape1,' '));
     $ape2=substr($ape2,0,strpos($ape2,' '));
     $nom1=substr($nom1,0,strpos($nom1,' '));
     $nom2=substr($nom2,0);
     
     $narray = array();
     $narray['nom1']=$nom1;
     $narray['nom2']=$nom2;
     $narray['ape1']=$ape1;
     $narray['ape2']=$ape2;
     return $narray;
}

function new_maes($tabla,$codigo='',$descri='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $tabla0=substr($tabla,0,4).'0';
     
     $sql_stru='describe '.$tabla0;
     $res_stru=msql_query($sql_stru,$link_data);
     $autoinc=msql_result($res_stru,0,'Extra');
     
//      echo '<br>===> '.$tabla.'==='.$autoinc;
     
     if($autoinc=='auto_increment')
     {
          $codigo=0;
          $sql_inse='insert into '.$tabla0.'('.$tabla.'_descri,'.$tabla.'_status,'.$tabla.'_idate,'.$tabla.'_iuser) ';
          $sql_inse.=' value("*** NUEVO CODIGO ***","-",now(),"'.$_SESSION['user_codigo'].'")';
          $res_inse=msql_query($sql_inse,$link_data);
          $codigo=msql_insert_id($link_data);
     }
     
     if($autoinc!='auto_increment' and trim($codigo)!='')
     {
//           echo '<br>***'.$codigo;
          $sql_veri='select * from '.$tabla0.' where '.$tabla.'_codigo="'.$codigo.'"';
          $res_veri=msql_query($sql_veri,$link_data);

          if(msql_num_rows($res_veri)==0)
          {
               $descri=str_replace('"','\"',$descri);
               $sql_inse='insert into '.$tabla0.'('.$tabla.'_codigo,'.$tabla.'_descri,'.$tabla.'_status,'.$tabla.'_idate,'.$tabla.'_iuser) ';
               $sql_inse.='value("'.$codigo.'","'.$descri.'","-",now(),"'.$_SESSION['user_codigo'].'")';
               
//                echo '<br>====== '.$sql_inse;
//                $sql_inse=str_replace('"','\"',$sql_inse);
               $res_inse=msql_query($sql_inse,$link_data);
          }
     }
     
     
     return $codigo;
}

function new_enti()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
	$anioa=date('y');
	$sql_maes ='select enti_codigo from enti0 ';
	$sql_maes.='where enti_codigo like "99'.$anioa.'%" ';
	$sql_maes.='and length(trim(enti_codigo))=10';
	$sql_maes.=' order by enti_codigo desc ';
	$sql_maes.=' limit 1 ';
	$res_maes=msql_query($sql_maes,$link_data);

// 	explain_sql($sql_maes);
// 	$newsec='0';
	$newsec='10001';
	if(msql_num_rows($res_maes)!=0){$newsec=substr(msql_result($res_maes,0,'enti_codigo'),4,5)+1;}
 	$newsec=str_pad($newsec,5,'0',STR_PAD_LEFT);
//     $newsec=fillzero($newsec,5);
	$xnewcod ='99';
	$xnewcod.=$anioa;
	$xnewcod.=$newsec;
	$xnewcod.=val_mod10($xnewcod);
// 	$xnewcod.=str_pad(date('z'),3,'0',STR_PAD_LEFT);

	$sql_maes ='insert into enti0(enti_codigo,enti_descri,enti_status,enti_iuser,enti_idate)';
	$sql_maes.='value('.$xnewcod.',"*** NUEVA ENTIDAD ***","-","'.$_SESSION['user_codigo'].'",now())';
	$res_maes=msql_query($sql_maes,$link_data);

// 	$sql_maes ='update enti0 set enti_zsub="'.$xnewean.'" where enti_codigo ="'.$xnewcod.'"';
//	$sql_maes ='update enti0 set enti_zsub="GENE-GENE" where enti_codigo ="'.$xnewcod.'"';
//	$res_maes=msql_query($sql_maes,$link_data);

	return $xnewcod;
}


function new_ctas($codigo,$descri='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(empty($descri)){$descri='*** NUEVA CUENTA ***';}
     
     $sql_maes ='insert into ctas0(ctas_codigo,ctas_descri,ctas_status,ctas_iuser,ctas_idate)';
     $sql_maes.='value('.$codigo.',"'.$descri.'","-","'.$user_codigo.'",now())';
     $res_maes=msql_query($sql_maes,$link_data);
     return $codigo;
}


function new_ean($codigo,$descri='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(empty($descri)){$descri='*** NUEVO EAN *** '.$codigo;}
     
     if(val_ean($codigo))
     {
          $sql_maes ='insert into item0(item_codigo,item_descri,item_status,item_iuser,item_idate)';
          $sql_maes.='value('.$codigo.',"'.$descri.'","-","'.$user_codigo.'",now())';
          $res_maes=msql_query($sql_maes,$link_data);
          return $codigo;
     }
     return;
}



function new_item($ptipo='20',$pean=8,$pcopy=1)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     // 200 - 299 ean13 uso interno
     // 98 materia prima
     // 99 bienes y servicios  ** no funka
     // 88 
     
     $anioa='';
     $lencod=5;
     if(empty($ptipo)){$ptipo='20';}
     if(empty($pean)){$pean=8;}
     if(empty($pcopy)){$pcopy=1;}
     if(mb_stristr2('.pcs1.imcp.orel',$_SESSION['empr_codigo'])){$pean=10;}
     if($pean>8){$anioa=date('y');}

     for($idx=1; $idx<=$pcopy; $idx++)
     {
          $newsec='10001';

          $sql_maes ='select item_codigo from item0 ';
          $sql_maes.='where 1=1 ';
          $sql_maes.='and (item_codigo like "'.$ptipo.$anioa.'%") ';
          $sql_maes.='and length(trim(item_codigo))='.$pean.' ';
          $sql_maes.='and ifnull(item_status,"")!="X" ';
          $sql_maes.='order by item_codigo desc ';
          $sql_maes.='limit 1 ';
          $res_maes=msql_query($sql_maes,$link_data);
          $last_item=msql_result($res_maes,0,'item_codigo');

          if(msql_num_rows($res_maes)!=0)
          {$newsec=substr($last_item,strlen($ptipo.$anioa),$lencod)+1;}

          $newsec=str_pad($newsec,$lencod,'0',STR_PAD_LEFT);

          $xnewcod ='';
          $xnewcod.=$ptipo;
          $xnewcod.=$anioa;
          $xnewcod.=$newsec;

          $verif=val_ean($xnewcod,false);
          $xnewcod.=$verif;

          $xcodigov=substr($xnewcod,-6);
          $xnewean =substr($xnewcod.'0000',0,12);
          $verif=val_ean($xnewean,false);
          $xnewean.=$verif;
          $xnewcoddescri ="*** NUEVO ITEM *** ";

          if(substr($xnewean,0,2)=='77')
          {$xnewcoddescri="*** NUEVO SERVICIO *** ";}

          if(substr($xnewean,0,2)=='99')
          {$xnewcoddescri="*** NUEVO GASTO *** ";}

          $xnewcoddescri.=$xnewcod;
          
          
          $sql_maes ='insert into item0(item_codigo,item_descri,item_status,item_iuser,item_idate)';
          $sql_maes.='value('.$xnewcod.',"'.$xnewcoddescri.'","-","'.$user_codigo.'",now())';
          $res_maes=msql_query($sql_maes,$link_data);

          if(!msql_error($link_data))
          {
          $sql_maes ='update item0 set item_ice=0 where item_codigo ="'.$xnewcod.'" and item_ice is null';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_iva=0 where item_codigo ="'.$xnewcod.'" and item_iva is null';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_irbp=0 where item_codigo ="'.$xnewcod.'" and item_irbp is null';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_dcto=0 where item_codigo ="'.$xnewcod.'" and item_dcto is null';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_prop=0 where item_codigo ="'.$xnewcod.'" and item_prop is null';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_mdlo="'.$xmdlo.'" where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_ean="'.$xnewean.'" where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_codigov="'.$xcodigov.'" where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_cair="312" where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_lsub="GENE-GENE" where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_mrca="GENE" where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_umdd="UNI." where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_umdd="SERV" where item_codigo ="'.$xnewcod.'" and left(item_codigo,2)="77"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_ctainve="10103" where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update item0 set item_mdlo=substring(item_codigo,1,'.$pean.') where item_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);
          }
          else
          {$xnewcod='';}
     }

return $xnewcod;
}
     
function new_ppdd($pisomz=0,$dptovi=0)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);

     $ptipo='1';
     $ptipo='';
     if(empty($pean)){$pean=8;}
     $lencod=7;
     $pcopy=1;
     
     $pisomz=(int)$pisomz;
     $dptovi=(int)$dptovi;
     
     $dptovi=str_pad($dptovi,2,'0',STR_PAD_LEFT);
     
     
//      $pisomz=str_pad($pisomz,3,'0',STR_PAD_LEFT);
     $pisomz=str_pad($pisomz,4,'0',STR_PAD_LEFT);
     $dptovi=str_pad($dptovi,3,'0',STR_PAD_RIGHT);
     
     for($idx=1; $idx<=$pcopy; $idx++)
     {
          $xcodigov=$pisomz.'-'.$dptovi;
          
//           echo '*/*/*/*'.$xcodigov;
          
//           $newcod=$ptipo.$pisomz.$dptovi;
          $newcod=$pisomz.$dptovi;
          
//           $verif=val_ean($newcod,false);
//           $newcod=$newcod.$verif;
          
//           echo '++++++++++++++++++++++++++'.$newcod;
          

          $xnewean =substr('20'.$xnewcod.'000000',0,12);
          $verif=val_ean($xnewean,false);
          $xnewean.=$verif;

//           echo '*********************************'.$xnewcod;
          
//           $newcoddescri ='*** NUEVA PROPIEDAD *** ';
          
          $dptovi=substr($dptovi,0,2);
          $newcoddescri =$pisomz.'.'.$dptovi;

          $sql_maes ='insert into ppdd0(ppdd_codigo,ppdd_descri,ppdd_status,ppdd_iuser,ppdd_idate)';
          $sql_maes.='value("'.$newcod.'","'.$newcoddescri.'","-","'.$user_codigo.'",now())';
          $res_maes=msql_query($sql_maes,$link_data);

          if(!msql_error($link_data))
          {
//                $sql_maes ='update ppdd0 set ppdd_ean="'.$xnewean.'" where ppdd_codigo ="'.$xnewcod.'"';
//                $res_maes=msql_query($sql_maes,$link_data);

//                $sql_maes ='update ppdd0 set ppdd_codigov="'.$xcodigov.'" where ppdd_codigo ="'.$newcod.'"';
//                $res_maes=msql_query($sql_maes,$link_data);
               
               $sql_maes ='update ppdd0 set ';
               $sql_maes.='ppdd_calle2="'.(int)$pisomz.'", ';
               $sql_maes.='ppdd_callen="'.(int)$dptovi.'", ';
               $sql_maes.='ppdd_status=ppdd_status ';
               $sql_maes.='where ppdd_codigo ="'.$newcod.'"';
               $res_maes=msql_query($sql_maes,$link_data);
               
//                echo '*/*/*/*/* '.$sql_maes;
               
               $sql_maes ='update ppdd0 set ';
               $sql_maes.='ppdd_pisomz="'.(int)$pisomz.'", ';
               $sql_maes.='ppdd_dptovi="'.(int)$dptovi.'", ';
               $sql_maes.='ppdd_status=ppdd_status ';
               $sql_maes.='where ppdd_codigo ="'.$newcod.'"';
               $res_maes=msql_query($sql_maes,$link_data);
               
          }
          else
          {$xnewcod='';}
     }

return $xnewcod;
}

     
function new_bbii($pisomz=0,$dptovi=0)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);

     $ptipo='10';
     if($empr0['empr_inmobil']==1){$ptipo='20';}
     if(!empty($pisomz*$dptovi)){$ptipo='10';}
     
     $ptipo='20';

     if(empty($pean)){$pean=10;}
     if(empty($pcopy)){$pcopy=1;}
     
     $lencod=5;
     $anioa=date('y');

     $pisomz=(int)$pisomz;
     $dptovi=(int)$dptovi;
     $pisomz=str_pad($pisomz,3,'0',STR_PAD_LEFT);
     $dptovi=str_pad($dptovi,3,'0',STR_PAD_LEFT);
     
     for($idx=1; $idx<=$pcopy; $idx++)
     {

          $sql_maes ='select bbii_codigo from bbii0 ';
          $sql_maes.='where 1=1 ';
          
          if($ptipo=='10')
          {$sql_maes.='and (bbii_codigo like "'.$ptipo.$pisomz.$dptovi.'%") ';}
          
          if($ptipo=='20')
          {$sql_maes.='and (bbii_codigo like "'.$ptipo.$anioa.'%") ';}
          
          $sql_maes.='and length(trim(bbii_codigo))='.$pean.' ';
          $sql_maes.='and ifnull(bbii_status,"")!="X" ';
          $sql_maes.='order by bbii_codigo desc ';
          $sql_maes.='limit 1';
          $res_maes=msql_query($sql_maes,$link_data);
          $last_item=msql_result($res_maes,0,'bbii_codigo');

          
          $xnewcod ='';
          if($ptipo=='10')
          {
               $newsec=$pisomz.$dptovi;
               $xnewcod.=$ptipo;
               $xnewcod.=$newsec;
               $xnewcod.='0';
          }
          
          if($ptipo=='20')
          {
               $newsec='10001';
               if(msql_num_rows($res_maes)!=0)
               {$newsec=substr($last_item,strlen($ptipo.$anioa),$lencod)+1;}
               $xnewcod.=$ptipo;
               $xnewcod.=$anioa;
               $xnewcod.=$newsec;
          }

          $verif=val_ean($xnewcod,false);
          $xnewcod.=$verif;

          $xcodigov=substr($xnewcod,-6);

          $xnewean =substr($xnewcod.'0000',0,12);
          $verif=val_ean($xnewean,false);
          $xnewean.=$verif;

          if($ptipo=='10')
          {$xnewcoddescri ='*** '.$pisomz.' ('.$dptovi.')';}
          if($ptipo=='20')
          {$xnewcoddescri ='*** NUEVA PROPIEDAD *** ';}


//           $xnewcoddescri.=$xnewcod;
          
          
          $sql_maes ='insert into bbii0(bbii_codigo,bbii_descri,bbii_status,bbii_iuser,bbii_idate)';
          $sql_maes.='value('.$xnewcod.',"'.$xnewcoddescri.'","-","'.$user_codigo.'",now())';
          $res_maes=msql_query($sql_maes,$link_data);

          if(!msql_error($link_data))
          {

          $sql_maes ='update bbii0 set bbii_ean="'.$xnewean.'" where bbii_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

          $sql_maes ='update bbii0 set bbii_codigov="'.$xcodigov.'" where bbii_codigo ="'.$xnewcod.'"';
          $res_maes=msql_query($sql_maes,$link_data);

//           $sql_maes ='update item0 set item_lsub="GENE-GENE" where item_codigo ="'.$xnewcod.'"';
//           $res_maes=msql_query($sql_maes,$link_data);

          }
          else
          {$xnewcod='';}
     }

return $xnewcod;
}



function new_codigo($maes,$long=7,$year='Y',$pcopy=1)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);

     $maes0=$maes.'0';
     
     $anioa=date($year);
     if((int)$year>0){$anioa=substr($year,0,2);}
     if((int)$year>=1900){$anioa=$year;}
     
     $lencod=$long -strlen($anioa)-1;
     
     for($idx=1; $idx<=$pcopy; $idx++)
     {
          $sql_maes ='select '.$maes.'_codigo from '.$maes0.' ';
          $sql_maes.='where 1=1 ';
          $sql_maes.='and ('.$maes.'_codigo like "'.$anioa.'%") ';
//           $sql_maes.='and length(trim('.$maes.'_codigo))='.$pean.' ';
          $sql_maes.='and length(trim('.$maes.'_codigo))='.$long.' ';
          $sql_maes.='and ifnull('.$maes.'_status,"")!="X" ';
          $sql_maes.='order by '.$maes.'_codigo desc ';
          $sql_maes.='limit 1';
          $res_maes=msql_query($sql_maes,$link_data);
          $last_item=msql_result($res_maes,0,$maes.'_codigo');
          
          $newsec='1';
          $xnewcod='';
          
          if(msql_num_rows($res_maes)!=0){$newsec=substr($last_item,strlen($anioa),$lencod)+1;}
          $newsec=str_pad($newsec,$lencod,'0',STR_PAD_LEFT);
          $xnewcod.=$anioa;
          $xnewcod.=$newsec;

          $verif=val_ean($xnewcod,false);
          $xnewcod.=$verif;

          $xcodigov=substr($xnewcod,-($lencod));
          $xnewean =substr($xnewcod.'000000',0,12);
          $verif=val_ean($xnewean,false);
          $xnewean.=$verif;

          $xnewcoddescri ='*** NUEVO CODIGO '.strtoupper($maes).' *** ';

          $sql_maes ='insert into '.$maes0.'('.$maes.'_codigo,'.$maes.'_descri,'.$maes.'_status,'.$maes.'_iuser,'.$maes.'_idate)';
          $sql_maes.='value('.$xnewcod.',"'.$xnewcoddescri.'","-","'.$user_codigo.'",now())';
          $res_maes=msql_query($sql_maes,$link_data);
          

          if(!msql_error($link_data))
          {
          }
          else
          {$xnewcod='';}
     }

     return $xnewcod;
}
     




function new_trty($cong=0)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);

     $ptipo='20';
     if(empty($pean)){$pean=8;}
     if(empty($pcopy)){$pcopy=1;}
     
     $lencod=3;
     $anioa=date('y');

     for($idx=1; $idx<=$pcopy; $idx++)
     {
          $sql_maes ='select trty_codigo from trty0 ';
          $sql_maes.='where 1=1 ';
          
          if($ptipo=='20')
          {$sql_maes.='and (trty_codigo like "'.$ptipo.$anioa.'%") ';}
          
          $sql_maes.='and length(trim(trty_codigo))='.$pean.' ';
          $sql_maes.='and ifnull(trty_status,"")!="X" ';
          $sql_maes.='order by trty_codigo desc ';
          $sql_maes.='limit 1';
          $res_maes=msql_query($sql_maes,$link_data);
          $last_item=msql_result($res_maes,0,'trty_codigo');
          
          $xnewcod ='';
          if($ptipo=='20')
          {
               $newsec='1';
               if(msql_num_rows($res_maes)!=0)
               {$newsec=substr($last_item,strlen($ptipo.$anioa),$lencod)+1;}
               
               $newsec=str_pad($newsec,3,'0',STR_PAD_LEFT);

               $xnewcod.=$ptipo;
               $xnewcod.=$anioa;
               $xnewcod.=$newsec;
          }

          $verif=val_ean($xnewcod,false);
          $xnewcod.=$verif;

          $xcodigov=substr($xnewcod,-4);

          $xnewean =substr($xnewcod.'0000',0,8);
          $verif=val_ean($xnewean,false);
          $xnewean.=$verif;

          if($ptipo=='20')
          {$xnewcoddescri ='*** NUEVO TERRITORIO *** ';}

          $sql_maes ='insert into trty0(trty_codigo,trty_descri,trty_status,trty_iuser,trty_idate)';
          $sql_maes.='value('.$xnewcod.',"'.$xnewcoddescri.'","-","'.$user_codigo.'",now())';
          $res_maes=msql_query($sql_maes,$link_data);
          

          if(!msql_error($link_data))
          {
          }
          else
          {$xnewcod='';}
     }

return $xnewcod;
}
     

function get_userip()
{
    // Get real visitor IP behind CloudFlare network
    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
              $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
              $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
    }
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {$ip = $client;}
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {$ip = $forward;}
    else
    {$ip = $remote;}

    return $ip;
}

function exe_curl($url)
{
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_REFERER, '');
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
     curl_setopt($ch, CURLOPT_MAXREDIRS,3);
     curl_setopt($ch, CURLOPT_VERBOSE,0);   // me informará (si esta en cero) de todos los errores que halla curl
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION,3);
     // curl_setopt($ch, CURLOPT_POST, 1);
     // curl_setopt($ch, CURLOPT_POSTFIELDS,"empr=".$cfg_empr."&codigo=".$codigo."");
     $content = curl_exec ($ch);
//      curl_close ($ch);

//      echo '<br>';
//      echo $url;
//      echo curl_errno($ch);
//      echo '<br>';
//      $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//      echo $httpCode;
//      echo '<br>';
//      var_dump($content);
     
     return $content;
}

function strtoupper2($cadena='')
{
//   echo $cadena;
	$cadena=strtoupper($cadena);
	$cadena=str_replace('á','A',$cadena);
	$cadena=str_replace('é','E',$cadena);
	$cadena=str_replace('í','I',$cadena);
	$cadena=str_replace('ó','O',$cadena);
	$cadena=str_replace('ú','U',$cadena);
	$cadena=str_replace('ñ','Ñ',$cadena);

	$cadena=str_replace('Á','A',$cadena);
	$cadena=str_replace('É','E',$cadena);
	$cadena=str_replace('Í','I',$cadena);
	$cadena=str_replace('Ó','O',$cadena);
	$cadena=str_replace('Ú','U',$cadena);
	$cadena=str_replace('Ñ','Ñ',$cadena);

	return $cadena;
}

function updt_xpres()
{
     echo '<div hide>';
//      no eliminar columnas por esta via

     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
//      return;

     
     if(date('Y-m-d')<='2025-08-31')
     {
               $colafter=set_colu('lote0','lote_fabrica','date');
               $colafter=set_colu('lote0','lote_caduca','date');
               inse_maes('enti',"9999999999999","_CONSUMIDOR FINAL");               
     }
          
     if(date('Y-m-d')<='2025-07-10')
     {
               set_docu("PP15","TRAN","prov","O.COMPRA EXTE.");

               $colafter=set_colu('logo0','logo_ptoe','varchar(6)');
     }
          
     if(date('Y-m-d')<='2025-06-30')
     {
          
//      $colafter=set_colu('retc1','berr','smallint',$colafter);     
//      $colafter=set_colu('retp1','berr','smallint',$colafter);     
          
     $colafter=set_colu('retc1','errf','smallint');
     $colafter=set_colu('retp1','errf','smallint');
     $colafter=set_colu('enti0','enti_prvc','varchar(2)');
     }
     
     if(date('Y-m-d')<='2025-05-31')
     {
          $maes1='vhcl';
          $maes2='plvh';
          $sql_newm="SELECT CONCAT('CREATE TABLE IF NOT EXISTS ','".$maes2."0',' 
               (',GROUP_CONCAT(CONCAT(REPLACE(COLUMN_NAME, '".$maes1."_', '".$maes2."_'), ' ',COLUMN_TYPE,
               IF(IS_NULLABLE = 'NO', ' NOT NULL', ''),IF(COLUMN_DEFAULT IS NOT NULL, CONCAT(' DEFAULT \'', COLUMN_DEFAULT, '\''), ''),IF(EXTRA != '', CONCAT(' ', EXTRA), '')
               )ORDER BY ORDINAL_POSITION SEPARATOR ', '),
               ');'
               )as sql_str
               FROM information_schema.columns
               WHERE table_schema = DATABASE()
               AND table_name = '".$maes1."0'
          ";
          $res_newm=msql_query($sql_newm,$link_data);
          
          echo '<br>==>'.date('H:i:s');
          msql_query(msql_result($res_newm,0,'sql_str'),$link_data);
          echo '<br>==>'.date('H:i:s');
          msql_query('INSERT INTO '.$maes2.'0 SELECT * FROM '.$maes1.'0 where '.$maes1.'_codigo not in (select '.$maes2.'_codigo from '.$maes2.'0)',$link_data);

          
          echo '<br>==>'.date('H:i:s');
          msql_query('create index codigo on '.$maes2.'0 ('.$maes2.'_codigo)',$link_data);
          
          echo '<br>==>'.date('H:i:s');
          set_colu('guia1','plvh','varchar(10)','','');
          set_colu('vtas2','plvh','varchar(10)','','');
          
          echo '<br>==>'.date('H:i:s');
          msql_query('update guia1 set plvh=vhcl where ifnull(plvh,"")=""',$link_data);
          echo '<br>==>'.date('H:i:s');
          msql_query('update vtas1 set plvh=vhcl where ifnull(plvh,"")=""',$link_data);
          echo '<br>==>'.date('H:i:s');
          msql_query('update vtas2 set plvh=vhcl where ifnull(plvh,"")=""',$link_data);
     }
     
     if(date('Y-m-d')<='2025-05-31')
     {
          set_colu('mdvh0','mdvh_modelo','varchar(20)','','');
     }
     
     if(date('Y-m-d')<='2025-05-14')
     {
          set_colu('item0','item_medida','varchar(20)','','');
     }
     
     if(date('Y-m-d')<='2025-08-31')
     {
          set_colu('vtas1','dixco','smallint','');
     }
     
     if(date('Y-m-d')<='2025-05-31')
     {
          set_colu('vtas1','diascob','smallint','');
//           set_colu('item0','item_medida','X','','');
          set_colu('item0','item_medidas','varchar(20)','','');
          set_colu('imgp0','imgp_plvh','varchar(10)','','');
          
     }
     
     if(date('Y-m-d')<='2024-12-31')
     {
          $tabla='enti';
          $tabla0=$tabla.'0';
          $colafter=set_colu($tabla0,$tabla.'_plazo', 'smallint',$colafter,'');
          $colafter=set_colu($tabla0,$tabla.'_tcli', 'varchar(6)',$colafter,'');
//                      create table if not exists tcli0(tcli_codigo varchar(6))
          $sql_updt='create table if not exists tcli0(tcli_codigo varchar(6))';
          $res_updt=msql_query($sql_updt,$link_data);
          
     }
     
     if(date('Y-m-d')<='2024-10-31')
     {
          $tabla='cair';
          $tabla0=$tabla.'0';
          $colafter=set_colu($tabla0,$tabla.'_ctacont1', 'varchar(13)',$colafter,'');
          $colafter=set_colu($tabla0,$tabla.'_ctacont2', 'varchar(13)',$colafter,'');
          $colafter=set_colu($tabla0,$tabla.'_ctacont5', 'varchar(13)',$colafter,'');
          $sql_updt='update cair0 set cair_ctacont1=cair_ctaxcob where ifnull(cair_ctacont1,"")=""';
          $res_updt=msql_query($sql_updt,$link_data);
          $sql_updt='update cair0 set cair_ctacont2=cair_ctaxpag where ifnull(cair_ctacont2,"")=""';
          $res_updt=msql_query($sql_updt,$link_data);
          
          $tabla='docu';
          $tabla0=$tabla.'0';
          $colafter=set_colu($tabla0,$tabla.'_contcabe','varchar(1)',$colafter,'R');
          $colafter=set_colu($tabla0,$tabla.'_contdeta','varchar(1)',$colafter,'D');
     }
     
     if(date('Y-m-d')<='2024-05-15')
     {
          $colafter=set_colu('caja0','caja_color','varchar(15)');
          $colafter=set_colu('ctab0','ctab_color','varchar(15)');
          $colafter=set_colu('bode0','bode_color','varchar(15)');
          $colafter=set_colu('vndd0','vndd_color','varchar(15)');
          $colafter=set_colu('ptov0','ptov_color','varchar(15)');
          $colafter=set_colu('lsub0','lsub_color','varchar(15)');
     }
     
     echo '</div>';
     
     return;
}

function clon_docu($docu1,$idnum,$docu2='',$ptoe2='')
{
     if(empty($empr)){$empr=$_SESSION['empr_codigo'];}     
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}

	if(empty($idnum)){return;}
	if(empty($docu1)){return;}
	if(empty($docu2)){$docu2=$docu1;}
  
     ////////////////////////////////
	$sql_docu='select * from docu0 where docu_codigo like "'.$docu1.'%"' ;
	$res_docu=msql_query($sql_docu,$link_data);
	$tablao=msql_result($res_docu,0,'docu_tabla');
		
	$sql_docu='select * from docu0 where docu_codigo like "'.$docu2.'%"' ;
	$res_docu=msql_query($sql_docu,$link_data);
	$tablad=msql_result($res_docu,0,'docu_tabla');

     ////////////////////////////////
	$sql_docu1='select * from '.$tablao.'1 where idnum1="'.$idnum.'"' ;
	$res_docu1=msql_query($sql_docu1,$link_data);
     $aso_docu1=msql_fetch_assoc($res_docu1);

     if($docu1==$docu2 and empty($ptoe2)){$ptoe2=$aso_docu1['ptoe'];}
     
	$sql_docu2='select * from '.$tablao.'2 where idnum2="'.$idnum.'" order by iddet';
	$res_docu2=msql_query($sql_docu2,$link_data);
//      $aso_docu2=msql_fetch_assoc($res_docu2);
     
     $new_idnum='';
     $new_numero='';
     
     
     if($docu1=='EB13' and $docu2=='IB13')     
     {
          $sql_val1='select * from inve1 ';
          $sql_val1.='where docu="'.$docu2.'" and bode="'.$aso_docu1['bode2'].'" and ifnull(bode2,"")="'.$aso_docu1['bode'].'" and idfrom='.$idnum.' ';
          $sql_val1.='order by idnum1 desc ';
          $res_val1=msql_query($sql_val1,$link_data);
          $new_idnum=msql_result($res_val1,0,'idnum1');
          $new_numero=msql_result($res_val1,0,'numero');
          
          if(!empty($new_idnum))
          {
               $sql_val2='delete from inve2 where idnum2="'.$new_idnum.'" limit 100 ';
               $res_val2=msql_query($sql_val2,$link_data);
          }
          
     }
     
     
     if($docu1=='IB11' and $docu2=='EB11')     
     {
          $sql_val1='select * from inve1 ';
          $sql_val1.='where docu="'.$docu2.'" and idfrom='.$idnum.' ';
          $sql_val1.='order by idnum1 desc ';
          $res_val1=msql_query($sql_val1,$link_data);
          $new_idnum=msql_result($res_val1,0,'idnum1');
          $new_numero=msql_result($res_val1,0,'numero');
          
          if(!empty($new_idnum))
          {
               $sql_val2='delete from inve2 where idnum2="'.$new_idnum.'" limit 100 ';
               $res_val2=msql_query($sql_val2,$link_data);
          }
          
     }
     
     
     if($docu1=='FC10' and $docu2=='EB10')     
     {
          $ptov0=data_maes('ptov',$aso_docu1['ptov']);
          $aso_docu1['bode']=$ptov0['ptov_bode'];
          
          $bode0=data_maes('bode',$aso_docu1['bode']);
          if(empty($bode0['bode_codigo'])){return;}
          
          $sql_val1='select * from inve1 ';
          $sql_val1.='where docu="'.$docu2.'"  ';
          // comentariado para evitar duplicados en pcs1 pacifik
//           $sql_val1.='and bode="'.$aso_docu1['bode'].'" ';
          $sql_val1.='and ifnull(status,"") not in ("X") ';
          $sql_val1.='and mdfrom="vtas" ';
          $sql_val1.='and idfrom='.$idnum.' ';
          $sql_val1.='order by idnum1 desc ';
          $res_val1=msql_query($sql_val1,$link_data);
          $new_idnum=msql_result($res_val1,0,'idnum1');
          $new_numero=msql_result($res_val1,0,'numero');
          
          if(!empty($new_idnum))
          {
               $sql_val2='delete from inve2 where idnum2="'.$new_idnum.'" limit 100 ';
               $res_val2=msql_query($sql_val2,$link_data);
          }
          
     }

     if($docu2=='AC10' or $docu2=='AP10')     
     {
          $sql_val1='select * from '.$tablad.'1 ';
          $sql_val1.='where docu="'.$docu2.'"  ';
          $sql_val1.='and ifnull(status,"") not in ("X") ';
          $sql_val1.='and mdfrom="'.$tablao.'" ';
          $sql_val1.='and idfrom='.$idnum.' ';
          $sql_val1.='order by idnum1 desc ';
          $res_val1=msql_query($sql_val1,$link_data);
          $new_idnum=msql_result($res_val1,0,'idnum1');
          $new_numero=msql_result($res_val1,0,'numero');
          
          if(!empty($new_idnum))
          {
               $sql_val2='delete from '.$tablad.'2 where idnum2="'.$new_idnum.'" limit 100 ';
               $res_val2=msql_query($sql_val2,$link_data);
          }
          
     }

     
     
     ////////////////////////////////
// 	$sql_stru1='describe '.$tablad.'1';
// 	$res_stru1=msql_query($sql_stru1,$link_data);
     
     if(empty($new_idnum))
     {
//           $sql_inse1='insert into '.$tablad.'1(docu,iuser,idate,status)value("'.$docu2.'","'.$user_codigo.'",now(),"-")' ;
          $sql_inse1='insert into '.$tablad.'1(docu,iuser,idate,status)value("'.$docu2.'","'.$_SESSION['user_codigo'].'",now(),"-")' ;
          $res_inse1=msql_query($sql_inse1,$link_data);
          $new_idnum=msql_insert_id($link_data);

          if((int)$new_idnum>0)
          {
               $sql_updt='update '.$tablad.'1 set numero="000000000" where idnum1='.$new_idnum.' limit 1';
               $sql_updt=msql_query($sql_updt,$link_data);
          }
     }
     
     ////////////////////////////////
	$sql_stru1='describe '.$tablad.'1';
	$res_stru1=msql_query($sql_stru1,$link_data);
     
     msql_data_seek($res_stru1);
	while($aso_stru1=msql_fetch_assoc($res_stru1))
	{
          if(!mb_stristr2('.idnum1.docu.numero.iuser.idate.status.stfin..claveacc.firmafec.recepfec.emailfec.recepmsj.autorfec.autormsj.autornum.',trim($aso_stru1['Field'])))
          {
//                $val_field=$aso_docu1[$aso_stru1['Field']];
//                if($val_field=='0000-00-00 00:00:00'){$val_field=null;}
               $sql_updt ='update '.$tablad.'1 set ';
               $sql_updt.=''.$aso_stru1['Field'].'="'.$aso_docu1[$aso_stru1['Field']].'" ';
               $sql_updt.='where idnum1="'.$new_idnum.'" limit 1';
               $res_updt=msql_query($sql_updt,$link_data);
          }
	}

     ////////////////////////////////
	$sql_stru2='describe '.$tablad.'2';
	$res_stru2=msql_query($sql_stru2,$link_data);
     while($aso_docu2=msql_fetch_assoc($res_docu2)) 
     {
          $sql_inse2='insert into '.$tablad.'2(idnum2,iddet,iuser2,idate2)value("'.$new_idnum.'","'.$aso_docu2['iddet'].'","'.$user_codigo.'",now())' ;
          $res_inse2=msql_query($sql_inse2,$link_data);

          msql_data_seek($res_stru2);
          while($aso_stru2=msql_fetch_assoc($res_stru2))
          {
               if(!mb_stristr2('.idnum2.iddet.iuser2.idate2',trim($aso_stru2['Field'])))
               {
//                     $val_field=$aso_docu2[$aso_stru2['Field']];
//                     if($val_field=='0000-00-00 00:00:00'){$val_field=null;}
                    $sql_updt ='update '.$tablad.'2 set ';
                    $sql_updt.=''.$aso_stru2['Field'].'="'.$aso_docu2[$aso_stru2['Field']].'" ';
                    $sql_updt.='where idnum2="'.$new_idnum.'" and iddet="'.$aso_docu2['iddet'].'"';
                    $res_updt=msql_query($sql_updt,$link_data);
               }
          }
          
     }
     
//      $sql_updt ='update '.$tablad.'1 set iuser="'.$_SESSION['user_codigo'].'",idate=now(),udate=null ';
     $sql_updt ='update '.$tablad.'1 set uuser="'.$_SESSION['user_codigo'].'",udate=now() ';
     $sql_updt.='where idnum1="'.$new_idnum.'"';
     $res_updt=msql_query($sql_updt,$link_data);
     
     
//      if($docu1==$docu2)
     {
          $aso_docu3=$aso_docu1;
          $aso_docu3['docu']=$docu2;
          
          if(!empty($ptoe2)){$aso_docu3['ptoe']=$ptoe2;}
          
          if($docu2=='IB13'){$aso_docu3['bode']=$aso_docu3['bode2'];}
          
          if($tablad=='caja' and $aso_docu3['caba2']!='')
          {$aso_docu3['caja']=$aso_docu3['caba2'];}
          
          if($tablad=='bcos' and $aso_docu3['caba2']!='')
          {$aso_docu3['ctab']=$aso_docu3['caba2'];}
          
          if(empty($new_numero))
          {$new_numero=new_numero($aso_docu3);}
          
               $sql_docu2 ='update '.$tablad.'1 set ' ;
               $sql_docu2.='numero="'.$new_numero.'",' ;
               $sql_docu2.='idfrom="'.$idnum.'", ';
               $sql_docu2.='mdfrom="'.$tablao.'", ';
               $sql_docu2.='status="-" ' ;
               $sql_docu2.='where idnum1="'.$new_idnum.'" ' ;
               $sql_docu2.='limit 1 ' ;
               $res_docu2=msql_query($sql_docu2,$link_data);
//                echo '*/*/*'.$sql_docu2;
     }
     

     if(substr($docu1,0,2)==substr($docu2,0,2))
     if(mb_stristr2('.FC.PC.PF.',substr($docu2,0,2)))
     {
          $sql_val1='update '.$tablad.'1 set fecha=now() where idnum1="'.$new_idnum.'"';
          $res_val1=msql_query($sql_val1,$link_data);
     }
     
     if(mb_stristr2('.PC.PF',substr($docu1,0,2)) and substr($docu2,0,2)=='FC')
     {
          $sql_val1='update '.$tablao.'1 set status="F" where idnum1="'.$idnum.'"';
          $res_val1=msql_query($sql_val1,$link_data);
          
          $sql_val1='update '.$tablad.'1 set fecha=now() where idnum1="'.$new_idnum.'"';
          $res_val1=msql_query($sql_val1,$link_data);
     }
     
     
     if(substr($docu1,0,2)=='FC' and substr($docu2,0,2)=='NC')
     {
          $sql_updt ='update '.$tablad.'1 set ';
          $sql_updt.='todocu="'.$aso_docu1['docu'].'", ';
          $sql_updt.='toptoe="'.$aso_docu1['ptoe'].'", ';
          $sql_updt.='tonume="'.$aso_docu1['numero'].'", ';
          $sql_updt.='status=status ';
          $sql_updt.='where idnum1="'.$new_idnum.'" limit 1';
          $res_updt=msql_query($sql_updt,$link_data);
     }
     
     if($docu1=='IB11' and $docu2=='EB11')
     {
          $sql_docu2='select * from '.$tablad.'1 left join '.$tablad.'2 on idnum1=idnum2 where idnum2="'.$new_idnum.'"';
          $res_docu2=msql_query($sql_docu2,$link_data);
          
          while($aso_docu2=msql_fetch_assoc($res_docu2))
          {
               $iddet=$aso_docu2['iddet'];
               $item=$aso_docu2['item'];
               $cambio=$aso_docu2['cambio'];
               $sql_updt ='update '.$tablad.'2 set ';
               $sql_updt.='item="'.$cambio.'", ';
               $sql_updt.='cambio="'.$item.'", ';
               $sql_updt.='detalle=detalle ';
               $sql_updt.='where idnum2="'.$new_idnum.'" and iddet="'.$iddet.'" ';
               $res_updt=msql_query($sql_updt,$link_data);
          }
     }
     
     
     if(substr($docu1,0,2)=='RB' and substr($docu2,0,2)=='ND')
     {
          $sql_updt ='update '.$tablad.'1 set ';
          $sql_updt.='numero="'.$aso_docu3['numero'].'", ';
          $sql_updt.='status=status ';
          $sql_updt.='where idnum1="'.$new_idnum.'" limit 1';
          $res_updt=msql_query($sql_updt,$link_data);
          
          $sql_updt ='update '.$tablad.'2 set ';
          $sql_updt.='cant=round(cant*puni/100,2), ';
          $sql_updt.='detalle=detalle ';
          $sql_updt.='where idnum2="'.$new_idnum.'" ';
          $res_updt=msql_query($sql_updt,$link_data);
          
          $sql_updt ='update '.$tablad.'2 set ';
          $sql_updt.='puni=1, ';
          $sql_updt.='detalle=detalle ';
          $sql_updt.='where idnum2="'.$new_idnum.'" ';
          $res_updt=msql_query($sql_updt,$link_data);
     }
     
//           echo '==============='.$docu1;
  
     if($docu2=='AC10' or $docu2=='AP10')
     {
          $sql_updt ='update '.$tablad.'2 set ';
          $sql_updt.='puni=round(cant*puni,2), ';
          $sql_updt.='detalle=detalle ';
          $sql_updt.='where idnum2="'.$new_idnum.'" ';
          $res_updt=msql_query($sql_updt,$link_data);
          
          $sql_updt ='update '.$tablad.'2 set ';
          $sql_updt.='cant=1, ';
          $sql_updt.='detalle=detalle ';
          $sql_updt.='where idnum2="'.$new_idnum.'" ';
          $res_updt=msql_query($sql_updt,$link_data);
          
          $sql_updt ='update '.$tablao.'2 set ';
          $sql_updt.='ptoem="001001", ';
          $sql_updt.='numer="'.$new_numero.'", ';
          $sql_updt.='detalle=detalle ';
          $sql_updt.='where idnum2="'.$idnum.'" ';
          $res_updt=msql_query($sql_updt,$link_data);
//           echo '==='.$sql_updt;
          
          
     }
     
  
     if($docu2=='GR10')
     {
          $sql_updt ='update '.$tablad.'1 set ';
          $sql_updt.='fecha=now(), ';
          $sql_updt.='fecha1=now(), ';
          $sql_updt.='fecha2=now(), ';
          $sql_updt.='status=status ';
          $sql_updt.='where idnum1="'.$new_idnum.'" limit 1';
          $res_updt=msql_query($sql_updt,$link_data);
          
//           $sql_dele='delete from guia2 where item in(select item_codigo from item0 where item_lsub like "SER%") and idnum2="'.$new_idnum.'"';
//           $res_dele=msql_query($sql_dele,$link_data);
     }

     
     
  
	return $new_idnum;	
}

function sal_docu($docu,$idnum,$fecha2='')
{
     $saldo=0;
     if(empty($fecha2)){$fecha='';}
     if(empty($docu)){return 0;}
     if(empty($idnum)){return 0;}
     if(!mb_stristr2('.FC.FP.PR',substr($docu,0,2))){return 0;}
     
     if(empty($empr)){$empr=$_SESSION['empr_codigo'];}     
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     
     $docu0=data_maes('docu',$docu);
     $docu1=data_docu($docu,$idnum);
     
     $modu='cxco';
     $info='ccresu';
     if(substr($docu,0,2)=='FP')
     {
     $modu='cxpa';
     $info='cpresu';
     $ptoe=$docu1['ptoe'];
     }
     
     $numero=$docu1['numero'];
     $enti=$docu1['enti'];
     $fecha1=$docu1['fecha'];
     $fecha2='';
     include('sele_info.php'); 
     
     $res_info=msql_query($sql_info,$link_data);
     $saldo=msql_result($res_info,0,'saldo');
//      echo '<br>*/*/*/ I '.$sql_info;
//      echo '<br>*/*/*/ S '.$saldo.$enti;
//      echo '<br>*/*/*/ N '.$saldo.$numero;
     return $saldo;
}

function set_docu($docu,$tipo,$tabla='',$descri='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $sql_veri='select * from docu0 where docu_codigo="'.$docu.'"';
     $res_veri=msql_query($sql_veri,$link_data);
     
     
     if(msql_num_rows($res_veri)==0)
     {
          $sql_sdoc='insert into docu0(docu_codigo,docu_descri)value("'.$docu.'","'.$descri.'")';
          msql_query($sql_sdoc,$link_data);
     }

     if($tipo=='X')
     {  
          $sql_sdoc='update docu0 set docu_status="'.$tipo.'" where docu_codigo="'.$docu.'"';
          msql_query($sql_sdoc,$link_data);
          return;
     }  


     $sql_sdoc='update docu0 set docu_descri="'.$descri.'" where docu_codigo="'.$docu.'"';
     msql_query($sql_sdoc,$link_data);
//      echo '<br> AAAAQUIIIIII  22222 ';
//      echo '<br> '.$sql_sdoc;   

     $sql_sdoc='update docu0 set docu_tipo="'.$tipo.'" where docu_codigo="'.$docu.'"';
     msql_query($sql_sdoc,$link_data);

     $sql_sdoc='update docu0 set docu_tabla="'.$tabla.'" where docu_codigo="'.$docu.'"';
     msql_query($sql_sdoc,$link_data);

     $sql_sdoc='update docu0 set docu_descri="'.$descri.'" where docu_codigo="'.$docu.'"';
     msql_query($sql_sdoc,$link_data);
     
     $sql_sdoc='update docu0 set docu_tcel=null';
     msql_query($sql_sdoc,$link_data);
     
     $sql_sdoc='update docu0 set docu_tcel=case ';
     $sql_sdoc.='when docu_codigo like "FC10" then "01" ';
     $sql_sdoc.='when docu_codigo like "FP10" then "01" ';
     $sql_sdoc.='when docu_codigo like "FP02" then "01" ';
     $sql_sdoc.='when docu_codigo like "FP03" then "03" ';
     $sql_sdoc.='when docu_codigo like "FP11" then "03" ';
     $sql_sdoc.='when docu_codigo like "NC10" then "04" ';
     $sql_sdoc.='when docu_codigo like "NP10" then "04" ';
//      $sql_sdoc.='when docu_codigo like "NC10" then "04" ';
     $sql_sdoc.='when docu_codigo like "FC50" then "05" ';
     $sql_sdoc.='when docu_codigo like "FP05" then "05" ';
     $sql_sdoc.='when docu_codigo like "NV05" then "05" ';
     $sql_sdoc.='when docu_codigo like "GR%" then "06" ';
     $sql_sdoc.='when docu_codigo like "RP%" then "07" ';
     
     $sql_sdoc.='when docu_codigo like "RT%" then "10" ';
     
     $sql_sdoc.='when docu_codigo like "HCLI" then "61" ';
     $sql_sdoc.='when docu_codigo like "RME%" then "62" ';
     $sql_sdoc.='when docu_codigo like "RMD%" then "62" ';
     
     $sql_sdoc.='when docu_codigo like "IE%" then "71" ';
     $sql_sdoc.='when docu_codigo like "IC%" then "72" ';
     $sql_sdoc.='when docu_codigo like "DC%" then "81" ';
     
     $sql_sdoc.='when docu_codigo like "PF%" then "91" ';
     $sql_sdoc.='when docu_codigo like "PC%" then "92" ';
     $sql_sdoc.='when docu_codigo like "PS%" then "95" ';
     $sql_sdoc.='when docu_codigo like "PP%" then "96" ';
     
     $sql_sdoc.='when docu_codigo like "RO%" then "99" ';
     $sql_sdoc.='else "00" end ';
     $sql_sdoc.='where docu_tipo like "TRAN" ';
     msql_query($sql_sdoc,$link_data);
     
//      echo '<br>AAAAAAAAAAAA '.$sql_sdoc;
//      die();
          
     
//      $sql_sdoc='update docu0 set docu_tcel=docu_tice ';
//      msql_query($sql_sdoc,$link_data);
     
     
}

function set_maes($docu,$tipo,$tabla='',$descri='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_sdoc='insert into docu0(docu_codigo,docu_descri)value("'.$docu.'","'.$descri.'")';
     msql_query($sql_sdoc,$link_data);

     if($tipo=='X')
     {  
          $sql_sdoc='update docu0 set docu_status="'.$tipo.'" where docu_codigo="'.$docu.'"';
          msql_query($sql_sdoc,$link_data);
          return;
     }  

     $sql_sdoc='update docu0 set docu_tipo="'.$tipo.'" where docu_codigo="'.$docu.'"';
     msql_query($sql_sdoc,$link_data);

     $sql_sdoc='update docu0 set docu_tabla="'.$tabla.'" where docu_codigo="'.$docu.'"';
     msql_query($sql_sdoc,$link_data);

     $sql_sdoc='update docu0 set docu_descri="'.$descri.'" where docu_codigo="'.$docu.'"';
     msql_query($sql_sdoc,$link_data);
}



function set_ctasgd()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $sql_updt='update ctas0 set ctas_tipogd="D"';
     $res_updt=msql_query($sql_updt,$link_data);
     
//      $sql_updt='update ctas0 set ctas_tipogd="G" where length(trim(ctas_codigo))<=4';
//      $res_updt=msql_query($sql_updt,$link_data);
     
     $sql_ctas='select * from ctas0 where ifnull(ctas_status,"")!="X" and ctas_tipogd="D" order by ctas_codigo';
     $res_ctas=msql_query($sql_ctas,$link_data);
     while($aso_ctas=msql_fetch_assoc($res_ctas))
     {
          $sql_ctag='select * from ctas0 where ifnull(ctas_status,"")!="X" and ctas_codigo like "'.$aso_ctas['ctas_codigo'].'%"';
          $res_ctag=msql_query($sql_ctag,$link_data);
          
          if(msql_num_rows($res_ctag)>1)
          {
               $sql_updt='update ctas0 set ctas_tipogd="G" where ctas_codigo="'.$aso_ctas['ctas_codigo'].'"';
               $res_updt=msql_query($sql_updt,$link_data);
          }
     }
     

     
}     




function gen_barcode($cadena,$color='negro')
{
     if(empty($cadena)){return;}
//      $rutabcod='../_barcode/';
     $rutabcod='../-bcode/';
	$xfname=$rutabcod.$cadena.'.jpg';
     
     if(!is_dir($rutabcod)){mkdir($rutabcod,0751);}

	$ttfont='../_lib/BarcodeFont.ttf';
	if(strlen($cadena)==13){$ttfont='../_lib/EAN13_36.ttf';}// ean 13
     
     $cadena=trim($cadena);
	$longi=strlen($cadena);
	if(mb_stristr2($cadena,'_')){$longi++;$longi++;}
	$psize=72;
	$alto=$psize*1.8;
	$alto=floor($alto/10)*10;
	
	$ancho=($longi*$psize/4);
	$ancho=ceil($ancho/100)*100;
	
	$xaxis=10;
	$yaxis=$alto-10;

// 	$xfname=$rutabcod.$cadena.'.jpg';
// 	$gfile=$xpname.$xfname;

	$lienzo = imagecreatetruecolor($ancho, $alto);
	$negro = imagecolorallocate($lienzo, 0, 0, 0);
	$blanco = imagecolorallocate($lienzo, 255, 255, 255);

	imageFill($lienzo,0,0,$blanco);
	imagefttext($lienzo, $psize, 0, $xaxis, $yaxis, $negro, $ttfont,$cadena);
// 	imagejpeg($lienzo,$gfile);
	imagejpeg($lienzo,$xfname);
	imagedestroy($lienzo); 

     $xfname=str_replace('../','',$xfname);
     
	return $xfname;
}


function num2let($xcifra,$xdeci='S')
{
//------    CONVERTIR NUMEROS A LETRAS         ---------------
//------    Máxima cifra soportada: 18 dígitos con 2 decimales
//------    999,999,999,999,999,999.99
// NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE BILLONES
// NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE MILLONES
// NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE PESOS 99/100 M.N.
//------    Creada por:                        ---------------
//------             ULTIMINIO RAMOS GALÁN     ---------------
//------            uramos@gmail.com           ---------------
//------    10 de junio de 2009. México, D.F.  ---------------
//------    PHP Version 4.3.1 o mayores (aunque podría funcionar en versiones anteriores, tendrías que probar)
$xarray = array(0 => "Cero",
        1 => "UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE",
        "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE",
        "VEINTI", 30 => "TREINTA", 40 => "CUARENTA", 50 => "CINCUENTA", 60 => "SESENTA", 70 => "SETENTA", 80 => "OCHENTA", 90 => "NOVENTA",
        100 => "CIENTO", 200 => "DOSCIENTOS", 300 => "TRESCIENTOS", 400 => "CUATROCIENTOS", 500 => "QUINIENTOS",
				600 => "SEISCIENTOS", 700 => "SETECIENTOS", 800 => "OCHOCIENTOS", 900 => "NOVECIENTOS"
    );
//
//if($xmoneda=="")
//{$xmoneda="DOLAR";}

    $xcifra = trim($xcifra);
    $xlength = strlen($xcifra);
    $xpos_punto = strpos($xcifra, ".");
    $xaux_int = $xcifra;
    $xdecimales = "00";
    if (!($xpos_punto === false)) {
        if ($xpos_punto == 0) {
            $xcifra = "0" . $xcifra;
            $xpos_punto = strpos($xcifra, ".");
        }
        $xaux_int = substr($xcifra, 0, $xpos_punto); // obtengo el entero de la cifra a covertir
        $xdecimales = substr($xcifra . "00", $xpos_punto + 1, 2); // obtengo los valores decimales
    }
 
    $XAUX = str_pad($xaux_int, 18, " ", STR_PAD_LEFT); // ajusto la longitud de la cifra, para que sea divisible por centenas de miles (grupos de 6)
    $xcadena = "";
    for ($xz = 0; $xz < 3; $xz++) {
        $xaux = substr($XAUX, $xz * 6, 6);
        $xi = 0;
        $xlimite = 6; // inicializo el contador de centenas xi y establezco el límite a 6 dígitos en la parte entera
        $xexit = true; // bandera para controlar el ciclo del While
        while ($xexit) {
            if ($xi == $xlimite) { // si ya llegó al límite máximo de enteros
                break; // termina el ciclo
            }
 
            $x3digitos = ($xlimite - $xi) * -1; // comienzo con los tres primeros digitos de la cifra, comenzando por la izquierda
            $xaux = substr($xaux, $x3digitos, abs($x3digitos)); // obtengo la centena (los tres dígitos)
            for ($xy = 1; $xy < 4; $xy++) { // ciclo para revisar centenas, decenas y unidades, en ese orden
                switch ($xy) {
                    case 1: // checa las centenas
                        if (substr($xaux, 0, 3) < 100) { // si el grupo de tres dígitos es menor a una centena ( < 99) no hace nada y pasa a revisar las decenas
                             
                        } else {
                            $key = (int) substr($xaux, 0, 3);
                            if (TRUE === array_key_exists($key, $xarray)){  // busco si la centena es número redondo (100, 200, 300, 400, etc..)
                                $xseek = $xarray[$key];
                                $xsub = num2let_sf($xaux); // devuelve el num2let_sf correspondiente (Millón, Millones, Mil o nada)
                                if (substr($xaux, 0, 3) == 100)
                                    $xcadena = " " . $xcadena . " CIEN " . $xsub;
                                else
                                    $xcadena = " " . $xcadena . " " . $xseek . " " . $xsub;
                                $xy = 3; // la centena fue redonda, entonces termino el ciclo del for y ya no reviso decenas ni unidades
                            }
                            else { // entra aquí si la centena no fue numero redondo (101, 253, 120, 980, etc.)
                                $key = (int) substr($xaux, 0, 1) * 100;
                                $xseek = $xarray[$key]; // toma el primer caracter de la centena y lo multiplica por cien y lo busca en el arreglo (para que busque 100,200,300, etc)
                                $xcadena = " " . $xcadena . " " . $xseek;
                            } // ENDIF ($xseek)
                        } // ENDIF (substr($xaux, 0, 3) < 100)
                        break;
                    case 2: // checa las decenas (con la misma lógica que las centenas)
                        if (substr($xaux, 1, 2) < 10) {
                             
                        } else {
                            $key = (int) substr($xaux, 1, 2);
                            if (TRUE === array_key_exists($key, $xarray)) {
                                $xseek = $xarray[$key];
                                $xsub = num2let_sf($xaux);
                                if (substr($xaux, 1, 2) == 20)
                                    $xcadena = " " . $xcadena . " VEINTE " . $xsub;
                                else
                                    $xcadena = " " . $xcadena . " " . $xseek . " " . $xsub;
                                $xy = 3;
                            }
                            else {
                                $key = (int) substr($xaux, 1, 1) * 10;
                                $xseek = $xarray[$key];
                                if (20 == substr($xaux, 1, 1) * 10)
                                    $xcadena = " " . $xcadena . " " . $xseek;
                                else
                                    $xcadena = " " . $xcadena . " " . $xseek . " Y ";
                            } // ENDIF ($xseek)
                        } // ENDIF (substr($xaux, 1, 2) < 10)
                        break;
                    case 3: // checa las unidades
                        if (substr($xaux, 2, 1) < 1) { // si la unidad es cero, ya no hace nada
                             
                        } else {
                            $key = (int) substr($xaux, 2, 1);
                            $xseek = $xarray[$key]; // obtengo directamente el valor de la unidad (del uno al nueve)
                            $xsub = num2let_sf($xaux);
                            $xcadena = " " . $xcadena . " " . $xseek . " " . $xsub;
                            if(substr($xcadena,-3)=="UN "){$xcadena=trim($xcadena)."O";}
                        } // ENDIF (substr($xaux, 2, 1) < 1)
                        break;
                } // END SWITCH
            } // END FOR
            $xi = $xi + 3;
        } // ENDDO
 
        if (substr(trim($xcadena), -5, 5) == "ILLON") // si la cadena obtenida termina en MILLON o BILLON, entonces le agrega al final la conjuncion DE
            $xcadena.= " DE";
 
        if (substr(trim($xcadena), -7, 7) == "ILLONES") // si la cadena obtenida en MILLONES o BILLONES, entoncea le agrega al final la conjuncion DE
            $xcadena.= " DE";
 
        // ----------- esta línea la puedes cambiar de acuerdo a tus necesidades o a tu país -------
        if (trim($xaux) != "") {
            switch ($xz) {
                case 0:
                    if (trim(substr($XAUX, $xz * 6, 6)) == "1")
                        $xcadena.= "UN BILLON ";
                    else
                        $xcadena.= " BILLONES ";
                    break;
                case 1:
                    if (trim(substr($XAUX, $xz * 6, 6)) == "1")
                        $xcadena.= "UN MILLON ";
                    else
                        $xcadena.= " MILLONES ";
                    break;
                case 2:
                    if ($xcifra < 1) {
                        //$xcadena = "CERO PESOS $xdecimales/100 M.N.";
                        $xcadena = "CERO $xdecimales/100 ";
                    }
                    if ($xcifra >= 1 && $xcifra < 2) {
                        //$xcadena = "UN PESO $xdecimales/100 M.N. ";
                        $xcadena = "UNO  $xdecimales/100  ";
                    }
                    if ($xcifra >= 2) {
                        //$xcadena.= " PESOS $xdecimales/100 M.N. "; //
                        $xcadena.= "  $xdecimales/100  "; //
                    }
                    break;
            } // endswitch ($xz)
        } // ENDIF (trim($xaux) != "")
        // ------------------      en este caso, para México se usa esta leyenda     ----------------
        $xcadena = str_replace("VEINTI ", "VEINTI", $xcadena); // quito el espacio para el VEINTI, para que quede: VEINTICUATRO, VEINTIUN, VEINTIDOS, etc
        $xcadena = str_replace("  ", " ", $xcadena); // quito espacios dobles
        $xcadena = str_replace("UN UN", "UN", $xcadena); // quito la duplicidad
        $xcadena = str_replace("UN UNO", "UN", $xcadena); // quito la duplicidad
        $xcadena = str_replace("UNOUN", "UN", $xcadena); // quito la duplicidad
        $xcadena = str_replace("  ", " ", $xcadena); // quito espacios dobles
        $xcadena = str_replace("BILLON DE MILLONES", "BILLON DE", $xcadena); // corrigo la leyenda
        $xcadena = str_replace("BILLONES DE MILLONES", "BILLONES DE", $xcadena); // corrigo la leyenda
        $xcadena = str_replace("DE UN", "UN", $xcadena); // corrigo la leyenda
        //echo substr($xcadena,-2);
        //if(substr(trim($xcadena),-2)=="UN")
        //{$xcadena=$cadena."O";}
        
    } // ENDFOR ($xz)
     
     $xcadena=trim($xcadena);
     if($xdeci=='N')
     {$xcadena=substr($xcadena,0,strrpos($xcadena,' '));}
          
    return trim($xcadena);
}
 
function num2let_sf($xx)
{ // esta función regresa un num2let_sf para la cifra
    $xx = trim($xx);
    $xstrlen = strlen($xx);
    if ($xstrlen == 1 || $xstrlen == 2 || $xstrlen == 3)
        $xsub = "";
    //
    if ($xstrlen == 4 || $xstrlen == 5 || $xstrlen == 6)
        $xsub = "MIL";
    //
    return $xsub;
}


function days_diff($pfecha1,$pfecha2='')
{
   if($pfecha2==''){$pfecha2=date('Y-m-d');}
   $xdays=date_diff(date_create($pfecha1),date_create($pfecha2));
   $xdays=$xdays->format('%a');
   if($pfecha1>$pfecha2){$xdays=$xdays*(-1);}  
   return $xdays;
}  
  
function hora_diff($hora1,$hora2='')
{
   if($hora2==''){$hora2=time();}
   $xhoras=date_diff(date_create($hora1),date_create($hora2));
   $xhoras=$xhoras->format('%h'); 
   return $xhoras;
}  
  
function secs_diff($hora1,$hora2='')
{
   if($hora2==''){$hora2=time();}
   $xsecs=date_diff(date_create($hora1),date_create($hora2));
   $xsecs=$xsecs->format('%s'); 
   return $xsecs;
}  

function dhora_diff($hora1,$hora2='')
{
   if($hora2==''){$hora2=date('Y-m-d H:i:s');}
//      echo '====='.$hora1;
//      echo '+++++'.$hora2;
   $xhoras=date_diff(date_create($hora1),date_create($hora2));
   $xhoras=$xhoras->format('%h'); 
   return $xhoras;
}  
  



function clean_temp($ruta='-info',$xdias=0)
{
     $filed=0;
     if(empty($cfg_empr)){$cfg_empr=$_SESSION['cfg_empr'];}

     $dir='../'.$cfg_empr.'/'.$ruta.'/';
     $files = @scandir($dir); 
     
     $xdias=$xdias*1;
     if(empty($xdias)){$xdias=10;}
     
     $del_date=date('ymd',strtotime('-'.$xdias.' days'));
     
     
     if(!empty($files))
     foreach($files as $file)
     {
          if($file=='.'){continue;}
          if($file=='..'){continue;}
          $file_date=date('ymd',filectime($dir.$file));
          if($file_date<=$del_date and mb_stristr2($file,$file_date))
          {
               unlink($dir.$file);
               $filed++;
          }
          
          if($file_date<=$del_date and $ruta=='-docu')
          {
               unlink($dir.$file);
               $filed++;
          }
          
          
     }
     return $filed;
}



function url_exists( $url = NULL ) {

    if( empty( $url ) ){return false;}

    $ch = curl_init( $url );
 
    // Establecer un tiempo de espera
    curl_setopt( $ch, CURLOPT_TIMEOUT, 5 );
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 5 );

    // Establecer NOBODY en true para hacer una solicitud tipo HEAD
    curl_setopt( $ch, CURLOPT_NOBODY, true );
    // Permitir seguir redireccionamientos
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    // Recibir la respuesta como string, no output
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

    // Descomentar si tu servidor requiere un user-agent, referrer u otra configuración específica
    // $agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36';
    // curl_setopt($ch, CURLOPT_USERAGENT, $agent)

    $data = curl_exec( $ch );

    // Obtener el código de respuesta
    $httpcode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
    //cerrar conexión
    curl_close( $ch );

    // Aceptar solo respuesta 200 (Ok), 301 (redirección permanente) o 302 (redirección temporal)
    $accepted_response = array( 200, 301, 302 );
    if( in_array( $httpcode, $accepted_response ) ) {
        return true;
    } else {
        return false;
    }

}


function isValidBarcode($barcode)
{
        //checks validity of: GTIN-8, GTIN-12, GTIN-13, GTIN-14, GSIN, SSCC
        //see: http://www.gs1.org/how-calculate-check-digit-manually
        $barcode = (string) $barcode;
        //we accept only digits
        if (!preg_match("/^[0-9]+$/", $barcode)) {
            return false;
        }
        //check valid lengths:
        $l = strlen($barcode);
        if(!in_array($l, [8,12,13,14,17,18]))
            return false;
        //get check digit
        $check = substr($barcode, -1);
        $barcode = substr($barcode, 0, -1);
        $sum_even = $sum_odd = 0;
        $even = true;
        while(strlen($barcode)>0) {
            $digit = substr($barcode, -1);
            if($even)
                $sum_even += 3 * $digit;
            else 
                $sum_odd += $digit;
            $even = !$even;
            $barcode = substr($barcode, 0, -1);
        }
        $sum = $sum_even + $sum_odd;
        $sum_rounded_up = ceil($sum/10) * 10;
        return ($check == ($sum_rounded_up - $sum));
}

function set_ifin0()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_ifin='delete from ifin0';
     $res_ifin=msql_query($sql_ifin,$link_data);

     new_maes('ifin','PACI','PACIFICO');
     new_maes('ifin','PICH','PICHINCHA');
     new_maes('ifin','PROD','PRODUBANCO');
     new_maes('ifin','MACH','MACHALA');
     new_maes('ifin','BOLI','BOLIVARIANO');
     
}




function set_vwmi0()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}

    // Lista de países uno por línea
     $fabricante = [];
     {
          $fabricante['1HG'] = 'Honda';
          $fabricante['1FA'] = 'Ford';
          $fabricante['1G1'] = 'Chevrolet';
          $fabricante['1C3'] = 'Chrysler';
          $fabricante['2G1'] = 'Chevrolet';
          $fabricante['2HK'] = 'Honda';
          $fabricante['3FA'] = 'Ford';
          $fabricante['3G1'] = 'Chevrolet';
          $fabricante['JHM'] = 'Honda';
          $fabricante['JM1'] = 'Mazda';
          $fabricante['JS1'] = 'Suzuki';
          $fabricante['JT1'] = 'Toyota';
          $fabricante['KL1'] = 'Daewoo / GM Korea';
          $fabricante['KMH'] = 'Hyundai';
          $fabricante['KNA'] = 'Kia';
          $fabricante['WAU'] = 'Audi';
          $fabricante['WBA'] = 'BMW';
          $fabricante['WDB'] = 'Mercedes-Benz';
          $fabricante['WVW'] = 'Volkswagen';
          $fabricante['VF1'] = 'Renault';
          $fabricante['VF3'] = 'Peugeot';
          $fabricante['VSS'] = 'SEAT';
          $fabricante['ZFA'] = 'Fiat';
          $fabricante['ZFF'] = 'Ferrari';
          $fabricante['ZHW'] = 'Lamborghini';
          $fabricante['9BW'] = 'Volkswagen';
          $fabricante['8AG'] = 'Chevrolet';
          $fabricante['6MM'] = 'Mitsubishi';
          $fabricante['6T1'] = 'Toyota';
     }     
     
     
//     $stmt = $pdo->prepare("INSERT INTO pais0 (pais_codigo, pais_descri) VALUES (:codigo, :nombre)");
     foreach ($fabricante as $codigo => $datos)
     {
        inse_maes('vwmi',$codigo,$datos);  
//         $sql_updt='insert into vwmi0(vwmi_codigo,vwmi_descri)value("'.$codigo.'","'.$datos.'")';
//         $res_updt=msql_query($sql_updt,$link_data);  
          
    }
     
     
     
     
}



function set_pais0()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}

    // Lista de países uno por línea
    $paises = [];
    {
    $paises['AFG'] = ['Afganistán', '+93'];
    $paises['ALB'] = ['Albania', '+355'];
    $paises['DZA'] = ['Argelia', '+213'];
    $paises['AND'] = ['Andorra', '+376'];
    $paises['AGO'] = ['Angola', '+244'];
    $paises['ARG'] = ['Argentina', '+54'];
    $paises['ARM'] = ['Armenia', '+374'];
    $paises['AUS'] = ['Australia', '+61'];
    $paises['AUT'] = ['Austria', '+43'];
    $paises['AZE'] = ['Azerbaiyán', '+994'];
    $paises['BHS'] = ['Bahamas', '+1-242'];
    $paises['BHR'] = ['Baréin', '+973'];
    $paises['BGD'] = ['Bangladés', '+880'];
    $paises['BRB'] = ['Barbados', '+1-246'];
    $paises['BLR'] = ['Bielorrusia', '+375'];
    $paises['BEL'] = ['Bélgica', '+32'];
    $paises['BLZ'] = ['Belice', '+501'];
    $paises['BEN'] = ['Benín', '+229'];
    $paises['BTN'] = ['Bután', '+975'];
    $paises['BOL'] = ['Bolivia', '+591'];
    $paises['BIH'] = ['Bosnia y Herzegovina', '+387'];
    $paises['BWA'] = ['Botsuana', '+267'];
    $paises['BRA'] = ['Brasil', '+55'];
    $paises['BRN'] = ['Brunéi', '+673'];
    $paises['BGR'] = ['Bulgaria', '+359'];
    $paises['BFA'] = ['Burkina Faso', '+226'];
    $paises['BDI'] = ['Burundi', '+257'];
    $paises['CHL'] = ['Chile', '+56'];
    $paises['CHN'] = ['China', '+86'];
    $paises['COL'] = ['Colombia', '+57'];
    $paises['CRI'] = ['Costa Rica', '+506'];
    $paises['CUB'] = ['Cuba', '+53'];
    $paises['CYP'] = ['Chipre', '+357'];
    $paises['CZE'] = ['Chequia', '+420'];
    $paises['DNK'] = ['Dinamarca', '+45'];
    $paises['ECU'] = ['Ecuador', '+593'];
    $paises['EGY'] = ['Egipto', '+20'];
    $paises['SLV'] = ['El Salvador', '+503'];
    $paises['ESP'] = ['España', '+34'];
    $paises['EST'] = ['Estonia', '+372'];
    $paises['ETH'] = ['Etiopía', '+251'];
    $paises['FRA'] = ['Francia', '+33'];
    $paises['DEU'] = ['Alemania', '+49'];
    $paises['GRC'] = ['Grecia', '+30'];
    $paises['GTM'] = ['Guatemala', '+502'];
    $paises['HND'] = ['Honduras', '+504'];
    $paises['HUN'] = ['Hungría', '+36'];
    $paises['ISL'] = ['Islandia', '+354'];
    $paises['IND'] = ['India', '+91'];
    $paises['IDN'] = ['Indonesia', '+62'];
    $paises['IRN'] = ['Irán', '+98'];
    $paises['IRL'] = ['Irlanda', '+353'];
    $paises['ISR'] = ['Israel', '+972'];
    $paises['ITA'] = ['Italia', '+39'];
    $paises['JPN'] = ['Japón', '+81'];
    $paises['JOR'] = ['Jordania', '+962'];
    $paises['KEN'] = ['Kenia', '+254'];
    $paises['LBN'] = ['Líbano', '+961'];
    $paises['LUX'] = ['Luxemburgo', '+352'];
    $paises['MYS'] = ['Malasia', '+60'];
    $paises['MEX'] = ['México', '+52'];
    $paises['NLD'] = ['Países Bajos', '+31'];
    $paises['NIC'] = ['Nicaragua', '+505'];
    $paises['NOR'] = ['Noruega', '+47'];
    $paises['PAK'] = ['Pakistán', '+92'];
    $paises['PAN'] = ['Panamá', '+507'];
    $paises['PRY'] = ['Paraguay', '+595'];
    $paises['PER'] = ['Perú', '+51'];
    $paises['PHL'] = ['Filipinas', '+63'];
    $paises['POL'] = ['Polonia', '+48'];
    $paises['PRT'] = ['Portugal', '+351'];
    $paises['ROU'] = ['Rumanía', '+40'];
    $paises['RUS'] = ['Rusia', '+7'];
    $paises['SAU'] = ['Arabia Saudita', '+966'];
    $paises['SRB'] = ['Serbia', '+381'];
    $paises['SGP'] = ['Singapur', '+65'];
    $paises['SVK'] = ['Eslovaquia', '+421'];
    $paises['SVN'] = ['Eslovenia', '+386'];
    $paises['ZAF'] = ['Sudáfrica', '+27'];
    $paises['KOR'] = ['Corea del Sur', '+82'];
    $paises['SWE'] = ['Suecia', '+46'];
    $paises['CHE'] = ['Suiza', '+41'];
    $paises['SYR'] = ['Siria', '+963'];
    $paises['THA'] = ['Tailandia', '+66'];
    $paises['TUR'] = ['Turquía', '+90'];
    $paises['UKR'] = ['Ucrania', '+380'];
    $paises['ARE'] = ['Emiratos Árabes Unidos', '+971'];
    $paises['GBR'] = ['Reino Unido', '+44'];
    $paises['USA'] = ['Estados Unidos', '+1'];
    $paises['URY'] = ['Uruguay', '+598'];
    $paises['VEN'] = ['Venezuela', '+58'];
    $paises['VNM'] = ['Vietnam', '+84'];
    $paises['YEM'] = ['Yemen', '+967'];
    $paises['ZMB'] = ['Zambia', '+260'];
    $paises['ZWE'] = ['Zimbabue', '+263'];
         
    }
     
//     $stmt = $pdo->prepare("INSERT INTO pais0 (pais_codigo, pais_descri) VALUES (:codigo, :nombre)");
     foreach ($paises as $codigo => $datos)
     {
          
        $sql_updt='insert into pais0(pais_codigo,pais_descri,pais_tlfn)value("'.$codigo.'","'.$datos[0].'","'.$datos[1].'")';
        $res_updt=msql_query($sql_updt,$link_data);  
          
    }
     
     
     
     
}


function set_tmpr0($item='')
{
     
//      echo '===================='
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     $sql_mdvh='select * from mdvh0 where mdvh_codigo*1>0 and ifnull(mdvh_status,"")not in ("I","O","X") order by mdvh_mrca,mdvh_modelo,mdvh_anio ';
     $res_mdvh=msql_query($sql_mdvh,$link_data);
     
//      $sql_item='select * from item0 where item_lsub like "MMOO-%" and ifnull(item_status,"")not in ("I","O","X") order by item_lsub,item_codigo ';

     $sql_item='select * from item0  ';
     $sql_item.='where ifnull(item_status,"")not in ("I","O","X") ';
     $sql_item.='and item_lsub like "MMOO-%"  ';
     $sql_item.='and item_ttrf like "T%"';
     if(!empty($item))
     {$sql_item.='and item_codigo ="'.$item.'"';}
     $sql_item.='order by item_lsub,item_codigo ';
     
     $res_item=msql_query($sql_item,$link_data);
     
     while($aso_mdvh=msql_fetch_assoc($res_mdvh))
     {
          $mdvh_codigo=$aso_mdvh['mdvh_codigo'];
          
          msql_data_seek($res_item);
          while($aso_item=msql_fetch_assoc($res_item))
          {
               $item_codigo=$aso_item['item_codigo'];
               $sql_tmpr='select * from tmpr0 where tmpr_mdvh="'.$mdvh_codigo.'" and tmpr_item="'.$item_codigo.'"';
               $res_tmpr=msql_query($sql_tmpr,$link_data);
               
//                echo '<br>==== '.$sql_tmpr;
               
               if(msql_num_rows($res_tmpr)==0)
               {
                    $sql_inse='insert into tmpr0(tmpr_mdvh,tmpr_item,tmpr_idate,tmpr_status)value("'.$mdvh_codigo.'","'.$item_codigo.'",now(),"-")';
                    $res_inse=msql_query($sql_inse,$link_data);
                    $res_tmpr=msql_query($sql_tmpr,$link_data);
               }
               
               $tmpr_codigo=msql_result($res_tmpr,0,'tmpr_codigo');
               
               $sql_updt='update tmpr0 set ';
               $sql_updt.='tmpr_puntos=case when ifnull(tmpr_puntos,0)=0 then 1 else tmpr_puntos end, ';
               $sql_updt.='tmpr_horas=case when ifnull(tmpr_horas,0)=0 then 0.01 else tmpr_horas end, ';
               $sql_updt.='tmpr_ttrf="'.$aso_item['item_ttrf'].'", ';
               $sql_updt.='tmpr_status=tmpr_status ';
               $sql_updt.='where tmpr_codigo="'.$tmpr_codigo.'" ';
               $res_updt=msql_query($sql_updt,$link_data);
               
               
               
          }
     }
     
}

function set_tcvh0($item='')
{
     
//      echo '*/*/*/*/*/*/* TCVH0';
     
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     
     $sql_clvh='select * from clvh0 where ifnull(clvh_codigo,"")!="" and ifnull(clvh_status,"")not in ("I","O","X") order by clvh_descri ';
     $res_clvh=msql_query($sql_clvh,$link_data);
     
     $sql_item='select * from item0  ';
     $sql_item.='where ifnull(item_status,"")not in ("I","O","X") ';
     $sql_item.='and item_lsub like "MMOO-%"  ';
     $sql_item.='and item_ttrf like "C%"';
     if(!empty($item))
     {$sql_item.='and item_codigo ="'.$item.'"';}
     $sql_item.='order by item_lsub,item_codigo ';
     $res_item=msql_query($sql_item,$link_data);
     
     while($aso_clvh=msql_fetch_assoc($res_clvh))
     {
          $clvh_codigo=trim($aso_clvh['clvh_codigo']);
          
          msql_data_seek($res_item);
          while($aso_item=msql_fetch_assoc($res_item))
          {
               $item_codigo=trim($aso_item['item_codigo']);
               
               $sql_tcvh='select * from tcvh0 where tcvh_clvh="'.$clvh_codigo.'" and tcvh_item="'.$item_codigo.'"';
               $res_tcvh=msql_query($sql_tcvh,$link_data);
               
//                echo '<br>==== '.$sql_tcvh;
               
               if(msql_num_rows($res_tcvh)==0)
               {
                    $sql_inse='insert into tcvh0(tcvh_clvh,tcvh_item,tcvh_idate,tcvh_status)value("'.$clvh_codigo.'","'.$item_codigo.'",now(),"-")';
                    $res_inse=msql_query($sql_inse,$link_data);
//                     echo '<br>===> '.$sql_inse;
                    $res_tcvh=msql_query($sql_tcvh,$link_data);
               }
               
               $tcvh_codigo=msql_result($res_tcvh,0,'tcvh_codigo');
               
               $sql_updt='update tcvh0 set ';
               $sql_updt.='tcvh_puni=case when ifnull(tcvh_puni,0)=0 then "'.$aso_item['item_puni1'].'" else tcvh_puni end, ';
               $sql_updt.='tcvh_pvp=case when ifnull(tcvh_pvp,0)=0 then "'.$aso_item['item_pvp1'].'" else tcvh_pvp end, ';
               $sql_updt.='tcvh_iva="'.$aso_item['item_iva'].'", ';
               $sql_updt.='tcvh_ttrf="'.$aso_item['item_ttrf'].'", ';
               $sql_updt.='tcvh_status=tcvh_status ';
               $sql_updt.='where tcvh_codigo="'.$tcvh_codigo.'" ';
               $res_updt=msql_query($sql_updt,$link_data);
               

               
               

          }
     }
     
     $sql_updt='update tcvh0 set ';
     $sql_updt.='tcvh_pvp=tcvh_puni*(1+tcvh_iva/100), ';
     $sql_updt.='tcvh_status=tcvh_status ';
     $sql_updt.='where round(((tcvh_pvp/tcvh_puni)-1)/100,0)!=round(tcvh_iva,0)';
     $res_updt=msql_query($sql_updt,$link_data);
//      echo '==== '.$sql_updt;
     
     
     
}

function set_tlla0()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $maes='tlla';

     new_maes($maes,'00','UNICA');
     
     new_maes($maes,'80','RN');
     new_maes($maes,'81','0-3M');
     new_maes($maes,'82','3-6M');
     new_maes($maes,'83','6-9M');
     new_maes($maes,'84','9-12M');
     new_maes($maes,'85','12M');
     new_maes($maes,'86','18M');
     new_maes($maes,'87','24M /2T');
     new_maes($maes,'88','36M /3T');
     new_maes($maes,'89','48M /4T');
     
    //  new_maes($maes,'90','');
     new_maes($maes,'91','X-SMALL');
     new_maes($maes,'92','SMALL');
     new_maes($maes,'93','MEDIUM');
     new_maes($maes,'94','LARGE');
     new_maes($maes,'95','X-LARGE');
     new_maes($maes,'96','XX-LARGE');
     new_maes($maes,'97','XXX-LARGE');
    //  new_maes($maes,'98','');
    //  new_maes($maes,'99','');
     
}




function set_bcos0()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
//      $sql_bcos='delete from bcos0';
//      $res_bcos=msql_query($sql_bcos,$link_data);
     
     $maes='bcos';

     new_maes($maes,'PACI','PACIFICO');
     new_maes($maes,'PICH','PICHINCHA');
     new_maes($maes,'PROD','PRODUBANCO');
     new_maes($maes,'MACH','MACHALA');
     new_maes($maes,'BOLI','BOLIVARIANO');
     new_maes($maes,'INTE','INTERNACIONAL');
     new_maes($maes,'CTBK','CITIBANK');
     new_maes($maes,'GUAY','GUAYAQUIL');
     new_maes($maes,'AUST','AUSTRO');
     new_maes($maes,'SOLI','SOLIDARIO');
     new_maes($maes,'LITO','LITORAL');
     new_maes($maes,'AMAZ','AMAZONAS');
     new_maes($maes,'RUMI','RUMIÑAHUI');
     
}


function set_maescolor($maes)
{
     $maes0=$maes.'0';
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
     if(empty($maes)){return;}
     
     $sql_maes='update '.$maes0.' set '.$maes.'_color=null ';
     $res_maes=msql_query($sql_maes,$link_data);
     
     if(!mb_stristr2('.caja.ctab.bode.lsub.zsub',$maes)){return;}     
     
     $sql_maes='select * from '.$maes0.' where ifnull('.$maes.'_status,"")not in ("O","X","I") order by '.$maes.'_codigo';
     $res_maes=msql_query($sql_maes,$link_data);

     $colors='';
     $colors.='whitesmoke;';
     
     $colors.='lightyellow;';
     $colors.='lightcyan;';
     $colors.='mistyrose;';
     
     $colors.='honeydew;';
     
     $colors.='papayawhip;';
     $colors.='lavender;';
     $colors.='mistyrose;';
     
     $colors.='aliceblue;';
     
     $colors.='beige;';
     
     
     if(substr($colors,-1)==';')
     {$colors=substr($colors,0,-1);}
     
     $colors=explode(';',$colors);
     
     $idx=0;
     while($aso_maes=msql_fetch_assoc($res_maes))
     {
          $sql_updt='update '.$maes0.' set '.$maes.'_color="'.$colors[$idx].'" where '.$maes.'_codigo="'.$aso_maes[$maes.'_codigo'].'"';
          $res_updt=msql_query($sql_updt,$link_data);
//           echo '<br>==='.$sql_updt;
          $idx++;
          if($idx>count($colors)){$idx=0;}
     }
     
}


function get_civa($porc=0)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_civa='select * from civa0 where civa_porc='.$porc.' order by civa_codigo';
     $res_civa=msql_query($sql_civa,$link_data);
     $civa=msql_result($res_civa,0,'civa_codigo');
     return $civa;
}

function set_civa0()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_civa='delete from civa0';
     $res_civa=msql_query($sql_civa,$link_data);
     
     new_maes('civa','0','0%');
     new_maes('civa','2','12%');
     new_maes('civa','10','13%');
     new_maes('civa','3','14%');
     new_maes('civa','4','15%');
     new_maes('civa','5','5%');
     new_maes('civa','6','NO IMP');
     new_maes('civa','7','EXENTO IVA');
     new_maes('civa','8','DIFERENCIADO'); // >=8% a 12 sector turistico en los dias decretados
     
     $sql_civa='update civa0 set civa_porc=civa_descri*1';
     $res_civa=msql_query($sql_civa,$link_data);
     
}

function set_cair0()
{
//    include('../_cfg/config.php');
   set_cair("-",0,"-");
   set_cair("302",0,"EN REL.DEPEN.Q.SUP O NO BASE DESGRAVADA");
   set_cair("303",10,"HONO.PROFESIONALES.");
   set_cair("303A",3,"SERV.PROFESIONALES.SOC.RESIDENTES");
   set_cair("304", 10,"SERVIC. PREDOM. INTELECTO");
   set_cair("304A",10,"COMIS. PREDOM. INTELECTO");
   set_cair("304B",10,"PAG.NOTARIOS REG.PROP.Y MERCANTIL");
   set_cair("304E",10,"HONO. SERV. DOCENCIA");
   set_cair("307",2,"PREDOM. MANO OBRA");
   set_cair("308",10,"UTIL.APROVECH IMAGEN.RENOMBRE");
   set_cair("309",2.75,"PUBLIC.Y COMUNIC.");
   set_cair("310",1,"TRANSP.PRIV.PASAJ. O SERV.PUBL. O PRIV.CARGA");
   set_cair("311",2,"A TRAVES LIQ.COMPRA");
   set_cair("312",1.75,"TRANSF.BIENES.MUEBLES."); 
   set_cair("312A",1,"COMPRA BIENES ORIGEN AGRI, AVI, API, CUNI, PECUARIO, BIOACU Y FORESTAL"); 
   set_cair("314",8,"REGALIAS, DER.AUTOR MARCA PATENTE");
   set_cair("319",1,"ARRE.MERCANTIL");
   set_cair("320",10,"ARRE.BIENES INMUEBLES");
//    set_cair("322",1.75,"SEGUROS Y REASEGUROS");
//    set_cair("322",1,"SEGUROS Y REASEGUROS");
   set_cair("322",1,"SEGUROS Y REASEGUROS");
   set_cair("323",2,"REND.FINANCIEROS");
   set_cair("323B1",2,"REND.FINANCIEROS");
   set_cair("324",1,"REND.FINANC.INSTIT.SIST.FINAN.");
   set_cair("325",0,"EN REL.DEPEN.Q SUPERA O NO BASE DESGRAVADA");
   set_cair("326",0,"DIVID.DISTRIB. ART.27 LRTI");
   set_cair("327",0,"DIVID.DISTRIB. PER.NAT.RESID.");
   set_cair("328",0,"DIVID.DISTRIB. SOC.RESID.");
   set_cair("332",0,"BIEN.SERV. NO SUJ.RET.");
   set_cair("334",1,"ENAJ. DERECHOS REPRES. CAPITAL");
   set_cair("335",15,"LOTERIA RIFAS SIMILARES");
   set_cair("336",0.3,"COMBUSTIBLE DISTRIBUIDOR");
   set_cair("336",0.2,"COMBUSTIBLE COMERCIALIZADORA");
   set_cair("337",0.3,"REEMB. DE GASTO - COMPRA DE QUIEN ASUME EL GASTO");
                                                      
   set_cair("340",0,"");
   set_cair("341",0,"");
   set_cair("342",0,"");
   set_cair("343",1,"OTRAS RET. APLICABLES 1%");
   set_cair("344",2,"OTRAS RET. APLICABLES 2%");
   set_cair("3440",2.75,"OTRAS RET. APLICABLES 2.75%");
   set_cair("344A",2,"PAGO LOC.T/C");
   set_cair("345",8,"OTRAS RET. APLICABLES 8%");
   set_cair("346",0,"OTRAS RET. APLICABLES OTROS %");
   set_cair("351",1.75,"REGIMEN MICROEMPRESARIAL");
   set_cair("422",0,"PAGO NO RESID. SIN CONV. OTROS CONCEPTOS");
   set_cair("441",0,"TRANSFERENCIAS NO OBJETO O EXENTA DE IVA");
   set_cair("4050",25,"PAGO NO RESID. - Div Dist a Personas NAturales");
   set_cair("4580",0,"IMP. SALIDA DIVISAS");
   set_cair("501",25,"PAGO NO RESID.- Benefic/Serv. Empresariales");
   set_cair("501A",25,"PAGO NO RESID. - Serv TECNICOS, Admin o de consultoría y regalías");
   set_cair("504",25,"PAGO NO RESID.");
   set_cair("541",0,"ADQUISICIONES NO OBJETO DE IVA");
   set_cair("520",0,"LIQ.IMP.VTA.LOCAL BANANO PROPIO");
//    set_cair("421",22,"SERVICIOS TECNICOS ADMINISTRATICOS O DE CONSULTORIAS Y REGALIAS");

     
}


function set_cair($pcodigo,$pporc=0,$pdescri='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     msql_query('insert into cair0(cair_codigo)value("'.$pcodigo.'")',$link_data);
     msql_query('update cair0 set cair_descri="'.$pdescri.'", cair_porc='.$pporc.' where cair_codigo="'.$pcodigo.'"',$link_data);
     if($pdescri=='X')  
     {msql_query('update cair0 set cair_status="X" where cair_codigo="'.$pcodigo.'"',$link_data);}
}


function escolor10($colorHex)
{
    // Eliminar el símbolo # al inicio, si está presente
    $colorHex = ltrim($colorHex, '#');

    // Convertir el color a valores RGB
    $r = hexdec(substr($colorHex, 0, 2));
    $g = hexdec(substr($colorHex, 2, 2));
    $b = hexdec(substr($colorHex, 4, 2));

    // Calculando el brillo percibido del color
    $brillo = sqrt(0.299 * ($r * $r) + 0.587 * ($g * $g) + 0.114 * ($b * $b));

    // Un valor de brillo de más de 130 se considera claro; de lo contrario, oscuro
//     return ($brillo > 130) ? 'Claro' : 'Oscuro';
     if($brillo > 130){ return 1; }else {return 0;}
}



function table_exist($table)
{
    return 1;
     if(empty($table)){return 0;}
     
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $empr0=data_maes('empr',$_SESSION['empr_codigo']);
     
// SELECT count(*)
// FROM information_schema.tables
// WHERE table_schema = 'vcrxol_jwib'
//   AND table_name = 'ptov0';     
//      $sql_data='select database()';
//      $res_data=msql_query($sql_data,$link_data);
     
     $table=strtolower($table);
     
//      $sql_table='select *from information_schema.tables ';
     $sql_table='select count(*) as counta, TABLE_TYPE from information_schema.tables ';
     $sql_table.='where table_schema="vcrxol_'.$empr0['empr_codigo'].'" ';
     $sql_table.='and table_name="'.$table.'" ';
     $res_table=msql_query($sql_table,$link_data);
     
     if(msql_result($res_table,0,'counta')==1)
     {
//           echo '===='.msql_field_name($res_table,3);
//           echo '===='.msql_result($res_table,0,'TABLE_TYPE');
          if(msql_result($res_table,0,'TABLE_TYPE')=='BASE TABLE'){return 1;}
          if(msql_result($res_table,0,'TABLE_TYPE')=='VIEW'){return 2;}
          
     }
     return 0;
     
}


function substr_1letra($cadena)
{
    if (preg_match('/[a-zA-Z]/', $cadena, $coincidencias))
    {return $coincidencias[0];}
    else{return '';}
}

function substr_letra($cadena,$numlet=1)
{
    // Usamos preg_match_all para encontrar todos los caracteres alfanuméricos
    // preg_match_all('/[a-zA-Z0-9]/', $cadena, $coincidencias);
    preg_match_all('/[a-zA-Z]/', $cadena, $coincidencias);

    // Verificamos si hay suficientes caracteres alfanuméricos
    if (isset($coincidencias[0][$numlet - 1]))
    {
        // Devolvemos el (x) carácter alfanumérico
        return $coincidencias[0][$numlet - 1];
    }
    else
    {
        // Si no hay suficientes caracteres, devolvemos null o un mensaje
        return null; // O 'Carácter no encontrado';
    }
}


function Xsubstr_letra($cadena,$numlet=1)
{
    $numlet--;
    if (preg_match('/[a-zA-Z]/', $cadena, $coincidencias))
    {return $coincidencias[$numlet];}
    else{return '';}
}


function XobtenerCaracterAlfanumerico($cadena, $x) {
    // Usamos preg_match_all para encontrar todos los caracteres alfanuméricos
    preg_match_all('/[a-zA-Z0-9]/', $cadena, $coincidencias);

    // Verificamos si hay suficientes caracteres alfanuméricos
    if (isset($coincidencias[0][$x - 1])) {
        // Devolvemos el (x) carácter alfanumérico
        return $coincidencias[0][$x - 1];
    } else {
        // Si no hay suficientes caracteres, devolvemos null o un mensaje
        return null; // O 'Carácter no encontrado';
    }
}








function oscurece_color($hex, $factor)
{
    // Eliminar el símbolo '#' si está presente
    $hex = str_replace('#', '', $hex);

    // Convertir el código hexadecimal a sus componentes RGB
    $r = hexdec(substr($hex, 0, 2));
    $g = hexdec(substr($hex, 2, 2));
    $b = hexdec(substr($hex, 4, 2));

    // Oscurecer cada componente RGB
    $r = max(0, min(255, $r - ($r * $factor)));
    $g = max(0, min(255, $g - ($g * $factor)));
    $b = max(0, min(255, $b - ($b * $factor)));
    
    
    $r=round($r,0);
    $g=round($g,0);
    $b=round($b,0);

    // Convertir los componentes RGB de vuelta a hexadecimal
    $r = dechex($r);
    $g = dechex($g);
    $b = dechex($b);

    // Asegurar que cada componente tiene dos dígitos
    $r = str_pad($r, 2, '0', STR_PAD_LEFT);
    $g = str_pad($g, 2, '0', STR_PAD_LEFT);
    $b = str_pad($b, 2, '0', STR_PAD_LEFT);

    // Combinar los componentes y devolver el color oscuro en formato hexadecimal
    return "#$r$g$b";
}

function get_1diasema($anioSemana) 
{
    list($anio, $semana) = explode('-', $anioSemana);
    $semana=substr($semana,1,2);
    $dateTime = new DateTime();
    $dateTime->setISODate($anio, $semana);
    return $dateTime->format('Y-m-d');
}


function get_1lunfecha($date)
{
    // Convertir la fecha de entrada a un objeto DateTime
    $dateTime = new DateTime($date);

    // Obtener el día de la semana en formato numérico (0 para domingo, 6 para sábado)
    $dayOfWeek = $dateTime->format('w');

    // Calcular la diferencia en días hasta el lunes anterior
    $daysToPreviousMonday = $dayOfWeek - 1;
    if ($dayOfWeek == 0) {
        $daysToPreviousMonday = 6; // Si hoy es domingo, retrocedemos 6 días para el lunes anterior
    }

    // Modificar la fecha para obtener el lunes anterior
    $dateTime->modify("-$daysToPreviousMonday days");

    // Devolver la fecha en formato 'Y-m-d'
    return $dateTime->format('Y-m-d');
}

function date_es($fecha)
{
     $date_es=array();
     $date_es['dia']=strftime('%a',$fecha);
     $date_es['DIA']=strftime('%A',$fecha);
     $date_es['mes']=strftime('%b',$fecha);
     $date_es['MES']=strftime('%B',$fecha);
     return $date_es;
}


function new_pasaporte($penti,$pdescri,$pdirecc="")
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     
  $codigo=new_enti();
  $sql_updt ='update enti0 set ';
  $sql_updt.='enti_pasaporte="'.$penti.'",';
  $sql_updt.='enti_descri="'.$pdescri.'",';
  $sql_updt.='enti_direccion="'.$pdirecc.'",';
  $sql_updt.='enti_status="-" ';
  $sql_updt.='where enti_codigo="'.$codigo.'"';
  $res_updt=msql_query($sql_updt,$link_data);
  return $codigo;
     
}


function vndd_ok()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_vndd='select * from vndd0';
     $res_vndd=msql_query($sql_vndd,$link_data);
     $vndd_ok=0;
     if(msql_num_rows($res_vndd)>1){$vndd_ok=1;}
     if(msql_num_rows($res_vndd)>10){$vndd_ok=2;}
     return $vndd_ok;     
}

function rcdd_ok()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_rcdd='select * from rcdd0';
     $res_rcdd=msql_query($sql_rcdd,$link_data);
     $rcdd_ok=0;
     if(msql_num_rows($res_rcdd)>1){$rcdd_ok=1;}
     if(msql_num_rows($res_rcdd)>10){$rcdd_ok=2;}
     return $rcdd_ok;     
}

function mcnc_ok()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_mcnc='select * from mcnc0';
     $res_mcnc=msql_query($sql_mcnc,$link_data);
     $mcnc_ok=0;
     if(msql_num_rows($res_mcnc)>1){$mcnc_ok=1;}
     if(msql_num_rows($res_mcnc)>10){$mcnc_ok=2;}
     return $mcnc_ok;     
}

function rgsn_ok()
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $sql_rgsn='select * from item0 where ifnull(item_rgsn,"")!=""';
     $res_rgsn=msql_query($sql_rgsn,$link_data);
     $rgsn_ok=0;
     if(msql_num_rows($res_rgsn)>1){$rgsn_ok=1;}
     if(msql_num_rows($res_rgsn)>10){$rgsn_ok=2;}
     return $rgsn_ok;     
}

function vali_sexo($codigo='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
          $sql_sex0='select * from enti0 ';
          $sql_sex0.='where ifnull(enti_sexo,0)=0 ';
          $sql_sex0.='and substring(enti_codigo,3,1)!=9 ';
          $sql_sex0.='and ifnull(enti_nom1,"")!="" ';
          $sql_sex0.='and length(trim(enti_codigo))=10 ';
          if(!empty($codigo))
          {$sql_sex0.='and enti_codigo like "'.substr($codigo,0,10).'%" ';}
          $res_sex0=msql_query($sql_sex0,$link_data);
     
          msql_data_seek($res_sex0);
          while($aso_sex0=msql_fetch_assoc($res_sex0))
          {
               $sql_sex12='select * from enti0 where ifnull(enti_sexo,0)!=0 and enti_nom1="'.$aso_sex0['enti_nom1'].'" order by enti_sexo limit 1 ';
               $res_sex12=msql_query($sql_sex12,$link_data);
               
               if(msql_num_rows($res_sex12)==0)
               {
                    $sql_sex12='select * from enti0 where ifnull(enti_sexo,0)!=0 and enti_nom2="'.$aso_sex0['enti_nom1'].'" order by enti_sexo limit 1 ';
                    $res_sex12=msql_query($sql_sex12,$link_data);
               }
               if(msql_num_rows($res_sex12)==0)
               {
                    $sql_sex12='select * from enti0 where ifnull(enti_sexo,0)!=0 and enti_nom1="'.$aso_sex0['enti_nom2'].'" order by enti_sexo limit 1 ';
                    $res_sex12=msql_query($sql_sex12,$link_data);
               }
               if(msql_num_rows($res_sex12)==0)
               {
                    $sql_sex12='select * from enti0 where ifnull(enti_sexo,0)!=0 and enti_nom2="'.$aso_sex0['enti_nom2'].'" order by enti_sexo limit 1 ';
                    $res_sex12=msql_query($sql_sex12,$link_data);
               }
               
               if(msql_num_rows($res_sex12)>0)
               {
                    $sql_updt='update enti0 set enti_sexo="'.msql_result($res_sex12,0,'enti_sexo').'" where enti_codigo like "'.substr($aso_sex0['enti_codigo'],0,10).'%"';
                    $res_updt=msql_query($sql_updt,$link_data);
               }
          }
}


function url_valid($url='')
{
     if(empty($url)){return;}
     
     $curl = curl_init($url);
     // Configura las opciones de curl
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($curl, CURLOPT_NOBODY, true); // Para solo obtener el encabezado y no el contenido completo
     curl_setopt($curl, CURLOPT_TIMEOUT, 10); // Establece un tiempo de espera de 10 segundos
     
     // Ejecuta la solicitud
     $response = curl_exec($curl);

     $url_ok=0;
     
     if ($response !== false && curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200)
     {$url_ok=1;}
     
     return $url_ok;
}


function verificarWebService($url) 
{
    $curl = curl_init();

    // Configurar CURL
    curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10, // Tiempo límite de espera
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false, // Deshabilita la verificación SSL (puedes habilitarla si tienes un certificado válido)
    ]);

    $respuesta = curl_exec($curl);
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    $error = curl_error($curl);

    curl_close($curl);

    if ($respuesta && $httpCode === 200) {
         return 1;
        return "El webservice está funcionando correctamente.";
    } elseif ($error) {
        return "Error al conectar con el webservice: $error";
    } else {
        return "El webservice no está disponible (HTTP Code: $httpCode).";
    }
}

// URL del webservice
// $url = "https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl";

// // Verificar el estado del webservice
// echo verificarWebService($url);


function xml_chr13($xmlstr)
{
     $xmlstr=str_replace('<',chr(13).'<',$xmlstr);
     $xmlstr=str_replace(chr(13).'</','</',$xmlstr);
//      $xmlstr=str_replace('><','>'.chr(13).'<',$xmlstr);
     if(substr($xmlstr,0,1)==chr(13))
     {$xmlstr=substr($xmlstr,1);}
     return $xmlstr;  
}




function esc_string($string,$link_data='')
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     $esc_string=$link_data->real_escape_string($string);
     return $esc_string;
}


function err_autor($autormsj)
{
     $err_autor=[2,10,27,37,39,40,46,52,56,57,58,63,80];
     $numident=$autormsj;
     $numident=substr($numident,strpos($numident,'==>IDENT'));
     $numident=substr($numident,0,strpos($numident,'==>ERROR'));
     $numident=substr($numident,strpos($numident,':')+1);
     if(in_array((int)$numident,$err_autor)){return $numident;}
     return;
}

function removeNode($node)
{
     if($node){$node->parentNode->removeChild($node);}
}


function color_cxcp($diasv)
{
     $xstyle='';
     if($diasv>0){$xstyle='background-color:lightcyan; color:black; ';}
     if($diasv>15){$xstyle='background-color:lightyellow; color:black; ';}
     if($diasv>30){$xstyle='background-color:gold; color:black; ';}
     if($diasv>60){$xstyle='background-color:darkorange; color:white; ';}
     if($diasv>90){$xstyle='background-color:crimson; color:white; ';}
     if($diasv>120){$xstyle='background-color:darkred; color:white; ';}
     if($diasv>180){$xstyle='background-color:darkslategray; color:white; ';}
     if($diasv>360){$xstyle='background-color:black; color:white; ';}
     return $xstyle;
//      border-right: 2px solid red;
}
  

function rand_useragent()
{
    $sistemasOperativos = [
        'Windows NT 10.0; Win64; x64',
        'Windows NT 6.1; WOW64',
        'Macintosh; Intel Mac OS X 10_15_7',
        'X11; Linux x86_64',
        'Android 10; Mobile',
        'iPhone; CPU iPhone OS 15_4 like Mac OS X'
    ];

    $navegadores = [
        'Chrome/91.0.4472.124',
        'Firefox/89.0',
        'Safari/537.36',
        'Edge/91.0.864.54',
        'Opera/76.0.4017.177'
    ];

    $motorRenderizado = [
        'AppleWebKit/537.36 (KHTML, like Gecko)',
        'Gecko/20100101'
    ];

    $sistema = $sistemasOperativos[array_rand($sistemasOperativos)];
    $navegador = $navegadores[array_rand($navegadores)];
    $motor = $motorRenderizado[array_rand($motorRenderizado)];

    return "Mozilla/5.0 ($sistema) $motor $navegador";
}

// Ejemplo de uso
// $userAgent = generarUserAgentAleatorio();
// echo $userAgent;





function fillzero($pnum,$plong=9,$pfill="0")
{
     $signo='';
     if($pnum<0){$signo='-';}
     $numfz=str_pad($pnum, $plong, $pfill, STR_PAD_LEFT);
     $numfz=$signo.str_replace('-','0',$numfz);
     return $numfz;
}


function explode2($char,$string)
{
    // $explode2=array();
    
    $array1=explode($char,$string);
    $array2=array();
    for($idx=0; $idx<count($array1); $idx++)
    {$array2[$idx]=$array1[$idx];}
    return $array2;
}



function Xfile_get_contents2($url) 
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    // $data=file_get_contents($url);
    return $data;
}

function file_get_contents2($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Deshabilita la verificación SSL (usar con precaución)
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        $error = curl_error($ch);
        curl_close($ch);
        return "Error en cURL: $error";
    }

    curl_close($ch);
    return $response;
}




function deleteDirectory($dir) {
    if (!is_dir($dir)) {
        return false;
    }

    $files = array_diff(scandir($dir), ['.', '..']);

    foreach ($files as $file) {
        $path = $dir . DIRECTORY_SEPARATOR . $file;
        is_dir($path) ? deleteDirectory($path) : unlink($path);
    }

    return rmdir($dir);
}

// Uso:
// $directory = 'ruta/del/directorio';
// if (deleteDirectory($directory)) {
//     echo "Directorio eliminado con éxito.";
// } else {
//     echo "Error al eliminar el directorio.";
// }



function isfreemail($email) {
    $dominiosGratuitos = [
        'gmail.com', 'hotmail.com', 'outlook.com', 'yahoo.com', 'icloud.com',
        'aol.com', 'live.com', 'msn.com', 'protonmail.com'
    ];
    
    $partes = explode('@', $email);
    if (count($partes) != 2) {
        return false; // No es un correo válido
    }
    
    $dominio = strtolower($partes[1]);
    return in_array($dominio, $dominiosGratuitos);
}

// Ejemplo de uso:
// $email = "juanito@gmail.com";

// if (esCorreoGratuito($email)) {
//     echo "Es un correo gratuito.";
// } else {
//     echo "Es un correo corporativo.";
// }




// Función para limpiar texto
function limpiarTexto($texto) {
    $texto = trim($texto);
    $texto = html_entity_decode($texto);
    $texto = preg_replace('/\s+/', ' ', $texto);
    return $texto;
}


function html2text($html)
{
     
$html='<html2text>'.$html.'</html2text>';     
     
// Cargar HTML
// $html = file_get_contents('tu_archivo.html');

// Crear un DOMDocument para manipular el HTML
$doc = new DOMDocument();
libxml_use_internal_errors(true); // Evitar warnings de HTML mal formado
$doc->loadHTML($html);
libxml_clear_errors();

// Crear el texto final
$output = "";

$ctab=0;
     
// Recorrer los nodos principales
foreach ($doc->getElementsByTagName('body')->item(0)->childNodes as $node) {
    if ($node->nodeType === XML_ELEMENT_NODE) 
    {
        $tag = $node->nodeName;

        if (in_array($tag, ['h1', 'h2', 'h3', 'h4'])) {
            // Titulares en mayúscula
            $output .= "\n\n" . strtoupper(limpiarTexto($node->textContent)) . "\n";
            $output .= str_repeat('=', 50) . "\n"; // Línea separadora
        } elseif ($tag === 'p') {
            $output .= limpiarTexto($node->textContent) . "\n";
        } elseif ($tag === 'table') {
            // Procesar tabla
//              echo '===>>>'.$ctab++;
            foreach ($node->getElementsByTagName('tr') as $tr) {
                $fila = [];
                foreach ($tr->getElementsByTagName('td') as $td) {
                    $fila[] = limpiarTexto($td->textContent);
                }
                $output .= implode(' | ', $fila) . "\n";
            }
            $output .= str_repeat('-', 50) . "\n"; // Separador entre tablas
        } elseif ($tag === 'br') {
            $output .= "\n";
        }
    }
}

// Mostrar el resultado
// echo nl2br($output);
     

// echo '====== >>> '.$output;     
     
// $output=nl2br($output);
     
return $output;
     
}

function last_error()
{
     $error = error_get_last();
     if ($error) {
         echo '<br>'; 
         echo "Último error:\n";
         echo "Tipo: " . $error['type'] . "\n";
         echo "Mensaje: " . $error['message'] . "\n";
         echo "Archivo: " . $error['file'] . "\n";
         echo "Línea: " . $error['line'] . "\n";
     }
//      else {
//          echo '<br>'; 
//          echo "No se ha producido ningún error.";
//      }               
}





function deco_vinn($vin)
{
    $resultado = [];
    $vin=alltrim($vin);
    $vin = strtoupper($vin);

     
    $vin=str_replace('o','0',$vin); 
    $vin=str_replace('q','0',$vin); 
    $vin=str_replace('i','1',$vin); 
     
    if (preg_match('/[IOQÑ]/i', $vin)){$resultado['error'] = 'VIN inválido.';return $resultado;} 
    if (strlen($vin) !== 17) {$resultado['error'] = 'VIN inválido.';return $resultado;}
     
//     if(!vali_vinn($vin)){$resultado['error'] = 'VIN inválido.';return $resultado;}


     $mapaPaises = [];
     {
          $mapaPaises['1'] = 'Estados Unidos';
          $mapaPaises['2'] = 'Canadá';
          $mapaPaises['3'] = 'México';
          $mapaPaises['4'] = 'Estados Unidos';
          $mapaPaises['5'] = 'Estados Unidos';
          $mapaPaises['6'] = 'Australia';
          $mapaPaises['7'] = 'Nueva Zelanda';
          $mapaPaises['8'] = 'Argentina';
          $mapaPaises['9'] = 'Brasil';

          $mapaPaises['A'] = 'Sudáfrica';
          $mapaPaises['B'] = 'Egipto';
          $mapaPaises['C'] = 'Kenia';
          $mapaPaises['D'] = 'Marruecos';
          $mapaPaises['E'] = 'Etiopía';
          $mapaPaises['F'] = 'Ghana';
          $mapaPaises['G'] = 'Nigeria';
          $mapaPaises['H'] = 'Mozambique';

          $mapaPaises['J'] = 'Japón';
          $mapaPaises['K'] = 'Corea del Sur';
          $mapaPaises['L'] = 'China';
          $mapaPaises['M'] = 'India';
          $mapaPaises['N'] = 'Irán';
          $mapaPaises['P'] = 'Filipinas';
          $mapaPaises['R'] = 'Taiwán';

          $mapaPaises['S'] = 'Reino Unido';
          $mapaPaises['T'] = 'Suiza';
          $mapaPaises['U'] = 'Hungría';
          $mapaPaises['V'] = 'Francia o España';
          $mapaPaises['W'] = 'Alemania';
          $mapaPaises['X'] = 'Países Bajos';
          $mapaPaises['Y'] = 'Suecia o Finlandia';
          $mapaPaises['Z'] = 'Italia';

     }

     
     
     
     
    // Caracteres válidos en el código de año del VIN
    $caracteres = ['A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T','V','W','X','Y','1','2','3','4','5','6','7','8','9'];
    $mapaAnios = [];

    $totalCaracteres = count($caracteres);
     // Generar mapa de años automáticamente (de 1980 a 2030)
    for ($anio = 1980; $anio <= (1980+60); $anio++)
    {
        // El código se repite cada 30 años, así que usamos el índice ciclando
        $indice = ($anio - 1980) % $totalCaracteres;
        $mapaAnios[$caracteres[$indice]] = $anio;
    }
     

    // MZB GB814A PN070211     

    // Secciones del VIN
    $wmi = substr($vin, 0, 3);
    $vds = substr($vin, 3, 6);
    $vis = substr($vin, 9, 8);
    $pais = isset($mapaPaises[$vin[0]]) ? $mapaPaises[$vin[0]] : 'Desconocido';
    $anioChar = $vin[9];
    $anio = isset($mapaAnios[$anioChar]) ? $mapaAnios[$anioChar] : 'Desconocido';
    $fabricante = $wmi;
    $planta = $vin[10];
    $numeroSerie = substr($vin, 11, 6);

    // Construcción manual del resultado
    $resultado = [];
    $resultado['vin'] = $vin;
    $resultado['pais'] = $pais;
    $resultado['wmi'] = $fabricante;
    $resultado['vds'] = $vds;
    $resultado['vis'] = $vis;
    $resultado['anio'] = $anio;
    $resultado['planta'] = $planta;
    $resultado['serie'] = $numeroSerie;
     
     
    $fabricante_des=$fabricante; 
    $vwmi0=data_maes('vwmi',$fabricante);
    if(!empty($vwmi0['vwmi_descri']))
    {$fabricante_des=$vwmi0['vwmi_descri'];}
     
     
    $resultado['Fabricante (WMI)'] = $fabricante_des;
    $resultado['VDS (Descripción del vehículo)'] = $vds;
    $resultado['VIS (Número de serie)'] = $vis;

    return $resultado;
}

function sync_mdvinplvh($codigo)
{
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(empty($docu)){return;}
     
//           $sql_updt='update vinn0 set vinn_plvh="'.$plvh.'" where vinn_codigo="'.$vinn.'" and length(trim(ifnull(vinn_plvh,"")))<'.strlen($plvh).'';
//           $res_updt=msql_query($sql_updt,$link_data);
          
//           $sql_updt='update plvh0 set plvh_vinn="'.$vinn.'" where plvh_codigo="'.$plvh.'" and length(trim(ifnull(plvh_vinn,"")))<'.strlen($vinn).'';
//           $res_updt=msql_query($sql_updt,$link_data);
     
}

?>