Seta o dígito verificador do nosso número.

@param string $carteira
@param string $nossoNumero
@param string $ifTen
@param string $ifZero
@return \Umbrella\YaBoleto\AbstractConvenio $this
19720
public function setDvNossoNumero($carteira, $nossoNumero, $ifTen = 'P', $ifZero = '0')
    {
        $this->dvNossoNumero = Number::modulo11($carteira . $nossoNumero, $ifTen, $ifZero, false, 7);

        return $this;
    }
976905
protected function gerarNossoNumero()
    {
        return Util::numberFormatGeral($this->getNumero(), 11)
            . CalculoDV::bradescoNossoNumero($this->getCarteira(), $this->getNumero());
    }
1233537
public function withNotNull()
    {
        /**
         * @var PropertyContract[] $propertiesWithNotNull
         */
        $propertiesWithNotNull = $this::$schema->getPropertiesWithNotNullConstraint();
        if (!$propertiesWithNotNull) {
            return $this;
        }

        foreach ($propertiesWithNotNull as $property) {
            if (is_null($this->{$property->getProperty()})) {
                throw new Exception("Propriedade obrigatória não pode ser nula [ " . $property->getAlias() . " ]", 400);
            }
        }

        return $this;
    }
533681
function(n) {
				
				// Es un número válido, no empieza por 0X (ej: 02) y solo contiene números y puntuación
				
				return !isNaN(parseFloat(n)) && isFinite(n) && /^(?!0\d)/.test(n) && /^[\d\.]+$/.test(n);

			}
