D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
html
/
crsys_ant
/
adm
/
vendor_Ant
/
api
/
Filename :
gravaPedido_1.php
back
Copy
<?php header('Content-Type: application/json'); ini_set('display_errors', 0); // Desliga warnings na saída error_reporting(E_ALL); include_once "ConectaPdo.php"; // Forçar exceptions no PDO $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Função para limpar máscaras de moeda e números function limparMascara($campo, $valor) { $camposMoeda = ['perc_entrada','valor_entrada','valor_parcela','vlr_total']; $camposNumericos = ['telefone_obra','tel_vend','cep_obra','cep','cel']; if (in_array($campo, $camposMoeda)) { $valor = str_replace(['R$', ' ', "\xc2\xa0"], '', $valor); $valor = str_replace('.', '', $valor); $valor = str_replace(',', '.', $valor); return (float)$valor; } if (in_array($campo, $camposNumericos)) { return preg_replace('/\D/', '', $valor); } return $valor; } // Recebe JSON via AJAX $raw = file_get_contents("php://input"); $POST = json_decode($raw, true); if (!is_array($POST)) { echo json_encode(['status'=>'error','mensagem'=>'JSON inválido']); exit; } // Extrair cronograma se existir $cronograma = $POST['cronograma'] ?? []; unset($POST['cronograma']); // Campos especiais $camposMoeda = ['perc_entrada','valor_entrada','valor_parcela','vlr_total']; $camposNumericos = ['telefone_obra','tel_vend','cep_obra','cep','cel']; // Limpar campos desnecessários $remove = ['max_rev','max_status','max_status_id','ajuste','nome_stat','cor_cr','cel','cep','rua','municipio','uf']; foreach ($remove as $r) unset($POST[$r]); // Limpar e preparar dados $dados = []; foreach ($POST as $key => $value) { $value = trim((string)$value); if (in_array($key, $camposMoeda) || in_array($key, $camposNumericos)) { $value = limparMascara($key, $value); } $dados[$key] = ($value === '') ? null : $value; } // Timestamps e status date_default_timezone_set("America/Sao_Paulo"); $dados['modified'] = date("Y-m-d H:i:s"); $dados['status_id'] = 1; // IDs $orca_id = intval($dados['orca_id'] ?? 0); $num_revisao = intval($dados['num_revisao'] ?? 0); if ($orca_id <= 0) { echo json_encode(['status'=>'error','mensagem'=>'ID inválido']); exit; } try { // Atualiza número do pedido $pdo->exec("UPDATE gre_parametros SET ult_pedido = ult_pedido + 1 WHERE id = 1"); $novoNumPed = $pdo->query("SELECT ult_pedido FROM gre_parametros WHERE id = 1")->fetchColumn(); $dados['num_ped'] = $novoNumPed ?? 1; // Preparar UPDATE de orçamento $updateCampos = []; $params = []; foreach ($dados as $col => $val) { if (in_array($col, ['orca_id','num_revisao'])) continue; $updateCampos[] = "$col = :$col"; $params[$col] = $val; } $params['orca_id'] = $orca_id; $params['num_revisao'] = $num_revisao; $sql = "UPDATE gre_cab_orcamento SET " . implode(', ', $updateCampos) . " WHERE orca_id = :orca_id AND num_revisao = :num_revisao"; $stmt = $pdo->prepare($sql); $stmt->execute($params); // Atualiza status revisões antigas $sqlStatus = " UPDATE gre_cab_orcamento SET status_id = 88 WHERE orca_id = :orca_id AND num_revisao <> :num_revisao "; $pdo->prepare($sqlStatus)->execute([ ':orca_id' => $orca_id, ':num_revisao' => $num_revisao ]); // Deleta parcelas existentes $pdo->prepare("DELETE FROM gre_parcelas WHERE orca_id = :o AND num_revisao = :r") ->execute([':o' => $orca_id, ':r' => $num_revisao]); // Inserir parcela de entrada $tipoPgto = intval($dados['tipo_pgto_parcela'] ?? 0); $valorEntrada = floatval($dados['valor_entrada'] ?? 0); $tipoEntrada = intval($dados['tipo_pgto_entrada'] ?? 0); if ($valorEntrada > 0 && $tipoEntrada > 0 && $tipoPgto < 5) { $pdo->prepare( "INSERT INTO gre_parcelas (orca_id,num_revisao,num_parcela,qtde_parcela,tipo_pagto_id,vencimento,valor_parcela) VALUES (:o,:r,0,0,:tipo,NULL,:valor)" )->execute([ ':o' => $orca_id, ':r' => $num_revisao, ':tipo' => $tipoEntrada, ':valor' => $valorEntrada ]); } // Inserir parcelas padrão $qtdeParcelas = intval($dados['num_parcelas'] ?? 0); $valorTotal = floatval($dados['vlr_total'] ?? 0); $valorNS = floatval($dados['vlr_ns'] ?? 0); $num_parcela = floatval($dados['num_parcela'] ?? 0); $valorTotal = $valorTotal - $valorNS; $dataParcela1 = $dados['data_parcela'] ?? null; if ($qtdeParcelas > 0 && $tipoPgto > 0) { if($dataParcela1 <> ''){ $saldoParcelado = max($valorTotal - $valorEntrada, 0); $valorParcelaBase = floor(($saldoParcelado / $qtdeParcelas) * 100) / 100; $diferenca = round($saldoParcelado - ($valorParcelaBase * $qtdeParcelas), 2); $venc = new DateTime($dataParcela1); } for ($i = 1; $i <= $qtdeParcelas; $i++) { if ($tipoPgto <> 5){ $valor = $valorParcelaBase; if ($i === $qtdeParcelas) { $valor += $diferenca; } $pdo->prepare( "INSERT INTO gre_parcelas (orca_id,num_revisao,num_parcela,qtde_parcela,tipo_pagto_id,vencimento,valor_parcela) VALUES (:o,:r,:p,:t,:tipo,:venc,:valor)" )->execute([ ':o' => $orca_id, ':r' => $num_revisao, ':p' => $i, ':t' => $qtdeParcelas, ':tipo' => $tipoPgto, ':venc' => $venc->format('Y-m-d'), ':valor' => $valor ]); $venc->modify('+1 month'); }else{ $valor = max($valorTotal - $valorEntrada, 0); $pdo->prepare( "INSERT INTO gre_parcelas (orca_id,num_revisao,num_parcela,qtde_parcela,tipo_pagto_id,valor_parcela) VALUES (:o,:r,:p,:t,:tipo,:valor)" )->execute([ ':o' => $orca_id, ':r' => $num_revisao, ':p' => 0, ':t' => 1, ':tipo' => $tipoPgto, ':valor' => $valorEntrada ]); $pdo->prepare( "INSERT INTO gre_parcelas (orca_id,num_revisao,num_parcela,qtde_parcela,tipo_pagto_id,valor_parcela) VALUES (:o,:r,:p,:t,:tipo,:valor)" )->execute([ ':o' => $orca_id, ':r' => $num_revisao, ':p' => 1, ':t' => 1, ':tipo' => $tipoPgto, ':valor' => $valor ]); } } } // Inserir parcelas do cronograma se tipo = 6 if ($tipoPgto == 6 && !empty($cronograma)) { $saldoParcelado = max($valorTotal - $valorEntrada, 0); $qtdeParcelas = count($cronograma); $ind = 0; foreach ($cronograma as $item) { $numParcela = intval($item['id']); $perc = floatval($item['perc']); if ($numParcela == 0) { $valorParcela = $valorEntrada; } else { $valorParcela = round(($saldoParcelado * $perc) / 100, 2); } if($perc > 0 ){ $stmt = $pdo->prepare( "INSERT INTO gre_parcelas (orca_id, num_revisao, num_parcela, qtde_parcela, tipo_pagto_id, valor_parcela, perc_cronograma, id_cronograma) VALUES (:o, :r, :p, :t, :tipo, :valor, :perc_cronograma, :id_cronograma)" ); $stmt->execute([ ':o' => $orca_id, ':r' => $num_revisao, ':p' => $ind, ':t' => $qtdeParcelas, ':tipo' => $tipoPgto, ':valor' => $valorParcela, ':perc_cronograma' => $perc, ':id_cronograma' => $numParcela ]); $ind = $ind+1; } } } // Retorno JSON echo json_encode([ 'status' => 'success', 'mensagem' => 'Pedido atualizado com sucesso.', 'id_orcamento' => $orca_id, 'num_revisao' => $num_revisao ]); } catch (Exception $e) { echo json_encode([ 'status' => 'error', 'mensagem' => 'Erro: ' . $e->getMessage() ]); }