Formata um número de CPF. Se o número não for um CPF válido apenas
    retorna o argumento sem qualquer modificação.
966394
def as_cpf(numero):
    
    _num = digitos(numero)
    if is_cpf(_num):
        return '{}.{}.{}-{}'.format(_num[:3], _num[3:6], _num[6:9], _num[9:])
    return numero
1206899
def ler_configuracao
      #@artigo.merge!(YAML.load(ler_arquivo(Formatafacil::Tarefa.arquivo_configuracao)))
      #converte_parametros_para_boolean

      #@modelo = @artigo['modelo']
      if File.exist?(@arquivo_abstract) then
        @artigo['abstract'] = ler_arquivo(@arquivo_abstract)
        @artigo.merge!(ler_metadados_do_arquivo(@arquivo_abstract))
      end
      if File.exist?(@arquivo_resumo) then
        @artigo['resumo'] = ler_arquivo(@arquivo_resumo)
      end
      @artigo['bibliografia'] = ler_arquivo(@arquivo_bibliografia) if File.exist?(@arquivo_bibliografia)

      #unifica_metadados

    end
245620
protected function getCampoLivre()
    {
        if ($this->campoLivre) {
            return $this->campoLivre;
        }

        $campoLivre = Util::numberFormatGeral($this->getCarteira(), 3);
        $campoLivre .= Util::numberFormatGeral($this->getNossoNumero(), 9);
        $campoLivre .= Util::numberFormatGeral($this->getAgencia(), 4);
        $campoLivre .= Util::numberFormatGeral($this->getConta(), 5);
        $campoLivre .= CalculoDV::itauContaCorrente($this->getAgencia(), $this->getConta());
        $campoLivre .= '000';

        return $this->campoLivre = $campoLivre;
    }
