Jump to content

Recommended Posts

Boa tarde pessoal,

basicamente eu preciso do retorno de horas entre duas datas, porém tenho condições a tratar .

basicamente tenho 2 colunas ( dt_fim e dt_ini ) que representam data final e data inicial. Preciso da diferença entre as duas retornada em uma outra coluna (hr_ausencias) , porém a cada dia posso computar no máximo 9 horas, e desconsiderar finais de semana e feriados( esses cadastrados em uma tabela) . Seria melhor tratar isso com uma Trigger , um Script PL/SQL , como me sugerem? Agradeço quem puder ajudar.

Share this post


Link to post
Share on other sites

Bom dia Motta, analisei e ambas soluções são inviáveis para mim , eu precisaria de algo mais específico , como por exemplo : ( suponha que tenho minha data inicial no dia 31/05/2019 08:00 e a data final no dia 03/06/2019 12:00 . Nesse caso seria computado no máximo 9 horas por dia entre as datas, e desconsiderado os finais de semana e feriados , assim ao final eu teria como resultado as horas que necessito ).

 

 

 

Share this post


Link to post
Share on other sites

Assim, eu já vi essas várias functions , blocos e etc que tem por aí, inclusive eu tenho uma que adaptei pra me retornar a quantidade de horas estimadas a trabalhar em um mês. Meu problema esta mais em fixar um valor máximo por período entre as 2 variáveis, por exemplo DT_INI (28/05/2019 08:00 )  DT_FIM ( 30/05/2019 09:00) . num calculo direto isso daria 49horas. eu preciso que volte 19 horas ( 9horas do dia 28, 9horas do dia 29 e 1 hora do dia 30), mas to me embaralhando pra montar o script nessa parte. Se puder me dar um exemplo parecido ou um caminho pra começar isso eu agradeço .

Share this post


Link to post
Share on other sites

Eu faria um FUNCTION somente para isto , retornando as "horas úteis" entre duas datas levando em conta todas as regras.

 

Não é simples mas também não é um biche de sete cabeças tendo conhecimento de plsql

 

Tendo dúvidas vai postando aí.

Share this post


Link to post
Share on other sites

eu tentei uma trigger mas deu meio errado . Vou tentar pela function , só preciso pensar um pouco mais nas regras internas ( por exemplo a de contar as horas no dia e travar após passar e contar o restante dos dias) . Não sei se aqui no forum tem algum específico pra Apex, é que eu utilizo ele e seria pra aplicar dentro de um item de formulario que eu estou montando o script.

Obrigado pela ajuda, qualquer coisa eu volto aqui . 

Share this post


Link to post
Share on other sites

Montei um script que está funcionando , mas notei que a conta das horas internamente não está como eu preciso, não estou conseguindo finalizar essa parte, poderia verificar e me auxiliar nesse pedaço? Tipo ele calcula as horas mas sempre um valor grande, eu preciso que dê as horas exatas , por exemplo se a DT_FIM = '30/05/2019 16:00' e DT_INI = '30/05/2019 18:00' o retorno de horas ao final na variável precisa ser 2 . 

 

segue o scritp: (deixei os output pra validar os resultados , e os comentarios nos ifs pra facilitar compreensao)

DECLARE
  VA_CONTA         NUMBER := 0;
  VA_DT_INI        DATE;
  VA_DT_FIM        DATE;
  VA_QT_DIAS       NUMBER := 0;
  VA_DT_ATUAL      DATE;
  VA_FERIADO_SN    NUMBER := 0;
  VA_TOT_HR_AUS    NUMBER:= 0;
  VA_HR_AUS_SEXTA  NUMBER:= 0;
  VA_TOT_DIAS      NUMBER :=0;
  VA_TOT_SEXTA     NUMBER := 0;