1012555
public function recordSet($url, array $options = Array(), $useLimit = true, array $recordSetData = null) {

        /* Arquivo de configuração do datagrid */
        $configGrid = ZendConfigFile::fromFile($this->sessionAdapter->moduleIni . $this->request['__CONTROLLER__'] . DS . ((isset($options['iniGridName']) and ! empty($options['iniGridName'])) ? $options['iniGridName'] . ".ini" : "datagrid.ini"));
        $getParamsFieldGrid = $configGrid['gridfieldsconfig'];
        $getGridConfig = $configGrid['gridconfig']['grid'];

        if (isset($configGrid['gridbuttons'])) {
            $getParamsGridButtons = $configGrid['gridbuttons'];
        }

        $row = Array();

        /* Colunas do datagrid */
        $headerColNames = $columNames = Array();
        $primaryKey = null;

        $countHeaders = 0;

        foreach ($getParamsFieldGrid as $key => $value) {
            $columNames[] = $key;
            $headerColNames[] = $this->translate->translate($key);
            if (strtolower($value['type']) == 'primarykey') {
                $primaryKey = $key;
            }
            $countHeaders ++;
        }

        /* Colunas do datagrid para busca */
        $columNamesSearchSort = Array();
        // Verificar se a montagem da datagrid está utilizando checkbox para seleção
        if (!isset($getGridConfig['disableckeckall']) or $getGridConfig['disableckeckall'] != 'true') {
            $columNamesSearchSort[] = null;
            $countHeaders += 1;
        }
        // Pega os nomes das colunas para busca
        foreach ($getParamsFieldGrid as $key => $value) {
            $columNamesSearchSort[] = $key;
        }
        // Verificar se a montagem da datagrid está habilitados os botões de ação
        if (!isset($getGridConfig['disablebuttons']) or $getGridConfig['disablebuttons'] != 'true') {
            $columNamesSearchSort[] = null;
            $countHeaders += 1;
        }

        /* Recebe os dados do banco */
        if (!empty($recordSetData)) {
            $rsData = $recordSetData;
        } else {
            $rsData = $this->getDataRs($options, $useLimit);
        }

        $pagination = $rsData['page'];

        /* Formata a saida dos registros */
        $output = Array();
        $output['total_rows'] = $pagination->getTotalItemCount();
        $output['headers'] = $headerColNames;
        $output['countColumns'] = $countHeaders;

        $output['aSorting']['tableColNames'] = $columNames;

        $output['aPagination'] = json_decode(json_encode($pagination->getPages()), true);
        if (!isset($getGridConfig['disablelimit']) or $getGridConfig['disablelimit'] != 'true') {
            $output['aPagination']['itensPage'] = (isset($this->request['itensPage']) and ! empty($this->request['itensPage'])) ? $this->request['itensPage'] : 10;
        } else {
            $output['aPagination']['itensPage'] = 99999999999;
        }

        /* Popula os dados de registro do datagrid */
        $primaryValue = null;
        foreach ($rsData['db'] as $key => $value) {

            // Verificar se a montagem da datagrid á ou não para exportação
            if (!isset($options['export']) or $options['export'] !== true) {
                // Verificar se a montagem da datagrid está utilizando checkbox para seleção
                if (!isset($getGridConfig['disableckeckall']) or $getGridConfig['disableckeckall'] != 'true') {
                    foreach ($columNames as $name) {
                        switch (strtolower($getParamsFieldGrid[$name]['type'])) {
                            case 'integer': case 'int2': case 'int4': case 'int8': case 'primarykey':
                                if ($name == $primaryKey) {
                                    $row[$key][] = '<input type="checkbox" class="selection" name="idselect[]" value="' . $value[$name] . '" />';
                                }
                                break;
                        }
                    }
                }
            }

            foreach ($columNames as $name) {

                // Verifica e formata o valor de acordo com o tipo do campo
                switch (strtolower($getParamsFieldGrid[$name]['type'])) {
                    case 'integer': case 'int2': case 'int4': case 'int8': case 'primarykey':
                        $row[$key][] = (int) $value[$name];
                        if ($name == $primaryKey) {
                            $primaryValue = $value[$name];
                        }
                        break;

                    case 'text': case 'string': case 'varchar': case 'char':
                        $row[$key][] = (string) $value[$name];
                        break;

                    case 'datetime': case 'timestamp':
                        $format = (isset($getParamsFieldGrid[$name]['format']) and ! empty($getParamsFieldGrid[$name]['format'])) ? $getParamsFieldGrid[$name]['format'] : 'd/m/Y H:i:s';
                        $row[$key][] = \Cityware\Format\FieldGrid::fieldMask($value[$name], "DATETIME", $format);
                        break;

                    case 'date':
                        $format = (isset($getParamsFieldGrid[$name]['format']) and ! empty($getParamsFieldGrid[$name]['format'])) ? $getParamsFieldGrid[$name]['format'] : 'd/m/Y';
                        $row[$key][] = \Cityware\Format\FieldGrid::fieldMask($value[$name], "DATE", $format);
                        break;

                    case 'double': case 'float': case 'float4': case 'float8': case 'decimal':
                        $precision = (isset($getParamsFieldGrid[$name]['precision']) and ! empty($getParamsFieldGrid[$name]['precision'])) ? $getParamsFieldGrid[$name]['precision'] : 2;
                        $row[$key][] = \Cityware\Format\Number::decimalNumber((float) $value[$name], $precision, $this->translate->getLocale());
                        break;

                    case 'money':
                        $precision = (isset($getParamsFieldGrid[$name]['precision']) and ! empty($getParamsFieldGrid[$name]['precision'])) ? $getParamsFieldGrid[$name]['precision'] : 2;
                        $row[$key][] = \Cityware\Format\Number::currency((float) $value[$name], $precision, $this->translate->getLocale());
                        break;

                    case 'status':
                        $row[$key][] = \Cityware\Format\FieldGrid::fieldMask($value[$name], "STATUS");
                        break;

                    case 'boolean':
                        $row[$key][] = \Cityware\Format\FieldGrid::fieldMask($value[$name], "BOOLEAN");
                        break;

                    case 'custom':
                        $aValuesCustom = explode(',', $getParamsFieldGrid[$name]['values']);
                        $valuesCustomTranslate = explode(",", $this->translate->translate($name . '_values'));
                        foreach ($aValuesCustom as $keyCustom => $valueCustom) {
                            if ($valueCustom == $value[$name]) {
                                $return = $valuesCustomTranslate[$keyCustom];
                            }
                        }
                        $row[$key][] = $return;
                        break;

                    default:
                        $row[$key][] = $value[$name];
                        break;
                }
            }



            // Verificar se a montagem da datagrid á ou não para exportação
            if (!isset($options['export']) or $options['export'] !== true) {
                // Verificar se a montagem da datagrid está habilitados os botões de ação
                if (!isset($getGridConfig['disablebuttons']) or $getGridConfig['disablebuttons'] != 'true') {
                    // Verifica se é Lixeira ou não
                    if (isset($options['trash']) and $options['trash'] == true) {
                        $returnButtons = '<a title="Restaurar" href="' . $url . '/gorestore/id/' . $primaryValue . '" data-id="' . $primaryValue . '" class="btn btn-info restorebtn"><i class="fa fa-reply icon-white"></i></a>'
                                . '<a title="Excluir" href="' . $url . '/godelete/id/' . $primaryValue . '" data-id="' . $primaryValue . '" class="btn btn-danger deletebtn"><i class="fa fa-trash-o"></i></a>';
                    } else {
                        if (isset($getParamsGridButtons) and ! empty($getParamsGridButtons)) {
                            $aButtons = Array();

                            foreach ($getParamsGridButtons['button'] as $keyButons => $valueButons) {

                                $classPopUp = $dataPopUp = $classConfirm = $dataConfirm = null;

                                if ((strtolower($keyButons) != 'custom') and ( isset($valueButons['confirm']) and $valueButons['confirm'] = 'true')) {
                                    $dataConfirm = ' data-confirm="' . $valueButons['confirmmsg'] . '" ';
                                    $classConfirm = ' ' . $valueButons['confirmclass'] . ' ';
                                }

                                if ((strtolower($keyButons) != 'custom') and ( isset($valueButons['popup']) and $valueButons['popup'] = 'true')) {
                                    $dataPopUp = ' data-popup="' . $valueButons['popup'] . '" ';
                                    $classPopUp = ' ' . $valueButons['popupclass'] . ' ';
                                }

                                if ($keyButons == 'edit' and ( (is_array($valueButons)) ? $getParamsGridButtons['button'][$keyButons]['show'] == 'true' : $getParamsGridButtons['button'][$keyButons] == 'true')) {
                                    $aButtons[] = '<a title="Editar" href="' . $url . '/edit/id/' . $primaryValue . '" data-id="' . $primaryValue . '" ' . $dataConfirm . ' ' . $dataPopUp . ' class="btn btn-success editbtn ' . $classConfirm . ' ' . $classPopUp . '"><i class="fa fa-pencil"></i></a>';
                                } else if ($keyButons == 'active' and ( (is_array($valueButons)) ? $getParamsGridButtons['button'][$keyButons]['show'] == 'true' : $getParamsGridButtons['button'][$keyButons] == 'true')) {
                                    $aButtons[] = '<a title="Ativar" href="' . $url . '/goactive/id/' . $primaryValue . '" data-id="' . $primaryValue . '" ' . $dataConfirm . ' ' . $dataPopUp . ' class="btn btn-primary activebtn ' . $classConfirm . ' ' . $classPopUp . '"><i class="fa fa-check-square-o"></i></a>';
                                } else if ($keyButons == 'block' and ( (is_array($valueButons)) ? $getParamsGridButtons['button'][$keyButons]['show'] == 'true' : $getParamsGridButtons['button'][$keyButons] == 'true')) {
                                    $aButtons[] = '<a title="Bloquear" href="' . $url . '/goblock/id/' . $primaryValue . '" data-id="' . $primaryValue . '" ' . $dataConfirm . ' ' . $dataPopUp . ' class="btn btn-warning blockbtn ' . $classConfirm . ' ' . $classPopUp . '"><i class="fa fa-ban"></i></a>';
                                } else if ($keyButons == 'trash' and ( (is_array($valueButons)) ? $getParamsGridButtons['button'][$keyButons]['show'] == 'true' : $getParamsGridButtons['button'][$keyButons] == 'true')) {
                                    $aButtons[] = '<a title="Lixeira" href="' . $url . '/gotrash/id/' . $primaryValue . '" data-id="' . $primaryValue . '" ' . $dataConfirm . ' ' . $dataPopUp . ' class="btn btn-danger trashbtn ' . $classConfirm . ' ' . $classPopUp . '"><i class="fa fa-recycle"></i></a>';
                                }

                                if ((strtolower($keyButons) == 'custom')) {
                                    if (isset($valueButons['url']) and ! empty($valueButons['url'])) {
                                        foreach ($valueButons['url'] as $keyButtonCustom => $valueButtonCustom) {
                                            if (!empty($valueButons['url'][$keyButtonCustom])) {
                                                $urlButton = $valueButons['url'][$keyButtonCustom];
                                            } else {
                                                throw new \Exception('Nenhuma url definida para o botão personalizado no indice "' . $key . '"!', 500);
                                            }

                                            $urlButton = $this->preparePhpTagWhere($urlButton, false);

                                            if (( isset($valueButons['confirm'][$keyButtonCustom]) and $valueButons['confirm'][$keyButtonCustom] = true)) {
                                                $dataConfirm = ' data-confirm="' . $valueButons['confirmmsg'][$keyButtonCustom] . '" ';
                                                $classConfirm = ' ' . $valueButons['confirmclass'][$keyButtonCustom] . ' ';
                                            }

                                            if (( isset($valueButons['popup'][$keyButtonCustom]) and $valueButons['popup'][$keyButtonCustom] = true)) {
                                                $dataPopUp = ' data-popup="' . $urlButton . '" ';
                                                $classPopUp = ' ' . $valueButons['popupclass'][$keyButtonCustom] . ' ';
                                            }


                                            $name = (isset($valueButons['name'][$keyButtonCustom]) and ! empty($valueButons['name'][$keyButtonCustom])) ? $valueButons['name'][$keyButtonCustom] : '';
                                            $extraClass = (isset($valueButons['extraClass'][$keyButtonCustom]) and ! empty($valueButons['extraClass'][$keyButtonCustom])) ? $valueButons['extraClass'][$keyButtonCustom] : '';
                                            $btColor = (isset($valueButons['classBtColor'][$keyButtonCustom]) and ! empty($valueButons['classBtColor'][$keyButtonCustom])) ? $valueButons['classBtColor'][$keyButtonCustom] : 'btn-success';
                                            $classIcon = (isset($valueButons['classIcon'][$keyButtonCustom]) and ! empty($valueButons['classIcon'][$keyButtonCustom])) ? $valueButons['classIcon'][$keyButtonCustom] : 'fa fa-pencil';
                                            $nameIcon = (isset($valueButons['nameIcon'][$keyButtonCustom]) and ! empty($valueButons['nameIcon'][$keyButtonCustom])) ? $valueButons['nameIcon'][$keyButtonCustom] : '';

                                            $aButtons[] = '<a title="' . $name . '" href="' . $urlButton . '/id/' . $primaryValue . '" data-id="' . $primaryValue . '" ' . $dataConfirm . ' ' . $dataPopUp . ' class="' . $extraClass . 'btn ' . $btColor . ' ' . $classConfirm . ' ' . $classPopUp . '"><i class="' . $classIcon . '">' . $nameIcon . '</i></a>';
                                        }
                                    } else {
                                        throw new \Exception('Nenhuma url definida para o botão personalizado!', 500);
                                    }
                                }
                            }
                            $returnButtons = implode('', $aButtons);
                        } else {
                            $returnButtons = '<a title="Editar" href="' . $url . '/edit/id/' . $primaryValue . '" data-id="' . $primaryValue . '" class="btn btn-success editbtn"><i class="fa fa-pencil"></i></a>'
                                    . '<a title="Ativar" href="' . $url . '/goactive/id/' . $primaryValue . '" data-id="' . $primaryValue . '" class="btn btn-primary activebtn"><i class="fa fa-check-square-o"></i></a>'
                                    . '<a title="Bloquear" href="' . $url . '/goblock/id/' . $primaryValue . '" data-id="' . $primaryValue . '" class="btn btn-warning blockbtn"><i class="fa fa-ban"></i></a>'
                                    . '<a title="Lixeira" href="' . $url . '/gotrash/id/' . $primaryValue . '" data-id="' . $primaryValue . '" class="btn btn-danger trashbtn"><i class="fa fa-recycle"></i></a>';
                        }
                    }

                    $row[$key][] = $returnButtons;
                }
            }
            $output['rows'] = $row;
        }



        /* Retorna os dados do datagrid */
        return $output;
    }