948708
public function execute(\PhpSigep\Model\CalcPrecoPrazo $params)
    {
        $larguraMinima     = 0;
        $alturaMinima      = 0;
        $comprimentoMinimo = 16;
        $diametroMinimo    = 0;

        $tipoEmbalagem = $params->getDimensao()->getTipo();
        $ehEnvelope    = false;
        if ($tipoEmbalagem == Dimensao::TIPO_ENVELOPE) {
            $ehEnvelope       = true;
            $formatoEncomenda = 3;
            $larguraMinima    = 11;
        } else if ($tipoEmbalagem == Dimensao::TIPO_PACOTE_CAIXA) {
            $formatoEncomenda = 1;
            $alturaMinima     = 2;
            $larguraMinima    = 11;
        } else {
            if ($tipoEmbalagem == Dimensao::TIPO_ROLO_CILINDRO) {
                $formatoEncomenda  = 2;
                $comprimentoMinimo = 18;
                $diametroMinimo    = 5;
            } else {
                throw new Exception('Tipo de embalagem "' . $tipoEmbalagem . '" não reconhecido.');
            }
        }

        $maoPropria         = false;
        $valorDeclarado     = 0;
        $avisoRecebimento   = false;
        $servicosAdicionais = $params->getServicosAdicionais();
        $servicosAdicionais = ($servicosAdicionais ? $servicosAdicionais : array());
        foreach ($servicosAdicionais as $servicoAdicional) {
            if ($servicoAdicional->is(ServicoAdicional::SERVICE_MAO_PROPRIA)) {
                $maoPropria = true;
            } else if ($servicoAdicional->is(ServicoAdicional::SERVICE_VALOR_DECLARADO_SEDEX) || $servicoAdicional->is(ServicoAdicional::SERVICE_VALOR_DECLARADO_PAC)) {
                if (!$servicoAdicional->getValorDeclarado()) {
                    throw new Exception('Para usar o serviço "valor declarado" é necessário declarar o valor da mercadoria.');
                }
                $valorDeclarado = $servicoAdicional->getValorDeclarado();
            } else if ($servicoAdicional->is(ServicoAdicional::SERVICE_AVISO_DE_RECEBIMENTO)) {
                $avisoRecebimento = true;
            }
        }

        $servivosDePostagem = array();
        /** @var $servivoDePostagem ServicoDePostagem */
        foreach ($params->getServicosPostagem() as $servivoDePostagem) {
            $servivosDePostagem[] = $servivoDePostagem->getCodigo();
        }

        $ajustarDimensaoMinima = $params->getAjustarDimensaoMinima();

        $comprimento = (int)$params->getDimensao()->getComprimento();
        $comprimento = $comprimento < $comprimentoMinimo && $ajustarDimensaoMinima ? $comprimentoMinimo : $comprimento;
        $altura      = $ehEnvelope ? 0 : ((int)$params->getDimensao()->getAltura());
        $altura      = $altura < $alturaMinima && $ajustarDimensaoMinima ? $alturaMinima : $altura;
        $largura     = (int)$params->getDimensao()->getLargura();
        $largura     = $largura < $larguraMinima && $ajustarDimensaoMinima ? $larguraMinima : $largura;
        $diametro    = (int)$params->getDimensao()->getDiametro();
        $diametro    = $diametro < $diametroMinimo && $ajustarDimensaoMinima ? $diametroMinimo : $largura;

        $soapArgs = array(
            'nCdEmpresa'          => $params->getAccessData()->getCodAdministrativo(),
            'sDsSenha'            => $params->getAccessData()->getSenha(),
            'nCdServico'          => implode(',', $servivosDePostagem),
            'sCepOrigem'          => str_replace('-', '', $params->getCepOrigem()),
            'sCepDestino'         => str_replace('-', '', $params->getCepDestino()),
            'nVlPeso'             => $params->getPeso(),
            'nCdFormato'          => $formatoEncomenda,
            'nVlComprimento'      => $comprimento,
            'nVlAltura'           => $altura,
            'nVlLargura'          => $largura,
            'nVlDiametro'         => $diametro,
            'sCdMaoPropria'       => ($maoPropria ? 'S' : 'N'),
            'nVlValorDeclarado'   => $valorDeclarado,
            'sCdAvisoRecebimento' => ($avisoRecebimento ? 'S' : 'N'),
        );

        $cacheKey = md5(serialize($soapArgs));
        $cache    = Bootstrap::getConfig()->getCacheInstance();
        if ($cachedResult = $cache->getItem($cacheKey)) {
            return unserialize($cachedResult);
        }

        $result = new Result();
        try {
            $r = SoapClientFactory::getSoapCalcPrecoPrazo()->calcPrecoPrazo($soapArgs);
        } catch (\Exception $e) {
            $message = $e->getMessage();
            if ($message == 'Service Unavailable') {
                if (!self::$calcPrecosPrazosServiceUnavailable) {
                    //Tenta mais uma vez
                    self::$calcPrecosPrazosServiceUnavailable = true;
                    sleep(1);

                    return $this->calcPrecoPrazo($params);
                }
            }
            if ($e instanceof \SoapFault) {
                $result->setIsSoapFault(true);
                $result->setErrorCode($e->getCode());
                $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage()));
            } else {
                $result->setErrorCode($e->getCode());
                $result->setErrorMsg($e->getMessage());
            }
        }

        if (class_exists('\StaLib_Logger',false)) {
            \StaLib_Logger::log('Retorno SIGEP: ' . print_r($r, true));
        }

        $retorno = array();
        if (is_object($r) && property_exists($r, 'CalcPrecoPrazoResult') && is_object($r->CalcPrecoPrazoResult)
            && $r->CalcPrecoPrazoResult->Servicos && is_object($r->CalcPrecoPrazoResult->Servicos)
        ) {
            if ($r->CalcPrecoPrazoResult->Servicos->cServico) {
                $servicos = $r->CalcPrecoPrazoResult->Servicos->cServico;
                $servicos = (is_array($servicos) ? $servicos : array($servicos));

                foreach ($servicos as $servico) {
                    $valor                 = (float)str_replace(',', '.', str_replace('.', '', $servico->Valor));
                    $valorMaoPropria       = str_replace('.', '', $servico->ValorMaoPropria);
                    $valorMaoPropria       = (float)str_replace(',', '.', $valorMaoPropria);
                    $valorAvisoRecebimento = str_replace('.', '', $servico->ValorAvisoRecebimento);
                    $valorAvisoRecebimento = (float)str_replace(',', '.', $valorAvisoRecebimento);
                    $valorValorDeclarado   = str_replace('.', '', $servico->ValorValorDeclarado);
                    $valorValorDeclarado   = (float)str_replace(',', '.', $valorValorDeclarado);

                    $item = new \PhpSigep\Model\CalcPrecoPrazoResposta(array(
                        'servico'               => new \PhpSigep\Model\ServicoDePostagem($servico->Codigo),
                        'valor'                 => $valor,
                        'prazoEntrega'          => (int)$servico->PrazoEntrega,
                        'valorMaoPropria'       => $valorMaoPropria,
                        'valorAvisoRecebimento' => $valorAvisoRecebimento,
                        'valorValorDeclarado'   => $valorValorDeclarado,
                        'entregaDomiciliar'     => ($servico->EntregaDomiciliar == 'S'),
                        'entregaSabado'         => ($servico->EntregaSabado == 'S'),
                    ));

                    $item->setErroCodigo($servico->Erro);
                    if ($item->getErroCodigo() && ($item->getErroCodigo() != 10 || !$item->getValor())) {
                        // Se entrar aqui significa que tem Erro e que esse Erro é diferente de 10 ou o Erro é 10 mas não
                        // não foi retornando o Valor.
                        // O erro "10" é mais um aviso do que um erro. Se for erro 10 e tiver valor, não considera um erro.
                        $msgErro = $servico->MsgErro;
                        $msgErro = SoapClientFactory::convertEncoding($msgErro);
                        $item->setErroMsg($msgErro);
                    } else {
                        $item->setErroCodigo(null);
                    }
                    $retorno[] = $item;
                }
            } else {
                $result->setErrorCode(0);
                $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "Faltando a entrada \'cServico\'."');
            }
        } else {
            $result->setErrorCode(0);
            if (is_object($r)) {
                $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "A resposta recebida é um objeto, mas este objeto não possui todos as entradas necessárias."');
            } else {
                $result->setErrorMsg('A resposta do Correios não está no formato esperado. Resposta recebida: "' .
                    $r . '"');
            }
        }

        $retornoIterator = new \PhpSigep\Model\CalcPrecoPrazoRespostaIterator($retorno);
        $result->setResult($retorno);

        if (!$result->hasError()) {
            if ($retornoIterator->todosTemErro()) {
                $erros = array();
                /** @var $retItem \PhpSigep\Model\CalcPrecoPrazoResposta */
                foreach ($retornoIterator as $retItem) {
                    $erros[$retItem->getErroCodigo()] = $retItem;
                }
                /** @var $exception \PhpSigep\Model\CalcPrecoPrazoResposta */
                $exception         = null;
                $errosPrioritarios = array('999', '-3', '-2', '-4', '-33', '7');
                foreach ($errosPrioritarios as $erroPrioritario) {
                    if (isset($erros[$erroPrioritario])) {
                        $exception = $erros[$erroPrioritario];
                        break;
                    }
                }
                if (!$exception) {
                    $exception = reset($erros);
                }
                $result->setErrorCode($exception->getErroCodigo());
                $result->setErrorMsg($exception->getErroMsg());
            } else {
                $cache->setItem($cacheKey, serialize($result));
            }
        }

        return $result;
    }