BEGIN
  select TRUNC(TO_DATE('31/05/2019 08:00', 'DD/MM/RRRR HH24:MI')) -
       TRUNC(TO_DATE('14/05/2019 09:00', 'DD/MM/RRRR HH24:MI')),
       TO_DATE('14/05/2019 09:00', 'DD/MM/RRRR HH24:MI'),
       TO_DATE('31/05/2019 08:00', 'DD/MM/RRRR HH24:MI')
  INTO VA_QT_DIAS, VA_DT_INI, VA_DT_FIM
  from DUAL;
 /* select DISTINCT (TRUNC(A.DT_FIM) - TRUNC(A.DT_INI)), 
          A.DT_INI, 
          A.DT_FIM
     INTO VA_QT_DIAS, 
          VA_DT_INI, 
          VA_DT_FIM
          FROM AUSENCIAS A
               WHERE CD_AUSENCIA = 174;*/

  DBMS_OUTPUT.put_line('Dia inicial: ' || VA_DT_INI);
  DBMS_OUTPUT.put_line('Dia final: ' || VA_DT_FIM);
  DBMS_OUTPUT.put_line('total dias: ' || VA_QT_DIAS);
  DBMS_OUTPUT.put_line('------------------');
    WHILE VA_CONTA <= VA_QT_DIAS LOOP -- VERIFICA CONTADOR MENOR QUE TOTAL DE DIAS ENTRE AS DATAS (INI E FIM)
      
      VA_DT_ATUAL := VA_DT_INI + VA_CONTA;
      IF VA_DT_ATUAL <= VA_DT_FIM THEN --1 VERIFICA SE DATA DO LAÇO MENOR QUE DATA FINAL
          SELECT COUNT(*) INTO VA_FERIADO_SN FROM FERIADOS WHERE TRUNC(DT_FERIADO) = TRUNC(VA_DT_ATUAL);
         -- DBMS_OUTPUT.PUT_LINE('ATUAL:' || VA_DT_ATUAL ||'FERIADO:' ||VA_FERIADO_SN);--
         IF VA_FERIADO_SN = 0 THEN -- RETORNO 0 NÃO É FERIADO
            IF TO_CHAR(VA_DT_ATUAL, 'D') NOT IN (1, 7) THEN --2 VERIFICA DIA DIFERENTE DE SABADO E DOMINGO
                VA_TOT_HR_AUS := (VA_DT_FIM - VA_DT_ATUAL) * 24;
               IF (TO_CHAR(VA_DT_FIM, 'HH24:MI') BETWEEN '08' AND '18') AND (TO_CHAR(VA_DT_INI, 'HH24:MI') BETWEEN '08' AND '18')THEN --3 VERIFICA SE HORA ESTÁ ENTRE 08 E 18       
                   IF (TO_CHAR(VA_DT_ATUAL, 'D') <> (6) AND VA_TOT_HR_AUS >9) THEN --4 VERIFICA DIA DIFERENTE DE SEXTA E SE HORA MAIOR QUE 9
                          
                          VA_TOT_DIAS := VA_TOT_DIAS +1;
                          VA_TOT_HR_AUS := 9;
                           DBMS_OUTPUT.put_line('VALOR ATUAL:' || VA_TOT_HR_AUS);
                           DBMS_OUTPUT.put_line('--------------'); 
                            
                                           
                        ELSIF (TO_CHAR(VA_DT_ATUAL, 'D') = 6 AND VA_TOT_HR_AUS > 8) THEN -- VERIFICA DIA IGUAL SEXTA E SE HORA MAIOR QUE 8
                        --  VA_TOT_HR_AUS := 8;
                           VA_HR_AUS_SEXTA := 8;
                           DBMS_OUTPUT.put_line('VALOR ATUAL:' || VA_TOT_HR_AUS);
                           DBMS_OUTPUT.put_line('--------------');
                         VA_TOT_SEXTA := VA_TOT_SEXTA +1;
                         
                     
                      END IF; --4  
                       
                END IF; --3
                 
            END IF; --2    
           VA_TOT_HR_AUS := (VA_TOT_HR_AUS*VA_TOT_DIAS) + (VA_HR_AUS_SEXTA * VA_TOT_SEXTA);
       END IF; --1
      
     END IF;  
        VA_DT_ATUAL := VA_DT_ATUAL +1;
       DBMS_OUTPUT.PUT_LINE('CALCULO: ' || VA_CONTA);
       VA_CONTA := VA_CONTA + 1;
       
      DBMS_OUTPUT.put_line('DATA ATUAL:' || VA_DT_ATUAL);
       
  
  END LOOP;
   DBMS_OUTPUT.PUT_LINE('DIA SEMANA:' || VA_TOT_DIAS);
   DBMS_OUTPUT.PUT_LINE('DIA SEXTA:' || VA_TOT_SEXTA);  
  DBMS_OUTPUT.put_line('VALOR FINAL :' || ROUND(VA_TOT_HR_AUS, 2)); -- resultado retornado que me interessa