501806
public function filaAtendimento(
        Unidade $unidade,
        Usuario $usuario,
        array $servicosUsuario,
        $tipoFila = self::TIPO_TODOS,
        $maxResults = 0
    ) {
        $ids = [];
        foreach ($servicosUsuario as $servico) {
            if ($servico->getUsuario()->getId() === $usuario->getId()) {
                $ids[]   = $servico->getServico()->getId();
            }
        }
        
        if (empty($ids)) {
            return [];
        }
        
        $builder = $this
            ->builder()
            ->join(
                ServicoUsuario::class,
                'servicoUsuario',
                'WITH',
                'servicoUsuario.servico = servico AND servicoUsuario.usuario = :usuario'
            )
            ->andWhere('(atendimento.usuario IS NULL OR atendimento.usuario = :usuario)')
            ->andWhere('atendimento.status = :status')
            ->andWhere('atendimento.unidade = :unidade')
            ->andWhere('servico.id IN (:servicos)');
        
        // se nao atende todos, filtra pelo tipo de atendimento
        switch ($tipoFila) {
            case self::TIPO_NORMAL:
            case self::TIPO_PRIORIDADE:
                $s = ($tipoFila === self::TIPO_NORMAL) ? '=' : '>';
                $where = "prioridade.peso $s 0";
                $builder->andWhere($where);
                break;
            case self::TIPO_AGENDAMENTO:
                $builder->andWhere("atendimento.dataAgendamento IS NOT NULL");
                break;
        }
        
        $params = [
            'status'   => AtendimentoService::SENHA_EMITIDA,
            'unidade'  => $unidade,
            'usuario'  => $usuario,
            'servicos' => $ids,
        ];
        
        $this->applyOrders($builder, $unidade, $usuario);

        $query = $builder
            ->setParameters($params)
            ->getQuery();

        if ($maxResults > 0) {
            $query->setMaxResults($maxResults);
        }

        return $query->getResult();
    }