261797
private function setupHeader()
    {
        // Não existem linhas de cabeçalho
        if ($this->getHeaderNumRows() == 0) {
            return false;
        }

        foreach ($this->header_rows as $index => $row) {

            $line = $index+1;

            // Insere a nova linha
            $this->getActiveSheet()->insertNewRowBefore($line, 1);

            // A linha possui estilos personalizados?
            $styles = count($row['styles'])>0 ? $row['styles'] : [];
            $styles = $this->normalizeStyles($styles, 'header');

            // Mescla as colunas para criar as linhas de cabeçalho
            if ($row['colspan'] == 'auto') {
                $row['colspan'] = $this->getLastColumn();
            }
            $colspan = $this->getColumnVowel($row['colspan']);
            $this->getActiveSheet()->mergeCells("A{$line}:{$colspan}{$line}");

            // Adiciona o conteudo formatado na linha
            $content = $this->parseHtmlText($row['content'], $styles);
            $this->getActiveSheet()->getCell("A{$line}")->setValue($content);

            $this->debugStyle('header', $line, 1, 'text-content', $this->last_text_content);
            $this->debugStyle('header', $line, 1, 'row-styles-setted', $row['styles']);

            // Aplica os estilos
            $this->applyStyles('header', $line, 1, $styles);
        }
    }
1060444
public static function modulo10($num)
    {
        $numtotal10 = 0;
        $fator = 2;
        $numeros = array();
        $parcial10 = array();

        // Separacao dos numeros
        for ($i = strlen($num); $i > 0; $i--) {
            // pega cada numero isoladamente
            $numeros[$i] = substr($num, $i - 1, 1);
            // Efetua multiplicacao do numero pelo (falor 10)
            // 2002-07-07 01:33:34 Macete para adequar ao Mod10 do Itau
            $temp = $numeros[$i] * $fator;
            $temp0 = 0;
            foreach (preg_split('//', $temp, -1, PREG_SPLIT_NO_EMPTY) as $k => $v) {
                $temp0 += $v;
            }
            $parcial10[$i] = $temp0;
            // monta sequencia para soma dos digitos no (modulo 10)
            $numtotal10 += $parcial10[$i];
            if ($fator == 2) {
                $fator = 1;
            } else {
                $fator = 2; // intercala fator de multiplicacao (modulo 10)
            }
        }

        // varias linhas removidas, vide funcoes original
        // Calculo do modulo 10
        $resto = $numtotal10 % 10;
        $digito = 10 - $resto;
        if ($resto == 0) {
            $digito = 0;
        }

        return $digito;
    }