END;


 

Share this post


Link to post
Share on other sites

Fiz pára

Dia inicial: 30/05/19
Dia final: 31/05/19
total dias: 1
------------------
VALOR ATUAL:9
--------------
CALCULO: 0
DATA ATUAL:31/05/19
CALCULO: 1
DATA ATUAL:01/06/19
DIA SEMANA:1
DIA SEXTA:0
VALOR FINAL :9

 

o que está errado ?

Share this post


Link to post
Share on other sites

por exemplo , se testar DT_INI = 30/05/2019 08:00 e DT_FIM = 30/05/2019 10:00 eu preciso que me retorne 2 ao final ,pois são 2 horas de diferença . As horas são o que importam pra mim entre as datas 

Share this post


Link to post
Share on other sites

Seriam horas "úteis" ?

 

 

Share this post


Link to post
Share on other sites

você diz a coluna em questão ou o sentido do que eu quero no script ?

Se for a coluna, preciso desse valor retornado dentro da coluna hr_ausencia ( da tabela ausencias)

Se for o sentido do script, seriam na vdd as horas "inutilizaveis por ausencia"

Share this post


Link to post
Share on other sites

Por exemplo entre

 

30/5/19 00:00

e

31/5/19 23:59

 

temos 48 horas "cheias" e 16 horas "úteis"

 

 

Share this post


Link to post
Share on other sites

Seriam 17 horas úteis certo( 9 horas da quinta e 8 horas da sexta) ? . no caso sim, são 17 horas "úteis". pra esses casos que ultrapassam um dia, a contagem retorna correto, porém pra contagens menores que um dia o resultado não está correto, por exemplo como citei DT_INI = 30/05/2019 08:00 e DT_FIM = 30/05/2019 10:00 , deve retornar 2 horas "úteis"

Share this post


Link to post
Share on other sites

indo um pouco mais além se não for abusar também, como posso fazer para setar esse resultado na coluna da tabela de ausencias ? por exemplo, abaixo tenho um update ao final do loop que carrega o resultado pra coluna de hr_ausencia referente a ultima linha inserida, porém meu resultado é sempre 0 , nao consegui encontrar o erro

 

DECLARE
  VA_CONTA         NUMBER := 0;
  VA_DT_INI        DATE;
  VA_DT_FIM        DATE;
  VA_QT_DIAS       NUMBER := 0;
  VA_DT_ATUAL      DATE;
  VA_FERIADO_SN    NUMBER := 0;
  VA_TOT_HR_AUS    NUMBER:= 0;
  VA_HR_AUS_SEXTA  NUMBER:= 0;
  VA_TOT_DIAS      NUMBER :=0;
  VA_TOT_SEXTA     NUMBER := 0;