927464
public function sacado($tipo, $nome, $documento, Endereco $endereco)
    {
        if (!in_array($tipo, array(self::PESSOA_FISICA, self::PESSOA_JURIDICA))) {
            throw new \InvalidArgumentException("Tipo de pessoa inválido! Valores válidos: 'física' ou 'jurídica'.");
        }

        if ($tipo === self::PESSOA_FISICA) {
            $sacado = new PessoaFisica($nome, $documento, $endereco);
        }

        if ($tipo === self::PESSOA_JURIDICA) {
            $sacado = new PessoaJuridica($nome, $documento, $endereco);
        }

        $this->sacado = new Sacado($sacado);

        return $this;
    }
767761
protected function createSubscriptions( \Aimeos\MShop\Order\Item\Base\Iface $basket )
	{
		$manager = \Aimeos\MShop::create( $this->getContext(), 'subscription' );

		foreach( $basket->getProducts() as $orderProduct )
		{
			if( ( $interval = $orderProduct->getAttribute( 'interval', 'config' ) ) !== null )
			{
				$item = $manager->createItem()->setInterval( $interval )
					->setOrderProductId( $orderProduct->getId() )
					->setOrderBaseId( $basket->getId() );

				if( ( $end = $orderProduct->getAttribute( 'intervalend', 'custom' ) ) !== null
					|| ( $end = $orderProduct->getAttribute( 'intervalend', 'config' ) ) !== null
					|| ( $end = $orderProduct->getAttribute( 'intervalend', 'hidden' ) ) !== null
				) {
					$item = $item->setDateEnd( $end );
				}

				$manager->saveItem( $item, false );
			}
		}
	}
