D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
html
/
crsys_ant
/
adm
/
vendor_Ant
/
api
/
Filename :
gravaAutorizacao.php
back
Copy
<?php header('Content-Type: application/json'); require_once "ConectaPdo.php"; /* =============================== CONSTANTE URL ================================ */ //define('URL', 'http://localhost/crsys/'); /* =============================== PHPMailer ================================ */ require_once $_SERVER['DOCUMENT_ROOT'].'/crsys/adm/vendor/phpmailer/phpmailer/src/Exception.php'; require_once $_SERVER['DOCUMENT_ROOT'].'/crsys/adm/vendor/phpmailer/phpmailer/src/PHPMailer.php'; require_once $_SERVER['DOCUMENT_ROOT'].'/crsys/adm/vendor/phpmailer/phpmailer/src/SMTP.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; try { $pdo->beginTransaction(); /* =============================== RECEBE POST ================================ */ $empr_id = $_POST['empr_id'] ?? null; $orca_id = $_POST['orca_id'] ?? null; $num_revisao = $_POST['num_revisao'] ?? null; $usu_id = $_POST['usu_id'] ?? null; $usu_nome = $_POST['usu_nome'] ?? null; $url = $_POST['url'] ?? null; $vlr_solicitado = (float)($_POST['vlr_solicitado'] ?? 0); if ($empr_id === null || $orca_id === null || $num_revisao === null) { throw new Exception('Parâmetros obrigatórios não informados'); } /* =============================== VERIFICA SE JÁ EXISTE ================================ */ $sqlExiste = " SELECT id FROM gre_pedido_autorizacao WHERE empr_id = :empr_id AND orca_id = :orca_id AND num_revisao = :num_revisao and autorizado is null LIMIT 1 "; $stmtExiste = $pdo->prepare($sqlExiste); $stmtExiste->execute([ ':empr_id' => $empr_id, ':orca_id' => $orca_id, ':num_revisao' => $num_revisao ]); if ($stmtExiste->fetch()) { throw new Exception('Já existe solicitação pendente para este orçamento'); } /* =============================== BUSCA ORÇAMENTO ================================ */ $sqlCab = " SELECT * FROM gre_cab_orcamento WHERE empr_id = :empr_id AND orca_id = :orca_id AND num_revisao = :num_revisao LIMIT 1 "; $stmtCab = $pdo->prepare($sqlCab); $stmtCab->execute([ ':empr_id' => $empr_id, ':orca_id' => $orca_id, ':num_revisao' => $num_revisao ]); $cab = $stmtCab->fetch(PDO::FETCH_ASSOC); if (!$cab) { throw new Exception('Orçamento não encontrado'); } /* =============================== DADOS ================================ */ date_default_timezone_set('America/Sao_Paulo'); $data_solicitacao = date('Y-m-d H:i:s'); $chave = md5($empr_id.$orca_id.$num_revisao.uniqid()); $vlr_total = (float)$cab['vlr_total']; $perc = ($vlr_total > 0) ? round(($vlr_solicitado * 100) / $vlr_total, 2) : 0; /* =============================== INSERT AUTORIZAÇÃO ================================ */ $sqlInsert = " INSERT INTO gre_pedido_autorizacao ( empr_id, orca_id, num_revisao, nome_cliente, vend_id, obra, vlr_desc_atual, vlr_total, vlr_solicitado, usu_id, usu_nome, data_solicitacao, chave ) VALUES ( :empr_id, :orca_id, :num_revisao, :nome_cliente, :vend_id, :obra, :vlr_desc_atual, :vlr_total, :vlr_solicitado, :usu_id, :usu_nome, :data_solicitacao, :chave ) "; $stmtInsert = $pdo->prepare($sqlInsert); $stmtInsert->execute([ ':empr_id' => $empr_id, ':orca_id' => $orca_id, ':num_revisao' => $num_revisao, ':nome_cliente' => $cab['nome_cliente'], ':vend_id' => $cab['vend'], ':obra' => $cab['obra'], ':vlr_desc_atual' => $cab['vlr_desc'], ':vlr_total' => $vlr_total, ':vlr_solicitado' => $vlr_solicitado, ':usu_id' => $usu_id, ':usu_nome' => $usu_nome, ':data_solicitacao' => $data_solicitacao, ':chave' => $chave ]); /* =============================== CONTEÚDO DO E-MAIL ================================ */ $conteudo = "Amauri Jr,<br><br>"; $conteudo .= "Vendedor {$usu_nome} solicitou autorização de desconto.<br><br>"; $conteudo .= "Orçamento: {$orca_id} / Revisão: {$num_revisao}<br>"; $conteudo .= "Obra: {$cab['obra']}<br>"; $conteudo .= "Cliente: {$cab['nome_cliente']}<br><br>"; $conteudo .= "Valor total: R$ " . number_format($vlr_total, 2, ',', '.') . "<br>"; $conteudo .= "Desconto atual: R$ " . number_format($cab['vlr_desc'], 2, ',', '.') . "<br>"; $conteudo .= "<b>Desconto solicitado: R$ " . number_format($vlr_solicitado, 2, ',', '.') . " ({$perc}%)</b><br><br>"; $conteudo .= "Resposta:<br><br>"; $conteudo .= " <a href='" . $url . "vendor/api/pega_autorizacao.php?chave=s{$chave}' style='color:#fff;background:#2e7d32;padding:10px 16px; text-decoration:none;font-weight:bold;border-radius:4px; display:inline-block;'> AUTORIZAR </a><br><br> <a href='" . $url . "vendor/api/pega_autorizacao.php?chave=n{$chave}' style='color:#fff;background:#d32f2f;padding:10px 16px; text-decoration:none;font-weight:bold;border-radius:4px; display:inline-block;'> NÃO AUTORIZAR </a><br><br> "; /* =============================== ENVIO DO E-MAIL ================================ */ $stmtEmail = $pdo->query("SELECT * FROM adms_confs_emails WHERE id = 1"); $dadosEmail = $stmtEmail->fetch(PDO::FETCH_ASSOC); $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = $dadosEmail['host']; $mail->SMTPAuth = true; $mail->Username = $dadosEmail['usuario']; $mail->Password = $dadosEmail['senha']; $mail->SMTPSecure = $dadosEmail['smtpsecure']; $mail->Port = $dadosEmail['porta']; $mail->setFrom('noreply@crsys.com.br', 'Departamento Comercial'); $mail->addAddress('crmarques@uol.com.br', 'Carlos Marques'); $mail->isHTML(true); $mail->Subject = utf8_decode("PEDIDO DE AUTORIZAÇÃO Nº {$orca_id}/{$num_revisao}"); $mail->Body = $conteudo; $mail->send(); /* =============================== UPDATE STATUS DO ORÇAMENTO ================================ */ $sqlUpdate = " UPDATE gre_cab_orcamento SET status_id = 3 WHERE orca_id = :orca_id AND num_revisao = :num_revisao "; $stmtUpdate = $pdo->prepare($sqlUpdate); $stmtUpdate->execute([ ':orca_id' => $orca_id, ':num_revisao' => $num_revisao ]); $pdo->commit(); echo json_encode([ 'status' => 'success', 'msg' => 'Solicitação enviada e orçamento atualizado', 'chave' => $chave ]); } catch (Throwable $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } echo json_encode([ 'status' => 'error', 'msg' => $e->getMessage() ]); }