D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
html
/
crsys
/
adm
/
vendor
/
api
/
Filename :
gravar_muda_material.php
back
Copy
<?php ini_set('display_errors', 0); ini_set('log_errors', 1); error_reporting(E_ALL); include_once "ConectaPdo.php"; /* =============================== PARÂMETROS DE ENTRADA ================================ */ $orcamento_id = isset($_POST['orcamento_id']) ? (int) $_POST['orcamento_id'] : null; $revisao = isset($_POST['revisao']) ? (int) $_POST['revisao'] : null; $ambiente_id = isset($_POST['ambiente_id']) ? (int) $_POST['ambiente_id'] : null; $atual = isset($_POST['atual']) ? trim($_POST['atual']) : null; // string! $novo = isset($_POST['novo']) ? trim($_POST['novo']) : null; $novoMaterId = isset($_POST['novo_mater_id']) ? (int) $_POST['novo_mater_id'] : null; $novoBenefId = isset($_POST['novo_benef_id']) ? (int) $_POST['novo_benef_id'] : null; $novo_preco = isset($_POST['novo_preco']) ? (float) $_POST['novo_preco'] : null; $empr_id = isset($_POST['empr_id']) ? (int) $_POST['empr_id'] : null; $tipo = strtolower(trim($_POST['tipo'] ?? '')); $item_id = isset($_POST['item_id']) ? (int)$_POST['item_id'] : 0; /* =============================== VALIDAÇÃO BÁSICA ================================ */ if (!$orcamento_id || $revisao === null) { echo json_encode([ 'status' => 'error', 'mensagem' => 'Parâmetros obrigatórios ausentes.' ]); exit; } /* =============================== SELEÇÃO DE ITENS ================================ */ $params = [ ':empr_id' => $empr_id, ':orca_id' => $orcamento_id, ':num_revisao' => $revisao ]; if ($tipo === 'item' && !empty($item_id)) { // ITEM → filtra somente pelo ID do item $sqlCab = " SELECT * FROM gre_item_orcamento WHERE empr_id = :empr_id AND orca_id = :orca_id AND num_revisao = :num_revisao AND id = :item_id "; $params[':item_id'] = $item_id; } else { // ORÇAMENTO / AMBIENTE → filtra pelo material $sqlCab = " SELECT * FROM gre_item_orcamento WHERE empr_id = :empr_id AND orca_id = :orca_id AND num_revisao = :num_revisao AND material = :material "; $params[':material'] = $atual; } $stmtCab = $pdo->prepare($sqlCab); $stmtCab->execute($params); $itens = $stmtCab->fetchAll(PDO::FETCH_ASSOC); if (empty($itens)) { echo json_encode(['erro' => 'Nenhum item encontrado']); exit; } /* =============================== PREPARA UPDATE ITENS ================================ */ $sqlUpdate = " UPDATE gre_item_orcamento SET material_id = :material_id, benef_id = :benef_id, material = :material, vlr_unit_mat = :vlr_unit_mat, vlr_total_mat = :vlr_total_mat, base_total = :base_total, base_mat = :base_mat, vlr_total = :vlr_total, modified = NOW() WHERE id = :id "; $stmtUpd = $pdo->prepare($sqlUpdate); /* =============================== LOOP + CÁLCULOS + LOG ================================ */ $pdo->beginTransaction(); try { $totalAtualizados = 0; foreach ($itens as $item) { $m2 = (float) $item['m2']; $qtde_pecas = (float) $item['qtde_pecas']; $total_mat = $novo_preco * $m2 * $qtde_pecas; $base_total = $total_mat; $vlr_mo = (float) $item['vlr_total_mo']; $vlr_total = $vlr_mo + $total_mat; if (!empty($item['ajuste']) && $item['ajuste'] > 100) { $vlr_total = round($vlr_total * ($item['ajuste'] / 100), 2); } $paramsUpd = [ ':material_id' => $novoMaterId, ':benef_id' => $novoBenefId, ':material' => $novo, ':vlr_unit_mat' => $novo_preco, ':vlr_total_mat' => $total_mat, ':base_total' => $base_total, ':base_mat' => $total_mat, ':vlr_total' => $vlr_total, ':id' => $item['id'] // ✅ usar id correto ]; $stmtUpd->execute($paramsUpd); $totalAtualizados += $stmtUpd->rowCount(); } /* =============================== ATUALIZA CABEÇALHO gre_cab_orcamento Considerando vlr_frete e vlr_desc ================================= */ $sqlSum = " SELECT SUM(vlr_total) AS vlr_semdesc, SUM(base_total) AS vlr_base_total FROM gre_item_orcamento WHERE orca_id = :orca_id AND num_revisao = :num_revisao AND empr_id = :empr_id "; $stmtSum = $pdo->prepare($sqlSum); $stmtSum->execute([ ':orca_id' => $orcamento_id, ':num_revisao' => $revisao, ':empr_id' => $empr_id ]); $totais = $stmtSum->fetch(PDO::FETCH_ASSOC); $sqlCabTotais = " SELECT vlr_frete, vlr_desc FROM gre_cab_orcamento WHERE orca_id = :orca_id AND num_revisao = :num_revisao AND empr_id = :empr_id "; $stmtCabTotais = $pdo->prepare($sqlCabTotais); $stmtCabTotais->execute([ ':orca_id' => $orcamento_id, ':num_revisao' => $revisao, ':empr_id' => $empr_id ]); $cabTotais = $stmtCabTotais->fetch(PDO::FETCH_ASSOC); $vlr_frete = isset($cabTotais['vlr_frete']) ? (float)$cabTotais['vlr_frete'] : 0; $vlr_desc = isset($cabTotais['vlr_desc']) ? (float)$cabTotais['vlr_desc'] : 0; $vlr_semdesc = $totais['vlr_semdesc'] ?? 0; $vlr_base_total = $totais['vlr_base_total'] ?? 0; $vlr_total = $vlr_semdesc + $vlr_frete - $vlr_desc; $sqlUpdateCab = " UPDATE gre_cab_orcamento SET vlr_semdesc = :vlr_semdesc, vlr_total = :vlr_total, vlr_base_total = :vlr_base_total WHERE orca_id = :orca_id AND num_revisao = :num_revisao AND empr_id = :empr_id "; $stmtUpdCab = $pdo->prepare($sqlUpdateCab); $stmtUpdCab->execute([ ':vlr_semdesc' => $vlr_semdesc, ':vlr_total' => $vlr_total, ':vlr_base_total' => $vlr_base_total, ':orca_id' => $orcamento_id, ':num_revisao' => $revisao, ':empr_id' => $empr_id ]); $pdo->commit(); echo json_encode([ 'sucesso' => true, 'itens_atualizados' => $totalAtualizados ]); } catch (Exception $e) { $pdo->rollBack(); echo json_encode(['erro' => $e->getMessage()]); }