999061
public function atendimentoAndamento($usuario, $unidade = null)
    {
        $status = [
            self::CHAMADO_PELA_MESA,
            self::ATENDIMENTO_INICIADO,
        ];
        try {
            $qb = $this->storage
                ->getManager()
                ->createQueryBuilder()
                ->select('e')
                ->from(Atendimento::class, 'e')
                ->where('e.usuario = :usuario')
                ->andWhere('e.status IN (:status)');
            
            $params = [
                'usuario' => $usuario,
                'status' => $status,
            ];
            
            if ($unidade) {
                $qb->andWhere('e.unidade = :unidade');
                $params['unidade'] = $unidade;
            }
            
            return $qb
                ->setParameters($params)
                ->getQuery()
                ->getOneOrNullResult();
        } catch (\Doctrine\ORM\NonUniqueResultException $e) {
            /*
             * caso tenha mais de um atendimento preso ao usuario,
             * libera os atendimentos e retorna null para o atendente chamar de novo.
             * BUG #213
             */
            $this->storage
                ->getManager()
                ->createQueryBuilder()
                ->update(Atendimento::class, 'e')
                ->set('e.status', ':status')
                ->set('e.usuario', ':null')
                ->where('e.usuario = :usuario')
                ->andWhere('e.status IN (:status)')
                ->setParameters([
                    'status'  => 1,
                    'null'    => null,
                    'usuario' => $usuario,
                    'status'  => $status
                ])
                ->getQuery()
                ->execute();

            return;
        }
    }
968724
protected function gerarNossoNumero()
    {
        $numero_boleto = $this->getNumero();
        $nossoNumero = Util::numberFormatGeral($numero_boleto, 8)
            . CalculoDV::banrisulNossoNumero(Util::numberFormatGeral($numero_boleto, 8));
        return $nossoNumero;
    }