BEGIN
/*SELECT trunc(to_date('03/06/2019 13:00','dd/mm/yyyy hh24:mi')) - trunc(to_date('03/06/2019 18:00','dd/mm/yyyy hh24:mi')),
trunc(to_date('03/06/2019 13:00','dd/mm/yyyy hh24:mi')),
trunc(to_date('03/06/2019 18:00','dd/mm/yyyy hh24:mi'))
into VA_QT_DIAS, 
     VA_DT_INI, 
     VA_DT_FIM
     from dual;*/
  select DISTINCT (TRUNC(A.DT_FIM) - TRUNC(A.DT_INI)), 
                   A.DT_INI, 
                   A.DT_FIM
              INTO VA_QT_DIAS, 
                   VA_DT_INI, 
                   VA_DT_FIM
                   FROM AUSENCIAS A
                         WHERE A.DT_INC = (SELECT MAX(DT_INC) FROM AUSENCIAS);
    WHILE VA_CONTA <= VA_QT_DIAS LOOP -- VERIFICA CONTADOR(VA_CONTA) EQUANTO MENOR QUE TOTAL DE DIAS ENTRE AS DATAS (INI E FIM)
      VA_DT_ATUAL := VA_DT_INI + VA_CONTA;
      IF VA_DT_ATUAL <= VA_DT_FIM THEN --1 VERIFICA SE DATA DO LAÇO MENOR QUE DATA FINAL
          SELECT COUNT(*) INTO VA_FERIADO_SN FROM FERIADOS WHERE TRUNC(DT_FERIADO) = TRUNC(VA_DT_ATUAL);
         IF VA_FERIADO_SN = 0 THEN --2 RETORNO 0 NÃO É FERIADO
            IF TO_CHAR(VA_DT_ATUAL, 'D') NOT IN (1, 7) THEN --3 VERIFICA DIA DIFERENTE DE SABADO E DOMINGO
                VA_TOT_HR_AUS := (VA_DT_FIM - VA_DT_ATUAL) * 24;
               IF (TO_CHAR(VA_DT_FIM, 'HH24:MI') BETWEEN '08' AND '18') AND (TO_CHAR(VA_DT_INI, 'HH24:MI') BETWEEN '08' AND '18')THEN --4 VERIFICA SE HORA ESTÁ ENTRE 08 E 18       
                   IF (TO_CHAR(VA_DT_ATUAL, 'D') <> (6) AND VA_TOT_HR_AUS >9) THEN --5 VERIFICA DIA DIFERENTE DE SEXTA E SE HORA MAIOR QUE 9
                          VA_TOT_DIAS := VA_TOT_DIAS +1;
                          VA_TOT_HR_AUS := 9;                
                        ELSIF (TO_CHAR(VA_DT_ATUAL, 'D') = 6 AND VA_TOT_HR_AUS > 8) THEN -- VERIFICA DIA IGUAL SEXTA E SE HORA MAIOR QUE 8
                           VA_HR_AUS_SEXTA := 8;
                         VA_TOT_SEXTA := VA_TOT_SEXTA +1;
                   END IF; --5   
               END IF; --4
            END IF; --3    
         END IF; --2 
         VA_TOT_HR_AUS := (VA_TOT_HR_AUS*VA_TOT_DIAS) + (VA_HR_AUS_SEXTA * VA_TOT_SEXTA);
      END IF; --1  
        VA_DT_ATUAL := VA_DT_ATUAL +1;
        VA_CONTA := VA_CONTA + 1;
    END LOOP;
    UPDATE AUSENCIAS SET HR_AUSENCIA = VA_TOT_HR_AUS WHERE DT_INC = (SELECT MAX(A.DT_INC) FROM AUSENCIAS A);
END;

Share this post


Link to post
Share on other sites

