cron/alerta_manutencao.php
Seleciona registros cuja próxima manutenção é igual à data atual, tenta o envio e atualiza o estado do alerta quando o envio é aceito.
Seleciona registros cuja próxima manutenção é igual à data atual, tenta o envio e atualiza o estado do alerta quando o envio é aceito.
Fonte conferida: cron/alerta_manutencao.php
SHA-256: 236611576f636b406e20c5b095cf1a22314765bb1d28d0409b3a98b6cadb3fbe
Dependências extraídas do arquivo:
Include: __DIR__ . '/timezone_cron.php'Include: __DIR__ . '/../sistema/conexao.php'Include: $arquivo_envio_originalInclude: $arquivo_envio_cronTabela: clientesTabela: proteses
Bytes inválidos em UTF-8 são exibidos como \xNN, sem alterar o arquivo original.
Rotina agendada
Automação / cron
152
| Linha | Código | Explicação técnica |
|---|---|---|
| 1 | <?php | Abre um bloco PHP executado no servidor. |
| 2 | @set_time_limit(0); | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 3 | Linha em branco usada para separar blocos do arquivo. | |
| 4 | if (is_file(__DIR__ . '/timezone_cron.php')) { | Avalia a condição escrita nesta linha. |
| 5 | require_once __DIR__ . '/timezone_cron.php'; | Carrega o arquivo ou a dependência indicada na própria linha. |
| 6 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 7 | Linha em branco usada para separar blocos do arquivo. | |
| 8 | require_once __DIR__ . '/../sistema/conexao.php'; | Carrega o arquivo ou a dependência indicada na própria linha. |
| 9 | Linha em branco usada para separar blocos do arquivo. | |
| 10 | $tabela = 'manutencoes_protese'; | Atribui o valor ou resultado exibido à variável. |
| 11 | $hoje = function_exists('bb_cron_data_hoje') ? bb_cron_data_hoje() : date('Y-m-d'); | Atribui o valor ou resultado exibido à variável. |
| 12 | Linha em branco usada para separar blocos do arquivo. | |
| 13 | /* | Comentário existente no código-fonte. |
| 14 | BarberBot em domínio próprio. | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 15 | Rota padrão do agendamento: /agendamentos/ | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 16 | Usa somente o domínio próprio configurado em /sistema/conexao.php. | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 17 | */ | Comentário existente no código-fonte. |
| 18 | $rota_agendamento = 'agendamentos/'; | Atribui o valor ou resultado exibido à variável. |
| 19 | Linha em branco usada para separar blocos do arquivo. | |
| 20 | $nome_sistema_cron = 'BarberBot'; | Atribui o valor ou resultado exibido à variável. |
| 21 | if (isset($nome_sistema) && $nome_sistema != '') { | Avalia a condição escrita nesta linha. |
| 22 | $nome_sistema_cron = $nome_sistema; | Atribui o valor ou resultado exibido à variável. |
| 23 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 24 | Linha em branco usada para separar blocos do arquivo. | |
| 25 | $url_sistema_cron = function_exists('bb_cron_url_base') ? bb_cron_url_base($url_sistema ?? '') : (isset($url_sistema) ? rtrim($url_sistema, '/') . '/' : ''); | Atribui o valor ou resultado exibido à variável. |
| 26 | Linha em branco usada para separar blocos do arquivo. | |
| 27 | $arquivo_envio_original = __DIR__ . '/../ajax/api-texto.php'; | Atribui o valor ou resultado exibido à variável. |
| 28 | $arquivo_envio_cron = __DIR__ . '/texto.php'; | Atribui o valor ou resultado exibido à variável. |
| 29 | Linha em branco usada para separar blocos do arquivo. | |
| 30 | if (!file_exists($arquivo_envio_original) && !file_exists($arquivo_envio_cron)) { | Avalia a condição escrita nesta linha. |
| 31 | echo 'Arquivo de envio WhatsApp não encontrado'; | Envia conteúdo para a saída da requisição. |
| 32 | exit(); | Interrompe a execução neste ponto. |
| 33 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 34 | Linha em branco usada para separar blocos do arquivo. | |
| 35 | /* | Comentário existente no código-fonte. |
| 36 | Envia o alerta somente na data exata da próxima manutenção. | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 37 | Depois do envio, o campo alerta_manutencao_enviado recebe 1, evitando reenvio no mesmo dia. | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 38 | */ | Comentário existente no código-fonte. |
| 39 | $query = $pdo->prepare(" | Prepara uma instrução SQL com PDO. |
| 40 | SELECT | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 41 | m.id, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 42 | m.cliente, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 43 | m.id_protese, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 44 | m.proxima_manutencao, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 45 | m.alerta_manutencao_enviado, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 46 | c.nome AS nome_cliente, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 47 | c.telefone, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 48 | p.modelo AS nome_protese | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 49 | FROM $tabela m | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 50 | LEFT JOIN clientes c ON m.cliente = c.id | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 51 | LEFT JOIN proteses p ON m.id_protese = p.id | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 52 | WHERE m.proxima_manutencao IS NOT NULL | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 53 | AND m.proxima_manutencao != '0000-00-00' | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 54 | AND m.proxima_manutencao = :hoje | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 55 | AND (m.alerta_manutencao_enviado = 0 OR m.alerta_manutencao_enviado IS NULL) | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 56 | ORDER BY m.proxima_manutencao ASC | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 57 | "); | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 58 | Linha em branco usada para separar blocos do arquivo. | |
| 59 | $query->bindValue(':hoje', $hoje); | Associa um valor ao parâmetro da consulta preparada. |
| 60 | $query->execute(); | Executa a instrução preparada. |
| 61 | $res = $query->fetchAll(PDO::FETCH_ASSOC); | Lê dados retornados pela consulta. |
| 62 | Linha em branco usada para separar blocos do arquivo. | |
| 63 | if (count($res) == 0) { | Avalia a condição escrita nesta linha. |
| 64 | echo 'Nenhuma manutenção com vencimento hoje para alertar'; | Envia conteúdo para a saída da requisição. |
| 65 | exit(); | Interrompe a execução neste ponto. |
| 66 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 67 | Linha em branco usada para separar blocos do arquivo. | |
| 68 | $total_enviados = 0; | Atribui o valor ou resultado exibido à variável. |
| 69 | $total_ignorados = 0; | Atribui o valor ou resultado exibido à variável. |
| 70 | Linha em branco usada para separar blocos do arquivo. | |
| 71 | for ($i = 0; $i < count($res); $i++) { | Controla uma repetição conforme a expressão exibida. |
| 72 | Linha em branco usada para separar blocos do arquivo. | |
| 73 | $id = $res[$i]['id']; | Atribui o valor ou resultado exibido à variável. |
| 74 | $cliente = $res[$i]['cliente']; | Atribui o valor ou resultado exibido à variável. |
| 75 | $id_protese = $res[$i]['id_protese']; | Atribui o valor ou resultado exibido à variável. |
| 76 | Linha em branco usada para separar blocos do arquivo. | |
| 77 | $nome = isset($res[$i]['nome_cliente']) ? trim($res[$i]['nome_cliente']) : ''; | Atribui o valor ou resultado exibido à variável. |
| 78 | $nome_protese = isset($res[$i]['nome_protese']) ? trim($res[$i]['nome_protese']) : ''; | Atribui o valor ou resultado exibido à variável. |
| 79 | $proxima_manutencao = isset($res[$i]['proxima_manutencao']) ? trim($res[$i]['proxima_manutencao']) : ''; | Atribui o valor ou resultado exibido à variável. |
| 80 | $telefone_cliente = isset($res[$i]['telefone']) ? trim($res[$i]['telefone']) : ''; | Atribui o valor ou resultado exibido à variável. |
| 81 | Linha em branco usada para separar blocos do arquivo. | |
| 82 | if ($telefone_cliente == '') { | Avalia a condição escrita nesta linha. |
| 83 | $total_ignorados++; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 84 | continue; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 85 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 86 | Linha em branco usada para separar blocos do arquivo. | |
| 87 | $telefone = function_exists('bb_cron_normalizar_telefone') ? bb_cron_normalizar_telefone($telefone_cliente) : preg_replace('/[^0-9]/', '', $telefone_cliente); | Atribui o valor ou resultado exibido à variável. |
| 88 | Linha em branco usada para separar blocos do arquivo. | |
| 89 | if ($telefone == '') { | Avalia a condição escrita nesta linha. |
| 90 | $total_ignorados++; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 91 | continue; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 92 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 93 | Linha em branco usada para separar blocos do arquivo. | |
| 94 | $data_ts = strtotime($proxima_manutencao); | Atribui o valor ou resultado exibido à variável. |
| 95 | if (!$data_ts) { | Avalia a condição escrita nesta linha. |
| 96 | $total_ignorados++; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 97 | continue; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 98 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 99 | Linha em branco usada para separar blocos do arquivo. | |
| 100 | if ($nome == '') { | Avalia a condição escrita nesta linha. |
| 101 | $nome = 'cliente'; | Atribui o valor ou resultado exibido à variável. |
| 102 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 103 | Linha em branco usada para separar blocos do arquivo. | |
| 104 | if ($nome_protese == '') { | Avalia a condição escrita nesta linha. |
| 105 | $nome_protese = 'Prótese capilar'; | Atribui o valor ou resultado exibido à variável. |
| 106 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 107 | Linha em branco usada para separar blocos do arquivo. | |
| 108 | $data_proxima_f = date('d/m/Y', $data_ts); | Atribui o valor ou resultado exibido à variável. |
| 109 | Linha em branco usada para separar blocos do arquivo. | |
| 110 | $link_agendamento = $url_sistema_cron . ltrim($rota_agendamento, '/'); | Atribui o valor ou resultado exibido à variável. |
| 111 | $link_agendamento .= '?cliente=' . urlencode((string)$cliente) . '&id_protese=' . urlencode((string)$id_protese); | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 112 | Linha em branco usada para separar blocos do arquivo. | |
| 113 | $mensagem = "👋 *Olá {$nome}*, tudo bem?%0A%0A"; | Atribui o valor ou resultado exibido à variável. |
| 114 | $mensagem .= "🚨 Identificamos que a sua *manutenção de prótese capilar* vence hoje.%0A%0A"; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 115 | $mensagem .= "📅 *Data prevista:* {$data_proxima_f}%0A"; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 116 | $mensagem .= "💇 *Prótese:* {$nome_protese}%0A%0A"; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 117 | $mensagem .= "Para manter o melhor resultado, recomendamos realizar o agendamento da sua próxima manutenção.%0A%0A"; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 118 | $mensagem .= "🔗 *Clique abaixo para agendar:*%0A"; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 119 | $mensagem .= "{$link_agendamento}%0A%0A"; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 120 | $mensagem .= "Atenciosamente,%0A*{$nome_sistema_cron}*"; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 121 | Linha em branco usada para separar blocos do arquivo. | |
| 122 | $status_mensagem = ''; | Atribui o valor ou resultado exibido à variável. |
| 123 | Linha em branco usada para separar blocos do arquivo. | |
| 124 | if (file_exists($arquivo_envio_original)) { | Avalia a condição escrita nesta linha. |
| 125 | include($arquivo_envio_original); | Carrega o arquivo ou a dependência indicada na própria linha. |
| 126 | } else { | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 127 | include($arquivo_envio_cron); | Carrega o arquivo ou a dependência indicada na própria linha. |
| 128 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 129 | Linha em branco usada para separar blocos do arquivo. | |
| 130 | $enviado = true; | Atribui o valor ou resultado exibido à variável. |
| 131 | if (isset($api) && $api == 'menuia') { | Avalia a condição escrita nesta linha. |
| 132 | $enviado = (@$status_mensagem == 'Mensagem enviada com sucesso.' || @$status_mensagem == 'OK'); | Atribui o valor ou resultado exibido à variável. |
| 133 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 134 | Linha em branco usada para separar blocos do arquivo. | |
| 135 | if ($enviado) { | Avalia a condição escrita nesta linha. |
| 136 | $query_update = $pdo->prepare(" | Prepara uma instrução SQL com PDO. |
| 137 | UPDATE $tabela SET | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 138 | alerta_manutencao_enviado = 1, | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 139 | data_alerta_manutencao = NOW() | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 140 | WHERE id = :id | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 141 | "); | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 142 | $query_update->bindValue(':id', $id); | Associa um valor ao parâmetro da consulta preparada. |
| 143 | $query_update->execute(); | Executa a instrução preparada. |
| 144 | Linha em branco usada para separar blocos do arquivo. | |
| 145 | $total_enviados++; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 146 | } else { | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 147 | $total_ignorados++; | Linha do arquivo original; deve ser lida junto com o bloco em que está inserida. |
| 148 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 149 | } | Fecha ou delimita a estrutura iniciada anteriormente. |
| 150 | Linha em branco usada para separar blocos do arquivo. | |
| 151 | echo 'Alertas enviados: ' . $total_enviados . ' | Ignorados: ' . $total_ignorados; | Envia conteúdo para a saída da requisição. |
| 152 | ?> | Fecha o bloco PHP. |