859540
public static function sicrediNossoNumero($agencia, $posto, $conta, $ano, $byte, $numero_boleto)
    {
        $n = Util::numberFormatGeral($agencia, 4)
            . Util::numberFormatGeral($posto, 2)
            . Util::numberFormatGeral($conta, 5)
            . Util::numberFormatGeral($ano, 2)
            . Util::numberFormatGeral($byte, 1)
            . Util::numberFormatGeral($numero_boleto, 5);
        return  Util::modulo11($n);
    }
615813
public function validarDadosObrigatorios()
    {
        if (null === $this->getValorDocumento()) {
            $this->erros['valor'] = 'Valor do documento é obrigatório';
        }
        if (null === $this->getConvenio()->getBanco()->getAgencia()) {
            $this->erros['agencia'] = 'Agência do banco é obrigatório';
        }
        if (null === $this->getConvenio()->getBanco()->getConta()) {
            $this->erros['conta'] = 'Conta do banco é obrigatório';
        }
        if (null === $this->getConvenio()->getCarteira()->getNumero()) {
            $this->erros['carteira'] = 'Carteira do convênio é obrigatório';
        }
        if (!empty($this->erros)) {
            $dadosFaltantes = implode("', '", array_keys($this->erros));
            throw new \InvalidArgumentException("Faltam dados a serem fornecidos ao boleto. ('{$dadosFaltantes}')");
        }
    }
674034
private function setSystemConfigsCurrentApplication(){
		//verifica use_https
		if($this->getUseHttps()!='On' && $this->getUseHttps()!='Off'){
			$this->setUseHttps('Off');
		}
		//verifica use_www
		if($this->getUseWww()!='On' && $this->getUseWww()!='Off'){
			$this->setUseWww('Off');
		}
		//verifica address_uri
		if($this->getAddressUri()=='' || preg_match('/^http/', $this->getAddressUri()) || preg_match('/^www/', $this->getAddressUri())){
			throw new \Exception("setSystemConfigsCurrentApplication() Valor de address_uri deve conter a url da aplicação sem http e sem www. ex: google.com");
		}
		//define url padrão da aplicação
		$this->setPathBaseHref(($this->getUseHttps()=='On'?'https://':'http://').($this->getUseWww()=='On'?'www.':'').$this->getAddressUri());

		$tmp=explode('/', preg_replace('/^[\/]*(.*?)[\/]*$/', '\\1', $_SERVER['REQUEST_URI']));

		$k=array_search('public', $tmp);
		if($k!=''){
			unset($tmp[$k]);
		}


        if($this->getUseHttps()=='On' || (preg_match('/^www/', $this->getAddressUri()) && $this->getUseWww()=='Off') || (!preg_match('/^www/', $this->getAddressUri()) && $this->getUseWww()=='On') || $k!=''){
            if(
            	(!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != "on") || 
            	(preg_match('/^www/', $_SERVER["HTTP_HOST"])===1 && $this->getUseWww()=='Off') || 
            	(preg_match('/^www/', $_SERVER["HTTP_HOST"])===0 && $this->getUseWww()=='On')
            ){
               header('Location: '.($this->getUseHttps()=='On'?'https://':'http://').($this->getUseWww()=='On'?'www.':'').$this->getAddressUri()); exit;
            }
        }


	}
426810
private function calcularDvNossoNumero($nossoNumero)
    {
        $referencia = '3197';
        $indice = 0;
        $soma = 0;

        for ($i = 0; $i < strlen($nossoNumero); $i++) {
            $soma += $nossoNumero[$i] * $referencia[$indice];
            $indice++;
            $indice = $indice > 3 ? 0 : $indice;
        }

        $resto = $soma % 11;

        return $resto > 1 ? 11 - $resto : 0;
    }