607845
public function set_num_format($num_format) {

        $numbers = array();

        $numbers[1] = '0';
        $numbers[2] = '0.00';
        $numbers[3] = '#,##0';
        $numbers[4] = '#,##0.00';
        $numbers[11] = '0.00E+00';
        $numbers[12] = '# ?/?';
        $numbers[13] = '# ??/??';
        $numbers[14] = 'mm-dd-yy';
        $numbers[15] = 'd-mmm-yy';
        $numbers[16] = 'd-mmm';
        $numbers[17] = 'mmm-yy';
        $numbers[22] = 'm/d/yy h:mm';
        $numbers[49] = '@';

        if ($num_format !== 0 and in_array($num_format, $numbers)) {
            $flipped = array_flip($numbers);
            $this->properties['num_format'] = $flipped[$num_format];
        }
        if (!isset($numbers[$num_format])) {
            return;
        }

        $this->properties['num_format'] = $num_format;
    }
487109
public function numberFormat()
    {
        $num = (float) ((string) $this->getRequiredParameter('number'));
        $decimals = intval((string)$this->getParameter('decimals'));
        return number_format($num, $decimals);
    }
1264579
protected function getCampoLivre()
    {
        if ($this->campoLivre) {
            return $this->campoLivre;
        }
        $length = strlen($this->getConvenio());
        $nossoNumero = $this->gerarNossoNumero();
        if (strlen($this->getNumero()) > 10) {
            if ($length == 6 && in_array($this->getCarteira(), ['16', '18']) && Util::numberFormatGeral($this->getVariacaoCarteira(), 3) == '017') {
                return $this->campoLivre = Util::numberFormatGeral($this->getConvenio(), 6) . $nossoNumero . '21';
            } else {
                throw new \Exception('Só é possível criar um boleto com mais de 10 dígitos no nosso número quando a carteira é 21 e o convênio possuir 6 dígitos.');
            }
        }
        switch ($length) {
        case 4:
        case 6:
            return $this->campoLivre = $nossoNumero . Util::numberFormatGeral($this->getAgencia(), 4) . Util::numberFormatGeral($this->getConta(), 8) . Util::numberFormatGeral($this->getCarteira(), 2);
        case 7:
            return $this->campoLivre = '000000' . $nossoNumero . Util::numberFormatGeral($this->getCarteira(), 2);
        }
        throw new \Exception('O código do convênio precisa ter 4, 6 ou 7 dígitos!');
    }
235193
function get_col_num(){
		if( ! isset($this->c) ){
			if( isset($this->children[0]) ){
				$this->c = $this->children[0]->get_col_num();
			}
			else {
				$this->c = 0;
			}
		}
		return $this->c;
	}
528016
def consulta_faixa(self, localidade, uf):
        """"""
        url = 'consultaFaixaCepAction.do'
        data = {
            'UF': uf,
            'Localidade': localidade.encode('cp1252'),
            'cfm': '1',
            'Metodo': 'listaFaixaCEP',
            'TipoConsulta': 'faixaCep',
            'StartRow': '1',
            'EndRow': '10',
        }
        html = self._url_open(url, data).read()
        return self._parse_faixa(html)
325634
protected function getCampoLivre()
    {
        if ($this->campoLivre) {
            return $this->campoLivre;
        }

        $campoLivre = '2';
        $campoLivre .= '1';
        $campoLivre .= Util::numberFormatGeral($this->getCodigoCliente(), 11); //4 digitos da agencia + 7 primeiros digitos pois os ultimos 2 são digitos verificadores
        $campoLivre .= Util::numberFormatGeral($this->getNumero(), 8);
        $campoLivre .= '40';
        $campoLivre .= CalculoDV::banrisulDuploDigito(Util::onlyNumbers($campoLivre));

        return $this->campoLivre = $campoLivre;
    }
