D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
html
/
crsys
/
adm
/
vendor
/
api
/
Filename :
gravaItem.php
back
Copy
<?php ob_start(); header('Content-Type: application/json; charset=utf-8'); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); /* |-------------------------------------------------------------------------- | CAPTURA ERRO FATAL |-------------------------------------------------------------------------- */ register_shutdown_function(function () { $erro = error_get_last(); if ($erro !== null) { while (ob_get_level()) { ob_end_clean(); } echo json_encode([ 'status' => 'error', 'mensagem' => 'Erro fatal', 'erro' => $erro ]); exit; } }); /* |-------------------------------------------------------------------------- | CONEXÃO |-------------------------------------------------------------------------- */ include_once "ConectaPdo.php"; /* |-------------------------------------------------------------------------- | PDO ERRMODE |-------------------------------------------------------------------------- */ $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /* |-------------------------------------------------------------------------- | FUNÇÕES |-------------------------------------------------------------------------- */ function limparMascara($valor) { if ($valor === null || $valor === '') { return 0; } $valor = preg_replace('/R\$\s*/u', '', $valor); $valor = preg_replace('/\s+/u', '', $valor); $valor = str_replace('.', '', $valor); $valor = str_replace(',', '.', $valor); return $valor; } /* |-------------------------------------------------------------------------- | CONTROLE |-------------------------------------------------------------------------- */ $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']); $item_id = $_POST['item'] ?? null; unset($_POST['item_id']); /* |-------------------------------------------------------------------------- | CAMPOS COM 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' ]; /* |-------------------------------------------------------------------------- | SERVIÇOS |-------------------------------------------------------------------------- */ $servicos = []; if (!empty($_POST['servicos'])) { $servicos = json_decode($_POST['servicos'], true); if (!is_array($servicos)) { $servicos = []; } unset($_POST['servicos']); } /* |-------------------------------------------------------------------------- | TRATAMENTO DOS DADOS (SEM FILTRO DE CAMPOS) |-------------------------------------------------------------------------- */ $dados = []; foreach ($_POST as $key => $value) { if (is_array($value)) { continue; } $value = trim($value); if (in_array($key, $camposComMascara)) { $value = limparMascara($value); } $dados[$key] = ($value === '') ? null : $value; } /* |-------------------------------------------------------------------------- | MAPEAMENTO |-------------------------------------------------------------------------- */ if (isset($dados['material_input'])) { $dados['material'] = $dados['material_input']; unset($dados['material_input']); } /* |-------------------------------------------------------------------------- | CHECKBOX |-------------------------------------------------------------------------- */ $dados['esqua'] = isset($dados['esqua']) ? 1 : 0; /* |-------------------------------------------------------------------------- | AJUSTES |-------------------------------------------------------------------------- */ if (empty($dados['servico'])) { $dados['qtde_serv'] = 0; } if (!isset($dados['base_total']) || $dados['base_total'] < 1) { $dados['base_total'] = ($dados['vlr_total_mo'] ?? 0) + ($dados['vlr_total_mat'] ?? 0); } /* |-------------------------------------------------------------------------- | 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; } /* |-------------------------------------------------------------------------- | CONTROLES |-------------------------------------------------------------------------- */ $orcamento_id = $dados['orca_id'] ?? 0; $num_revisao = $dados['num_revisao'] ?? 0; $empr_id = $dados['empr_id'] ?? 0; $data_orc = date("d/m/Y"); $data_rev_orc = date("d/m/Y"); try { $pdo->beginTransaction(); /* |-------------------------------------------------------------------------- | INSERT |-------------------------------------------------------------------------- */ if (!$regravar) { $colunas = array_keys($dados); $placeholders = array_map(fn($c) => ':' . $c, $colunas); $sql = " INSERT INTO gre_item_orcamento (" . implode(',', $colunas) . ") VALUES (" . implode(',', $placeholders) . ") "; $stmt = $pdo->prepare($sql); $stmt->execute($dados); $item_id = $pdo->lastInsertId(); $mensagem = 'Item gravado com sucesso.'; } else { if (empty($item_id)) { throw new Exception("ID do item não informado."); } $item_id = (int)$item_id; $sqlDelete = " DELETE FROM gre_orca_servico WHERE empr_id = :empr_id AND orca_id = :orca_id AND num_revisao = :num_revisao AND item_orca = :item_orca "; $pdo->prepare($sqlDelete)->execute([ ':empr_id' => $empr_id, ':orca_id' => $orcamento_id, ':num_revisao' => $num_revisao, ':item_orca' => $item_id ]); $total_servico = 0; if ($servicos) { $sqlInsertServico = " INSERT INTO gre_orca_servico ( empr_id, orca_id, num_revisao, item_orca, id_servico, qtde_pecas, qtde, preco ) VALUES ( :empr_id, :orca_id, :num_revisao, :item_orca, :id_servico, :qtde_pecas, :qtde, :preco ) "; $stmtServico = $pdo->prepare($sqlInsertServico); foreach ($servicos as $s) { $qtde = $s['campos'][0] ?? 0; $preco = $s['campos'][2] ?? 0; $stmtServico->execute([ ':empr_id' => $empr_id, ':orca_id' => $orcamento_id, ':num_revisao' => $num_revisao, ':item_orca' => $item_id, ':id_servico' => $s['idServico'] ?? 0, ':qtde_pecas' => $dados['qtde_pecas'] ?? 0, ':qtde' => $qtde, ':preco' => $preco ]); $total_servico += ($qtde * $preco); } } $dados['vlr_total_serv'] = $total_servico; /* |-------------------------------------------------------------------------- | UPDATE DINÂMICO (SEM LISTA DE CAMPOS) |-------------------------------------------------------------------------- */ $colunas = array_keys($dados); $setClause = implode(', ', array_map(fn($c) => "{$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); $mensagem = 'Item atualizado com sucesso.'; } /* |-------------------------------------------------------------------------- | PARAMETROS |-------------------------------------------------------------------------- */ $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); $raio_frete = $param['raio_frete']; $vlr_unit_frete = $param['vlr_unit_frete']; /* |-------------------------------------------------------------------------- | 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']; /* |-------------------------------------------------------------------------- | CABEÇALHO |-------------------------------------------------------------------------- */ $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); $mult_m2 = ($soma_m2 > $raio_frete) ? ceil($soma_m2 / $raio_frete) : 1; $vlr_frete = ($cab['distancia'] > $raio_frete) ? round(($cab['distancia'] * $vlr_unit_frete * $mult_m2), 2) : 0; /* |-------------------------------------------------------------------------- | UPDATE CABEÇALHO |-------------------------------------------------------------------------- */ $modified = date("Y-m-d H:i:s"); $pdo->prepare(" 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 ")->execute([ ':vlr_semdesc' => $soma_vlr_total, ':vlr_base_total' => $soma_base_total, ':vlr_total' => $soma_vlr_total + $vlr_frete - ($cab['vlr_desc'] ?? 0), ':vlr_frete' => $vlr_frete, ':vlr_insumo' => $soma_vlr_insumo, ':modified' => $modified, ':usu_modified' => $usu_id, ':orca_id' => $orcamento_id, ':num_revisao' => $num_revisao ]); $pdo->commit(); ob_clean(); echo json_encode([ 'status' => 'success', 'mensagem' => $mensagem, 'id_item' => $item_id, 'orcamento_id' => $orcamento_id, 'num_revisao' => $num_revisao, 'soma_vlr_total' => $soma_vlr_total, 'vlr_frete' => $vlr_frete, 'vlr_total_cab' => $soma_vlr_total + $vlr_frete - ($cab['vlr_desc'] ?? 0) ]); } catch (PDOException $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } ob_clean(); echo json_encode([ 'status' => 'error', 'mensagem' => $e->getMessage() ]); } catch (Exception $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } ob_clean(); echo json_encode([ 'status' => 'error', 'mensagem' => $e->getMessage() ]); }