D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
html
/
crsys_ant
/
adm
/
vendor_Ant
/
api
/
Filename :
gravaItem.php
back
Copy
<?php header('Content-Type: application/json'); // Conexão com o banco include_once "ConectaPdo.php"; /** * Remove máscara monetária e numérica */ function limparMascara($valor) { $valor = preg_replace('/R\$\s*/u', '', $valor); $valor = preg_replace('/\s+/u', '', $valor); $valor = str_replace('.', '', $valor); $valor = str_replace(',', '.', $valor); return $valor; } // Controle de regravação $regravar = isset($_POST['regravar']) ? filter_var($_POST['regravar'], FILTER_VALIDATE_BOOLEAN) : false; $usu_id = isset($_POST['usuario_id']) ? (int)$_POST['usuario_id'] : 0; unset($_POST['regravar']); unset($_POST['usuario_id']); //unset($_POST['utiliza_insumo']); // ID do item (para update) $item_id = $_POST['item_id'] ?? null; unset($_POST['item_id']); // Campos que possuem máscara $camposComMascara = [ 'alt_fron_esq','alt_fron_dir','alt_fron_fun','alt_fron_fren', 'larg_fron_esq','larg_fron_dir','larg_fron_fun','larg_fron_fren', 'alt_saia_esq','alt_saia_dir','alt_saia_fun','alt_saia_fren', 'larg_saia_esq','larg_saia_dir','larg_saia_fun','larg_saia_fren', 'larg','prof','larg_aa', 'vlr_total_mo','vlr_total_mat','vlr_total', 'vlr_insumo', 'vlr_unit_acab','vlr_unit_mat','vlr_unit_serv','vlr_unit_prod' ]; // Trata dados do POST $dados = []; /* foreach ($_POST as $key => $value) { $value = trim($value); if (in_array($key, $camposComMascara)) { $value = limparMascara($value); } $dados[$key] = ($value === '') ? null : $value; } */ $logFile = __DIR__ . '/log.txt'; foreach ($_POST as $key => $value) { $value = trim($value); if (in_array($key, $camposComMascara)) { $value = limparMascara($value); } $dados[$key] = ($value === '') ? null : $value; // grava no log $linha = date('Y-m-d H:i:s') . " | {$key} => " . var_export($dados[$key], true) . PHP_EOL; file_put_contents($logFile, $linha, FILE_APPEND); } // Ajuste de serviço if (empty($dados['servico'])) { $dados['qtde_serv'] = 0; } if ($dados['base_total'] < 1) { $dados['base_total'] = $dados['vlr_total_mo'] + $dados['vlr_total_mat']; } // Datas date_default_timezone_set("America/Sao_Paulo"); if($regravar){ unset( $dados['created']); unset( $dados['usu_created']); $dados['modified'] = date("Y-m-d H:i:s"); $dados['usu_modified'] = $usu_id; }else{ unset( $dados['modified']); unset( $dados['usu_modified']); $dados['created'] = date("Y-m-d H:i:s"); $dados['usu_created'] = $usu_id; } // Dados de controle $orcamento_id = $dados['orca_id']; $num_revisao = $dados['num_revisao']; $empr_id = $dados['empr_id']; //unset( $dados['empr_id']); $data_orc = date("d/m/Y"); $data_rev_orc = date("d/m/Y"); try { // Início de transação para garantir consistência $pdo->beginTransaction(); if (!$regravar) { // ===================== INSERT ===================== $colunas = array_keys($dados); $placeholders = array_map(function($c) { return ':' . $c; }, $colunas); $sql = " INSERT INTO gre_item_orcamento (" . implode(',', $colunas) . ") VALUES (" . implode(',', $placeholders) . ") "; $stmt = $pdo->prepare($sql); $stmt->execute($dados); $id_item = $pdo->lastInsertId(); $mensagem = 'Item gravado com sucesso.'; } else { // ===================== UPDATE ===================== if (!$item_id) { throw new Exception("ID do item não informado para regravação."); } $colunas = array_keys($dados); $setClause = implode(', ', array_map(function($c) { return $c . ' = :' . $c;}, $colunas)); $sql = " UPDATE gre_item_orcamento SET $setClause WHERE id = :item_id "; $stmt = $pdo->prepare($sql); $dados['item_id'] = $item_id; $stmt->execute($dados); $id_item = $item_id; $mensagem = 'Item atualizado com sucesso.'; } // ============ variáveis para calculo do frete $sqlparam = "SELECT metro2_maximo, raio_frete, vlr_frete vlr_unit_frete FROM gre_parametros WHERE empr_id = :empr_id"; $stmtParam = $pdo->prepare($sqlparam ); $stmtParam->execute([ ':empr_id' => $empr_id, ]); $param = $stmtParam->fetch(PDO::FETCH_ASSOC); $m2_maximo = $param['metro2_maximo']; $raio_frete = $param['raio_frete']; $vlr_unit_frete = $param['vlr_unit_frete']; // ===================== SOMA DOS TOTAIS ===================== $sqlTotais = " SELECT COALESCE(SUM(m2), 0) AS soma_m2, COALESCE(SUM(vlr_total), 0) AS soma_vlr_total, COALESCE(SUM(base_total), 0) AS soma_base_total, COALESCE(SUM(vlr_insumo), 0) AS soma_vlr_insumo FROM gre_item_orcamento WHERE orca_id = :orca_id AND num_revisao = :num_revisao "; $stmtTotais = $pdo->prepare($sqlTotais); $stmtTotais->execute([ ':orca_id' => $orcamento_id, ':num_revisao'=> $num_revisao ]); $totais = $stmtTotais->fetch(PDO::FETCH_ASSOC); $soma_vlr_total = $totais['soma_vlr_total']; $soma_base_total = $totais['soma_base_total']; $soma_vlr_insumo = $totais['soma_vlr_insumo']; $soma_m2 = $totais['soma_m2']; // ===================== ATUALIZA CABEÇALHO ===================== // Pega valores atuais de frete e desconto $sqlCab = " SELECT distancia, vlr_frete, vlr_desc FROM gre_cab_orcamento WHERE orca_id = :orca_id AND num_revisao = :num_revisao LIMIT 1 "; $stmtCab = $pdo->prepare($sqlCab); $stmtCab->execute([ ':orca_id' => $orcamento_id, ':num_revisao' => $num_revisao ]); $cab = $stmtCab->fetch(PDO::FETCH_ASSOC); if ($soma_m2 > $raio_frete) { $mult_m2 = ceil($soma_m2 / $raio_frete); }else{ $mult_m2 = 1; } $vlr_frete = $cab['vlr_frete'] ?? 0; $vlr_desc = $cab['vlr_desc'] ?? 0; $distancia = $cab['distancia'] ?? 0; if($distancia > $raio_frete) { $vlr_frete = round(($distancia * $vlr_unit_frete * $mult_m2),2); }else{ $vlr_frete = 0; } $modified = date("Y-m-d H:i:s"); $usu_modified= $usu_id; // Atualiza gre_cab_orcamento $sqlUpdateCab = " UPDATE gre_cab_orcamento SET vlr_semdesc = :vlr_semdesc, vlr_base_total = :vlr_base_total, vlr_total = :vlr_total, vlr_frete = :vlr_frete, vlr_insumo = :vlr_insumo, modified = :modified, usu_modified = :usu_modified WHERE orca_id = :orca_id AND num_revisao = :num_revisao "; $stmtUpdateCab = $pdo->prepare($sqlUpdateCab); $stmtUpdateCab->execute([ ':vlr_semdesc' => $soma_vlr_total, ':vlr_base_total' => $soma_base_total, ':vlr_total' => $soma_vlr_total + $vlr_frete - $vlr_desc, ':vlr_frete' => $vlr_frete, ':vlr_insumo' => $soma_vlr_insumo, ':orca_id' => $orcamento_id, ':num_revisao' => $num_revisao, ':modified' => $modified, ':usu_modified' => $usu_modified ]); // ===================== COMMIT ===================== $pdo->commit(); // ===================== RETORNO ===================== echo json_encode([ 'status' => 'success', 'mensagem' => $mensagem, 'id_item' => $id_item, 'data' => $data_orc, 'data_ult_rev' => $data_rev_orc, 'orcamento_id' => $orcamento_id, 'num_revisao' => $num_revisao, 'soma_vlr_total' => $soma_vlr_total, 'soma_base_total' => $soma_base_total, 'vlr_total_cab' => $soma_vlr_total + $vlr_frete - $vlr_desc, 'vlr_total_insumo' => $soma_vlr_insumo, 'vlr_frete' => $vlr_frete ]); } catch (PDOException $e) { // Rollback em caso de erro if ($pdo->inTransaction()) $pdo->rollBack(); echo json_encode([ 'status' => 'error', 'mensagem' => 'Erro no banco: ' . $e->getMessage() ]); } catch (Exception $e) { if ($pdo->inTransaction()) $pdo->rollBack(); echo json_encode([ 'status' => 'error', 'mensagem' => $e->getMessage() ]); }