1197989
protected function getRevertFileContents()
    {
        $lines = [];

        $sp = "    ";

        // DESEMPACOTADORES RANDÔMICOS:
        // São várias funções 'falsas' com nomes ramdômicos que,
        // internamente, invocam as funções reais de desempacotamento.
        // Apenas para dificultar o entendimento do hacker :)
        //
        // As chaves e valores são no formato 'desempacotador => metodo'.
        // Ex.:
        // 'cfForgetShow'  => 'packerOne',
        // 'cryptOf'       => 'packerTwo',
        foreach($this->map_packer_functions as $packer_name => $method_name) {
            // Renomeia o prefixo do método 'packerOne'
            // para nomear na função de desempacotamento como 'baseOne'
            $base_name = str_replace('packer', 'base', $method_name);

            $lines[] = "if (function_exists('{$packer_name}') == false){\n"
                     . $sp . "function {$packer_name}(\$data, \$revert = false){\n"
                     . $sp .$sp . "return {$base_name}(\$data);\n"
                     . $sp . "}\n"
                     . "}";
        }

        // DESEMPACOTADORES REAIS:
        // Os desempacotadores randômicos invocam três 'efetivos':
        // baseOne, baseTwo e baseThree
        $bases = array_unique($this->map_packer_functions);
        foreach($bases as $method_name) {
            // Renomeia o prefixo do método 'packerOne'
            // para nomear na função de desempacotamento como 'baseOne'
            $base_name = str_replace('packer', 'base', $method_name);
            $lines[] = "if (function_exists('{$base_name}') == false){\n"
                     . $sp . "function {$base_name}(\$data)\n"
                     // Extrai o conteúdo do método 'packer???Unpack'
                     // para gerar a função 'base???'
                     . $this->extractMethod($method_name . 'Unpack')
                     . "}";
        }

        // ARGUMENTADORES RAMDÔMICOS:
        // São várias funções 'falsas' com nomes ramdômicos que,
        // internamente apenas devolvem uma valor booleano e que
        // serão usadas como argumentos da função desempacotadora
        //
        // Veja como isso é feito no método wrapString
        foreach($this->map_argumenter_functions as $method_name) {
            $lines[] = "if (function_exists('{$method_name}') == false){\n"
                     . $sp . "function {$method_name}() { return TRUE; }\n"
                     . "}";
        }

        return implode("\n", $lines);
    }
1362158
function calcDigits(cpf)
{
    cpf = cpf.reverse();

    var v1 = 0;
    var v2 = 0;

    for (var i = 0; i < 9; i++) {
        v1 = v1 + cpf[i] * (9 - (i % 10));
        v2 = v2 + cpf[i] * (9 - ((i + 1) % 10));
    }

    v1 = (v1 % 11) % 10;
    v2 = ((v2 + v1 * 9) % 11) % 10;

    return v1 + '' + v2;
}
494121
private function writeEndereco (
        $t, $l, $w, $titulo, $nomeDestinatario, $logradouro, $numero1, $complemento, $bairro,
        $cidade, $uf, $cep = null, $destinatario = false
    ) {
        //$this->pdf->SetTextColor(51,51,51);
        if ($destinatario === true) {
            $addressPadding = 5;

            $t = $t-2;
            $this->pdf->SetDrawColor(0,0,0);
            $this->pdf->Line(0, $t, 106.36, $t);

            // Titulo do bloco: destinatario
            $this->pdf->setFillColor(0,0,0);
            $this->pdf->SetDrawColor(0,0,0);
            $this->pdf->Rect(0, $t, 36, 5, 'F');

            $this->pdf->SetFont('', 'B');
            $this->pdf->SetFontSize(11);
            $this->pdf->SetTextColor(255,255,255);
            $this->pdf->SetXY($l + 3, $t);
            $this->t($w, $titulo, 2, '');

            $this->pdf->SetTextColor(0,0,0);

            $this->pdf->Image(realpath(dirname(__FILE__)) . '/logo-correios.png', 84, $t+1, 20, 4);

            // Nome da pessoa
            $this->pdf->SetFont('', '', 11);
            $this->setFillColor(190, 190, 190);
            $this->pdf->SetX($l + $addressPadding);
            $this->multiLines($w, $nomeDestinatario, 'L');

        } else {
            $addressPadding = 2;
            $t = $t -1;
            $this->pdf->SetDrawColor(0,0,0);
            $this->pdf->Line(0, $t, 106.36, $t);

            $t++;

            // Titulo do bloco: destinatario ou remetente
            $this->pdf->SetFont('', 'B');
            $this->setFillColor(60, 60, 60);
            $this->pdf->SetFontSize(10);
            $this->pdf->SetXY(2, $t);
            $this->t($w, $titulo, 2, '');

            // Nome da pessoa
            $this->pdf->SetFont('', '', 10);
            $this->setFillColor(190, 190, 190);
            $this->pdf->SetXY(22, $t);
            $this->multiLines($w, trim($nomeDestinatario), 'L');
        }

        $w = $w - $addressPadding;
        $l = $l + $addressPadding;

        //Primeria parte do endereco
        $address1 = $logradouro;
        $numero = $numero1;
        if (!$numero || strtolower($numero) == 'sn') {
            $address1 .= ', s/ nº';
        } else {
            $address1 .= ', ' . $numero;
        }
        if ($complemento) {
            $complemento = $complemento . ' ';
        }
        $this->setFillColor(100, 190, 190);
        $this->pdf->SetX($l);
        $this->multiLines($w, $address1, 'L');

        //Segunda parte do endereco
        $this->pdf->SetX($l);

        $this->setFillColor(100, 130, 190);
        $this->multiLines($w, $complemento . $bairro, 'L');

        $this->setFillColor(100, 30, 210);
        $this->pdf->SetX($l);
        $this->pdf->SetFont('', 'B');
        $this->t($l, ($cep ? $cep . '  ' : ''), 0, 'L');

        $this->pdf->SetFont('');
        $this->pdf->SetX($l + 20);
        $this->t(15, ucfirst(trim($cidade)) . '/' . strtoupper(trim($uf)), 2, 'L');

        return $this->pdf->GetY();
    }
