<?php
/**
* Extraido de http://ecapy.com/reemplazar-la-n-acentos-espacios-y-caracteres-especiales-con-php-actualizada/
* Reemplaza todos los acentos por sus equivalentes sin ellos
*
* @param $string
*  string la cadena a sanear
*
* @return $string
*  string saneada
*/
function eliminar_simbolos($string){
 
    $string = trim($string);
 
    $string = str_replace(
        array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
        array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
        $string
    );
 
    $string = str_replace(
        array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
        array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
        $string
    );
 
    $string = str_replace(
        array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
        array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
        $string
    );
 
    $string = str_replace(
        array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
        array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
        $string
    );
 
    $string = str_replace(
        array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
        array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
        $string
    );
 
    $string = str_replace(
        array('ñ', 'Ñ', 'ç', 'Ç'),
        array('n', 'N', 'c', 'C',),
        $string
    );
 
    $string = str_replace(
        array("\\", "¨", "º", "-", "~",
             "#", "@", "|", "!", "\"",
             "·", "$", "%", "&", "/",
             "(", ")", "?", "'", "¡",
             "¿", "[", "^", "<code>", "]",
             "+", "}", "{", "¨", "´",
             ">", "< ", ";", ",", ":",
             ".", " "),
        ' ',
        $string
    );
return $string;
} 
// funcion para calcular clave de facturas se debe programar para la clave de todos los documentos

function clave_documentos($db,$idfact,$ambie,$docum,$tipcomp,$serie1){     // $docum puede ser numfact, numnc o .........
   
    $data_fac = $db->select("SELECT * FROM facturascli where idfactura=".$idfact.";");
    if (is_array($data_fac))
    {
       foreach($data_fac as $fac)
         {
            $idfactura     = ($fac['idfactura']);   
            $codigo        = ($fac['codigo']);   
            $fecha         = ($fac['fecha']);
            $numf          = ($fac['numfact']);
            $numnc         = ($fac['numnc']);
            $codalmacen    = ($fac['codalmacen']); 
         }
    }

    $sqldoc   = "SELECT max(".$docum.") as numncx FROM facturascli where codalmacen ='".$codalmacen."';";
    //print_r("sql doc ". $sqldoc."    doc ".$docum); 
    $data_NAC = $db->select($sqldoc);   // factura rectificativa orden del secuancial
    if (is_array($data_NAC))
    {
       foreach($data_NAC as $alm)
    {
        $numdoc = ($alm['numncx']);   
    }
    } else {
        $numdoc = 0;          
    }  
    
        if(is_numeric($numdoc)) {
            //print_r(" max num ".is_numeric($numdoc));
            $maxnum = $numdoc;
        }else{
            $numdoc = 0;
        }
        
    



    $data_alm = $db->select("SELECT administrador , nombre, direccion, cifnif FROM empresa WHERE id=1 ;");
    if (is_array($data_alm))
    {
        foreach($data_alm as $alm)
    {
        $rucalmacen = ($alm['cifnif']);   
        $nombre = ($alm['nombre']);   
        $direccionalma = ($alm['direccion']);   
         //$this->new_message("datos almacen ". $contacto."  nombre ".$nombre); 
    }
    }else {
        $this->new_message("Problemas con datos de la EMPRESA");
    }
    
    
    
    $dia          = substr($fecha, 8, 2); 
    $mes          = substr($fecha, 5, 2); 
    $ano          = substr($fecha, 0, 4); 
    
    $numruc       = $rucalmacen;    // numero RUC de empresa
    $tipambiente  = $ambie;       //  tipo de ambiente 1-> pruebas   2 -> produccion
    $serie        = $serie1.'099';
    // cuando es factura
    if ($docum=='numfact') {
        //print_r("numdoc-a  ".$numdoc1);
        if ($numf > 0) {
           $maxnum    = $numf  ;
           //print_r("numdoc-b  ".$maxnum."  ");
  
        }else {
           $maxnum    = $maxnum + 1;
           //print_r("numdoc-c  ".$maxnum);
 
        }
    }
    // cuando es nota de credito
    if ($docum=='numnc') {
       if ($numnc > 0) {
           $maxnum    = $numnc  ;
           //print_r("numdoc-b  ".$maxnum."  ");
  
        }else {
           $maxnum    = $maxnum + 1;
           //print_r("numdoc-c  ".$maxnum);
 
        }
    }

    $secuencial   =  substr(str_pad($maxnum, 9, "0", STR_PAD_LEFT), -9); 
    $codigof      =  substr(str_pad($codigo, 8, "0", STR_PAD_LEFT),-8);
    $tipoEmi      =  1;
    $clavefac     = $dia.$mes.$ano.$tipcomp.$rucalmacen.$tipambiente.$serie.$secuencial.$codigof.$tipoEmi;
    $fechafac     = $dia."/".$mes."/".$ano;
    //
    //print_r($clavefac);
    $dv = valida_dv($clavefac,""); //'');
    $clave=$dv;       
    // print_r("clave en func ".$clave);

return $clave;
} 

function valida_dv($baseVal = "", $separator = '-')
{
    $result = "";
    $weight = [ 2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7,
                2, 3, 4, 5, 6, 7  
            ];
    /* For convenience, reverse the string and work left to right. */
    $reversedBseVal = strrev($baseVal);
    for ($i=0, $sum=0; $i < strlen($reversedBseVal); $i++) {
        /* Calculate product and accumulate. */
        $sum += substr($reversedBseVal, $i, 1) * $weight[$i];
    }
    /* Determine check digit, and concatenate to base value. */
    $remainder = $sum % 11;
    switch ($remainder) {
        case 0:
            $result = "{$baseVal}{$separator}0";
            break;
        case 1:
            $result = "{$baseVal}{$separator}1";
            break;
        default:
            $checkDigit = 11 - $remainder;
            $result = "{$baseVal}{$separator}{$checkDigit}";
            break;
    }
    return $result;
}