412983
public function populateSelect($params, $arrayDepend = null, $populateValues = null) {

        $db = \Cityware\Db\Factory::factory('zend');

        /* Verifica o schema se está setado ou não */
        $schema = (isset($params['schema']) and $params['schema'] != "") ? $params['schema'] : null;

        /* Verifica foi setado um alias para a tabela de FROM */
        $aliasFromFk = (isset($params['tableAliasFk']) and ! empty($params['tableAliasFk'])) ? $params['tableAliasFk'] : 'fk';


        /* Define os campos */
        $db->select("{$aliasFromFk}.{$params['fieldfk']}", 'ID');
        $db->select("{$aliasFromFk}.{$params['fieldshow']}", 'NOME');

        /* Verifica se existe algum campo concatenado */
        if (isset($params['tableconc']) and ! empty($params['tableconc'])) {
            $db->select("{$params['tableconc']}.{$params['fieldconc']}", 'CONCAT');
        }

        /* Define a ordem de exibição dos dados */
        
        if (isset($params['order']) and $params['order'] == 'ID') {
            $db->orderBy("ID ASC");
        } else {
            $db->orderBy("NOME ASC");
        }


        /* Define a tabela */
        $db->from("{$params['tablefk']}", $aliasFromFk, $schema);

        /* Monta a condição do SELECT em caso de dependência */
        if (!empty($arrayDepend)) {
            if (isset($params['dependfk']) and ! empty($params['dependfk'])) {
                $db->where("{$params['dependfk']} = '{$arrayDepend[$params['dependfk']]}'");
            }
            if (isset($params['where']) and ! empty($params['where'])) {
                foreach ($params['where'] as $keyWhere => $valueWhere) {
                    $db->where($this->prepareWherePhpTag($valueWhere));
                }
            }
        } else
        /* Monta a condição do SELECT em caso de populate */
        if (!empty($populateValues)) {
            if (isset($params['fieldpk']) and ! empty($params['fieldpk'])) {
                $db->where("{$params['fieldpk']} = '{$populateValues[$params['fieldpk']]}'");
            }
            if (isset($params['where']) and ! empty($params['where'])) {
                foreach ($params['where'] as $keyWhere => $valueWhere) {
                    $db->where($this->prepareWherePhpTag($valueWhere));
                }
            }
        } else {
            /* Define as condições do select caso houver */
            if (isset($params['where']) and ! empty($params['where'])) {
                foreach ($params['where'] as $keyWhere => $valueWhere) {
                    $db->where($this->prepareWherePhpTag($valueWhere));
                }
            }
        }

        /* Define o JOIN da tabela caso houver */
        if (isset($params['join']) and $params['join'] == "true") {
            for ($idxJoin = 0; $idxJoin < count($params['jointype']); $idxJoin++) {
                $joinAlias = (isset($params['joinalias'][$idxJoin]) and ! empty($params['joinalias'][$idxJoin])) ? $params['joinalias'][$idxJoin] : null;
                $db->join($params['joinfrom'][$idxJoin], $joinAlias, $params['joincond'][$idxJoin], $params['jointype'][$idxJoin], $params['joinschema'][$idxJoin]);
            }
        }

        if (isset($params['debug']) and $params['debug'] == "true") {
            $db->setDebug(true);
        }

        return $db->executeSelectQuery();
    }
788344
public function gerarCampoLivre(ArrayObject $data)
    {
        $this->alterarTamanho('NossoNumero', 17);
        $this->alterarTamanho('CodigoCedente', 7); // 06 digitos + DV
        $this->alterarTamanho('CampoLivre', 18);   // 17 digitos + DV

        $data['CodigoCedente'] .= Number::modulo11($data['CodigoCedente'], 0, 0, false);

        $nossoNumero = StringBuilder::normalize($data['NossoNumero'], 17);

        $constante1 = '2'; // 1ª posição do Nosso Numero: Tipo de Cobrança (1-Registrada / 2-Sem Registro)
        $constante2 = '4'; // 2ª posição do Nosso Número: Identificador da Emissão do Boleto (4-Beneficiário)
        $sequencia1 = (String) substr($nossoNumero, 2, 3);
        $sequencia2 = (String) substr($nossoNumero, 5, 3);
        $sequencia3 = (String) substr($nossoNumero, 8, 9);

        if ($data['Carteira'] == 'RG') {
            $constante1 = '1'; // 1ª posição do Nosso Numero: Tipo de Cobrança (1-Registrada / 2-Sem Registro)
        }

        $data['CampoLivre'] = $sequencia1 . $constante1 . $sequencia2 . $constante2 . $sequencia3;

        // Calculando o DV do campo livre
        $campoLivre = $data['CodigoCedente'] . $data['CampoLivre'];
        $data['CampoLivre'] .= Number::modulo11($campoLivre, 0, 0, false);

        $this->layout = ':Banco:Moeda:FatorVencimento:Valor:CodigoCedente:CampoLivre';
    }
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;
    }