523257
def ProcesarPlantillaPDF(self, num_copias=1, lineas_max=24, qty_pos='izq', 
                                   clave=''):
        ""
        try:
            f = self.template
            liq = self.params_out
            # actualizo los campos según la clave (ajuste debitos / creditos)
            if clave and clave in liq:
                liq = liq.copy()
                liq.update(liq[clave])  # unificar con AnalizarAjusteCredito/Debito

            if HOMO:
                self.AgregarDatoPDF("homo", u"HOMOLOGACIÓN")

            copias = {1: 'Original', 2: 'Duplicado', 3: 'Triplicado', 
                      4: 'Cuadruplicado', 5: 'Quintuplicado'}
                        
            # convierto el formato de intercambio para representar los valores:        
            fmt_encabezado = dict([(v[0], v[1:]) for v in ENCABEZADO])
            fmt_deduccion = dict([(v[0], v[1:]) for v in DEDUCCION])
            fmt_retencion = dict([(v[0], v[1:]) for v in RETENCION])
            
            def formatear(campo, valor, formato):
                "Convertir el valor a una cadena correctamente s/ formato ($ % ...)"
                if campo in formato and v is not None:
                    fmt = formato[campo]
                    if fmt[1] == N:
                        if 'cuit' in campo:
                            c = str(valor)
                            if len(c) == 11:
                                valor = "%s-%s-%s" % (c[0:2], c[2:10], c[10:])
                            else:
                                valor = ""
                        elif 'peso' in campo:
                            valor = "%s Kg" % valor
                        elif valor is not None and valor != "":
                            valor = "%d" % int(valor)
                        else:
                            valor = ""
                    elif fmt[1] == I:
                        valor = ("%%0.%df" % fmt[2]) % valor
                        if 'alic' in campo or 'comision' in campo:
                            valor = valor + " %"
                        elif 'factor' in campo or 'cont' in campo or 'cant' in campo:
                            pass
                        else:
                            valor = "$ " + valor
                    elif 'fecha' in campo:
                        d = valor
                        if isinstance(d, (datetime.date, datetime.datetime)):
                            valor = d.strftime("%d/%m/%Y")
                        else:
                            valor = "%s/%s/%s" % (d[8:10], d[5:7], d[0:4])
                return valor

            def buscar_localidad_provincia(cod_prov, cod_localidad): 
                "obtener la descripción de la provincia/localidad (usar cache)"
                cod_prov = int(cod_prov)
                cod_localidad = str(cod_localidad)
                provincia = datos.PROVINCIAS[cod_prov]
                localidad = self.BuscarLocalidades(cod_prov, cod_localidad)
                return localidad, provincia                

            # divido los datos adicionales (debe haber renglones 1 al 9):
            if liq.get('datos_adicionales') and f.has_key('datos_adicionales1'):
                d = liq.get('datos_adicionales')
                for i, ds in enumerate(f.split_multicell(d, 'datos_adicionales1')):
                    liq['datos_adicionales%s' % (i + 1)] = ds
                
            for copia in range(1, num_copias+1):
                
                # completo campos y hojas
                f.add_page()                   
                f.set('copia', copias.get(copia, "Adicional %s" % copia))
                
                f.set('anulado', {'AC': '', '': 'SIN ESTADO',
                                  'AN': "ANULADO"}.get(liq['estado'], "ERROR"))

                try:
                    cod_tipo_ajuste = int(liq["cod_tipo_ajuste"] or '0')
                except: 
                    cod_tipo_ajuste = None
                f.set('tipo_ajuste', {3: u'Liquidación de Débito', 
                                      4: u'Liquidación de Crédito',
                                      }.get(cod_tipo_ajuste, ''))

                # limpio datos del corredor si no corresponden:
                if liq.get('actua_corredor', 'N') == 'N':
                    if liq.get('cuit_corredor', None) == 0:
                        del liq['cuit_corredor']
                    
                # establezco campos según tabla encabezado:
                for k,v in liq.items():
                    v = formatear(k, v, fmt_encabezado)
                    if isinstance(v, (basestring, int, long, float)):
                        f.set(k, v)
                    elif isinstance(v, decimal.Decimal):
                        f.set(k, str(v))
                    elif isinstance(v, datetime.datetime):
                        f.set(k, str(v))

                import wslpg_datos as datos
                
                campania = int(liq.get('campania_ppal') or 0)
                f.set("campania_ppal", datos.CAMPANIAS.get(campania, campania))
                f.set("tipo_operacion", datos.TIPOS_OP.get(int(liq.get('cod_tipo_operacion') or 0), ""))
                f.set("actividad", datos.ACTIVIDADES.get(int(liq.get('nro_act_comprador') or 0), ""))
                if 'cod_grano' in liq and liq['cod_grano']:
                    cod_grano = int(liq['cod_grano'])
                else:
                    cod_grano = int(self.datos.get('cod_grano') or 0)
                f.set("grano", datos.GRANOS.get(cod_grano, ""))
                cod_puerto = int(liq.get('cod_puerto', self.datos.get('cod_puerto')) or 0)
                if cod_puerto in datos.PUERTOS:
                    f.set("des_puerto_localidad", datos.PUERTOS[cod_puerto])

                cod_grado_ref = liq.get('cod_grado_ref', self.datos.get('cod_grado_ref')) or ""
                if cod_grado_ref in datos.GRADOS_REF:
                    f.set("des_grado_ref", datos.GRADOS_REF[cod_grado_ref])
                else:
                    f.set("des_grado_ref", cod_grado_ref)
                cod_grado_ent = liq.get('cod_grado_ent', self.datos.get('cod_grado_ent'))
                if 'val_grado_ent' in liq and int(liq.get('val_grado_ent') or 0):
                    val_grado_ent = liq['val_grado_ent']
                elif 'val_grado_ent' in self.datos:
                    val_grado_ent = self.datos.get('val_grado_ent')
                elif cod_grano in datos.GRADO_ENT_VALOR: 
                    valores = datos.GRADO_ENT_VALOR[cod_grano]
                    if cod_grado_ent in valores:
                        val_grado_ent = valores[cod_grado_ent]
                    else:
                        val_grado_ent = ""
                else:
                    val_grado_ent = ""
                f.set("valor_grado_ent", "%s %s" % (cod_grado_ent or "", val_grado_ent or ""))
                f.set("cont_proteico", liq.get('cont_proteico', self.datos.get('cont_proteico', "")))
                
                if liq.get('certificados'):
                    # uso la procedencia del certificado de depósito 
                    cert = liq['certificados'][0]
                    localidad, provincia = buscar_localidad_provincia(
                        cert['cod_prov_procedencia'],
                        cert['cod_localidad_procedencia'])
                elif liq.get('cod_prov_procedencia_sin_certificado'):
                    localidad, provincia = buscar_localidad_provincia(
                        liq['cod_prov_procedencia_sin_certificado'], 
                        liq['cod_localidad_procedencia_sin_certificado'])
                else:
                    localidad, provincia = "", ""
    
                f.set("procedencia", "%s - %s" % (localidad, provincia))
                
                # si no se especifíca, uso la procedencia para el lugar
                if not self.datos.get('lugar_y_fecha'):
                    localidad, provincia = buscar_localidad_provincia(
                        liq['cod_prov_procedencia'], 
                        liq['cod_localidad_procedencia'])
                    lugar = "%s - %s " % (localidad, provincia)
                    fecha = datetime.datetime.today().strftime("%d/%m/%Y")
                    f.set("lugar_y_fecha", "%s, %s" % (fecha, lugar))
                    if 'lugar_y_fecha' in self.datos:
                        del self.datos['lugar_y_fecha']

                if HOMO:
                    homo = "(pruebas)"
                else:
                    homo = ""
                
                if int(liq['cod_tipo_operacion'] or 0) == 1: 
                    f.set("comprador.L", "COMPRADOR:")
                    f.set("vendedor.L", "VENDEDOR:")
                    f.set("formulario", u"Form. Electrónico 1116 B %s" % homo)
                else:
                    f.set("comprador.L", "MANDATARIO/CONSIGNATARIO:")
                    f.set("vendedor.L", "MANDANTE/COMITENTE:")
                    f.set("formulario", u"Form. Electrónico 1116 C %s" % homo)
                
                if int(liq.get("coe_ajustado") or 0) or int(liq.get("nro_contrato") or 0):
                    f.set("formulario", u"Ajuste Unificado %s" % homo)

                certs = []
                for cert in liq.get('certificados', []):
                    certs.append(u"%s Nº %s" % (
                        datos.TIPO_CERT_DEP[int(cert['tipo_certificado_deposito'])],
                        cert['nro_certificado_deposito']))
                f.set("certificados_deposito", ', '.join(certs))

                for i, deduccion in enumerate(liq.get('deducciones', [])):
                    for k, v in deduccion.items():
                        v = formatear(k, v, fmt_deduccion)
                        f.set("deducciones_%s_%02d" % (k, i + 1), v)

                for i, retencion in enumerate(liq.get('retenciones', [])):
                    for k, v in retencion.items():
                        v = formatear(k, v, fmt_retencion)
                        f.set("retenciones_%s_%02d" % (k, i + 1), v)
                    if retencion['importe_certificado_retencion']:
                        d = retencion['fecha_certificado_retencion']
                        f.set('retenciones_cert_retencion_%02d' % (i + 1),
                            "%s $ %0.2f %s" % (
                                retencion['nro_certificado_retencion'] or '',
                                retencion['importe_certificado_retencion'],
                                "%s/%s/%s" % (d[8:10], d[5:7], d[2:4]), 
                            ))

                # cargo campos adicionales ([PDF] en .ini y AgregarDatoPDF)
                for k,v in self.datos.items():
                    f.set(k, v)
                
                # Ajustes:
                
                if clave:
                    f.set('subtipo_ajuste', {'ajuste_debito': u'AJUSTE DÉBITO',
                           'ajuste_credito': u'AJUSTE CRÉDITO'}[clave])
                
                if int(liq.get('coe_ajustado') or 0):
                    f.set("leyenda_coe_nro", "COE Ajustado:")
                    f.set("nro_contrato_o_coe_ajustado", liq['coe_ajustado'])
                    f.set("coe_relacionados.L", "")
                    f.set("coe_relacionados", "")
                elif liq.get('nro_contrato'):
                    f.set("leyenda_coe_nro", "Contrato Ajustado:")
                    f.set("nro_contrato_o_coe_ajustado", liq['nro_contrato'])
                    ##f.set("coe_relacionados", TODO)
                    
            return True
        except Exception, e:
            ex = utils.exception_info()
            try:
                f.set('anulado', "%(name)s:%(lineno)s" % ex)
            except:
                pass
            self.Excepcion = ex['msg']
            self.Traceback = ex['tb']
            if DEBUG:
                print self.Excepcion
                print self.Traceback
            return False