Eu faria o while somando horas a data.hora 1/24 e testando se é hora útil ou não, segunda se tiver tempobtento montar.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By digonaweb
      Bom dia!
       
      Alguém pode me ajudar com esse script abaixo?
       
      Preciso fazer com que o link abra em uma nova janela, pois fica abrindo em um quadrado onde está fisicamente o relógio no site.
       
      <!-- clock widget start -->
       
      <script type="text/javascript">
           var css_file=document.createElement("link");
           css_file.setAttribute("rel","stylesheet");
           css_file.setAttribute("type","text/css");
           css_file.setAttribute("href","//s.bookcdn.com//css/cl/bw-cl-150x70.css");
           document.getElementsByTagName("head")[0].appendChild(css_file);
      </script>
       
      <div id="tw_1_737904741"><div style="width:150px; height:70px; margin: 0 auto;">
      <a href="https://booked.net/time/rio-de-janeiro-18486">Rio de Janeiro</a>
      <br/></div></div>
       
      <script type="text/javascript"> function setWidgetData_737904741(data){ if(typeof(data) != 'undefined' && data.results.length > 0) { for(var i = 0; i < data.results.length; ++i) { var objMainBlock = ''; var params = data.results; objMainBlock = document.getElementById('tw_'+params.widget_type+'_'+params.widget_id); if(objMainBlock !== null) objMainBlock.innerHTML = params.html_code; } } } var clock_timer_737904741 = -1; </script> <script type="text/javascript" charset="UTF-8" src="https://widgets.booked.net/time/info?ver=2&domid=209&type=1&id=737904741&scode=124&city_id=18486&wlangid=1&mode=1&details=0&background=ece0bf&color=4c4d57&add_background=ffffff&add_color=2071c9&head_color=ffffff&border=1&transparent=1"></script>
       
      <!-- clock widget end -->
       
       

       
       

    • By Kennyguedes
      Olá, preciso transformar a seguinte subquery para utilizar como uma table no join
       
      NVL((SELECT X.MPE_META
          FROM (SELECT MPE_IDC_ID, MPE_META
                FROM META_PERSONALIZADA_SLA M
               ORDER BY M.MPE_META DESC) X
          WHERE ROWNUM = 1
          AND X.MPE_IDC_ID = IDC_ID
          AND X.MPE_META <= APR_NEGOCIACAO_SLA), IDC_META)
       
      eu utilizo esse trecho em vários lugares dentro da minha procedure, então queria utilizar como "LEFT JOIN", assim o custo seria menor da procedure
      caso seja possivel e alguem puder ajuda
    • By bfigueiredoc
      Olá!! Estou precisando de ajuda
       
      tenho um site onde o script está totalmente em inglês (páginas e tal) e gostaria de poder colocar opções de outras linguagens (portugues e espanhol) existe algum jeito?
       
      um exemplo: https://www.neteller.com/pt o site da neteller, tem um icone no canto direito superior que pode escolher o idioma
    • By Abran
      Gostaria de poder fazer um SELECT dentro do LOOP igual ao exemplo abaixo.
      Esse exemplo não deu certo, se tirar esse SELECT que está dentro do LOOP, tudo funciona. O problema está no Select dentro do LOOP que nao aceita.
      ORA-01403: dados não encontrados
       
      A ideia é, Z45 grava cliente, e Z46 grava títulos em aberto.

      Toda vez que rodar, deverá checar se existe novos títulos que ainda não foram gravados, e só gravar os que ainda não foram.
       
      Alguem sabe alguma maneira de fazer o que preciso ?
       
      DECLARE      v_CODCLI   VARCHAR2 (6);   vPREFIXO   VARCHAR2 (3);   vNUM       VARCHAR2 (9);   vPARCELA   VARCHAR2 (3); BEGIN          v_CODCLI := '0';          FOR V_FUNC IN     (     SELECT E1_FILIAL, A1_COD, A1_LOJA, A1_PESSOA, E1_PREFIXO, E1_NUM, E1_PARCELA, E1_TIPO, E1_NATUREZ, E1_EMISSAO, E1_VENCREA, E1_VALOR,     CASE WHEN TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') < 0              THEN 0        ELSE TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') END ATRASO      FROM SE1010 SE1      INNER JOIN SA1010 A1 ON A1.A1_COD = E1_CLIENTE AND A1_LOJA = E1_LOJA AND A1.D_E_L_E_T_ = SE1.D_E_L_E_T_      WHERE SE1.D_E_L_E_T_ = ' '      ORDER BY A1_LOJA, A1_COD     )     LOOP                  SELECT Z46_PREFIX, Z46_NUM, Z46_PARCEL, Z46_TIPO, Z46_NATURE          INTO vPREFIXO, vNUM, vPARCELA, vTIPO, vNATUREZ          FROM Z46010 Z46          WHERE Z46_PREFIX = V_FUNC.E1_PREFIXO         AND Z46_NUM = V_FUNC.E1_NUM          AND Z46_PARCEL = V_FUNC.E1_PARCELA         AND D_E_L_E_T_ = ' ' ;                          IF vPREFIXO || vNUM || vPARCELA !=  V_FUNC.E1_PREFIXO || V_FUNC.E1_NUM || V_FUNC.E1_PARCELA THEN                      IF V_FUNC.A1_COD <> v_CODCLI THEN                              v_CODCLI :=  V_FUNC.A1_COD;                                  INSERT                 INTO DADOSADV.Z45010                 (                     Z45_RECNO,                     Z45_FILIAL,                     Z45_CODCLI,                     Z45_LOJA,                     Z45_PESSOA,                     Z45_DTCAD                 )                 VALUES                 (                     (SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) + 1 END Z45_RECNO FROM Z45010) ,                     V_FUNC.E1_FILIAL,                     V_FUNC.A1_COD,                     V_FUNC.A1_LOJA,                     V_FUNC.A1_PESSOA,                     TO_CHAR(SYSDATE, 'YYYYMMDD')                 );                                  COMMIT;                          END IF;                          INSERT             INTO DADOSADV.Z46010             (                     Z46_RECNO,                     Z46_RECZ45,                     Z46_STATIT,                     Z46_PREFIX,                     Z46_NUM,                     Z46_PARCEL,                     Z46_TIPO,                     Z46_NATURE,                     Z46_VALOR,                     Z46_ATRASO,                     Z46_DTCAD             )             VALUES             (                 (SELECT CASE WHEN MAX(Z46_RECNO) IS NULL THEN 1 ELSE MAX(Z46_RECNO) + 1 END Z46_RECNO FROM Z46010) ,                 (SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) END Z45_RECNO FROM Z45010),                 0,                 V_FUNC.E1_PREFIXO,                 V_FUNC.E1_NUM,                 V_FUNC.E1_PARCELA,                 V_FUNC.E1_TIPO,                 V_FUNC.E1_NATUREZ,                 20,                 V_FUNC.ATRASO,                 TO_CHAR(SYSDATE, 'YYYYMMDD')             );                          COMMIT;                              END IF;          END LOOP;           END;
    • By rafael.munareto
      Pessoal, 
       
          No código abaixo quero recortar a foto e subir o nome do arquivo na variável que busco no banco de dados, consegui fazer o efeito de recortar e de visualizar mas não está aparecendo a imagem recortada e nem salvando o nome do arquivo com a nova dimensão, podem me ajudar:
       

      <?php
      error_reporting(E_ALL ^ E_NOTICE);
      require_once("mostra-alerta.php");
        include("coneta_mysql.php");
      /**
       * Jcrop image cropping plugin for jQuery
       * Example cropping script
       * @copyright 2008-2009 Kelly Hallman
       * More info: http://deepliquid.com/content/Jcrop_Implementation_Theory.html
       */
      if ($_SERVER['REQUEST_METHOD'] == 'POST')
      {
        $targ_w = $targ_h = 150;
        $jpeg_quality = 90;
        $src = "img/perfil/<?php echo $foto_perfil ; ?>";
        $img_r = imagecreatefromjpeg($src);
        $dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
        imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
        $targ_w,$targ_h,$_POST['w'],$_POST['h']);
        header('Content-type: image/jpeg');
        imagejpeg($dst_r,null,$jpeg_quality);
        exit;
      }
      ?>
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
          <meta charset="UTF-8">
          <title>REDE A</title>
          <link rel="icon" href="img/logo_pequeno.png">
          <link href="css/principal.css" rel="stylesheet" />
          <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
          <link href="css/select2.min.css" rel="stylesheet" />
          <link href="https://fonts.googleapis.com/css?family=Raleway&display=swap" rel="stylesheet">
          <link rel="stylesheet" href="css/bootstrap.min.css">
          <script src="js/principal.js"></script>
          <script src="js/jquery.min.js" type="text/javascript"></script>
        <script src="js/jquery.Jcrop.js" type="text/javascript"></script>
        <script src="js/jquery.Jcrop.min.js" type="text/javascript"></script>
        <link rel="stylesheet" href="css/jquery.Jcrop.css" type="text/css" />
        <link rel="stylesheet" href="css/demos.css" type="text/css" />
      </head>
      <script type="text/javascript">
            jQuery(function($){
            // Create variables (in this scope) to hold the API and image size
            var jcrop_api, boundx, boundy;
            
            $('#cropbox').Jcrop({
              onChange: updatePreview,
              onSelect: updatePreview,
              aspectRatio: 1
              
            },function(){
              // Use the API to get the real image size
              var bounds = this.getBounds();
              boundx = bounds[0];
              boundy = bounds[1];
              // Store the API in the jcrop_api variable
              jcrop_api = this;
            });
            function updatePreview(c)
            {
              if (parseInt(c.w) > 0)
              {
                var rx = 100 / c.w;
                var ry = 100 / c.h;
                $('#preview').css({
                  width: Math.round(rx * boundx) + 'px',
                  height: Math.round(ry * boundy) + 'px',
                  marginLeft: '-' + Math.round(rx * c.x) + 'px',
                  marginTop: '-' + Math.round(ry * c.y) + 'px'
                });
              }
            };
              $(function(){
              $('#cropbox').Jcrop({
                aspectRatio: 1,
                onSelect: updateCoords
              });
            });
            function updateCoords(c)
            {
              $('#x').val(c.x);
              $('#y').val(c.y);
              $('#w').val(c.w);
              $('#h').val(c.h);
            };
            function checkCoords()
            {
              if (parseInt($('#w').val())) return true;
              alert('Please select a crop region then press submit.');
              return false;
            };
          });
      </script>
        <body>
            <main>
          <?php include("conecta_mysql.php"); 
                require_once("logica-usuario.php");
                include("foto_perfil_php.php");?>    
            <div id="outer">
            <div class="jcExample">
            <div class="article">
                <table>
                  <tr>
                    <td>
                      <img id="cropbox" alt="Flowers" src="img/perfil/<?php echo $foto_perfil ; ?>" style="width: 100%; margin-right: 2rem">
                    </td>
                    <td>
                        <div style="width:100px;height:100px;overflow:hidden;">
                            <img src="img/perfil/<?php echo $foto_perfil ; ?>" id="preview" alt="Preview" class="jcrop-preview" />
                          </div>
                    </td>
                  </tr>
                </table>
              <form action="alterar_imagem.php" method="post" onsubmit="return checkCoords();">
                <input type="hidden" id="x" name="x" />
                <input type="hidden" id="y" name="y" />
                <input type="hidden" id="w" name="w" />
                <input type="hidden" id="h" name="h" />
                <input type="submit" value="Recortar" />
            </form>
                <form method="post" enctype="multipart/form-data" name="cadastro">
                    <input class="btn btn-outline-success" id="escolha_foto" type="file" name="foto">
                    <button type="file" id="button_perfil" class="btn btn-outline-success" name="upload_foto"> OK </button>
                    <button class="btn btn-outline-success" onclick="refresh()">SAIR</button>
                </form>    
            </div>
            </div>
            </div> 
          </main>
       </body>
      <?php include('rodape.php') ?>
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.