353764
protected static function mod11($num)
    {
        $codigo_beneficiario = RemessaAbstract::$entryData['codigo_beneficiario'].RemessaAbstract::$entryData['codigo_beneficiario_dv']; // NÃºmero do contrato: Ã o mesmo nÃºmero da conta
        $agencia = RemessaAbstract::$entryData['agencia']; // NÃºmero do contrato: Ã o mesmo nÃºmero da conta

        $NossoNumero = str_pad($num,7,0,STR_PAD_LEFT); // Até 7 dígitos, nÃºmero sequencial iniciado em 1 (Ex.: 1, 2...)
        $qtde_nosso_numero = strlen($NossoNumero);
        $sequencia = str_pad($agencia,4,STR_PAD_LEFT).str_pad($codigo_beneficiario,10,0,STR_PAD_LEFT).str_pad($NossoNumero,7,0,STR_PAD_LEFT);
        $cont=0;
        $calculoDv = 0;
        for($num=0;$num<21;$num++) {
            $cont++;
            if($cont == 1)
            {
                $constante = 3;
            }
            if($cont == 2)
            {
                $constante = 1;
            }
            if($cont == 3)
            {
                $constante = 9;
            }
            if($cont == 4)
            {
                $constante = 7;
                $cont = 0;
            }
            $calculoDv = $calculoDv + (substr($sequencia,$num,1) * $constante);
        }

        $Resto = $calculoDv % 11;
        if($Resto == 0 || $Resto == 1){
            $Dv = 0;
        }else{
            $Dv = 11 - $Resto;
        }

        $result["nosso_numero"] = $NossoNumero;
        $result["digito"] = $Dv;
        return $result;
    }