ItemprojetoHTML e Js
ItemprojetoHTML e Js
DOCTYPE html>
<html lang="pt-BR" data-bs-theme="dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Itens do Projeto</title>
<link
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
rel="stylesheet"
crossorigin="anonymous"
/>
<style>
body {
padding-top: 56px;
}
.card-custom {
background-color: var(--bs-card-bg, #2b3035);
border: 1px solid var(--bs-border-color, #495057);
padding: 1.5rem;
margin-bottom: 2rem;
border-radius: 0.375rem;
}
.btn-preencher {
background-color: #6c757d;
border-color: #6c757d;
color: white;
}
.btn-preencher:hover {
background-color: #5a6268;
border-color: #545b62;
}
.toast {
min-width: 300px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg fixed-top">
<div class="container-fluid">
<a class="navbar-brand" href="#">BuildUP</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav text-decoration-none gap-4">
<li class="nav-item">
<a class="nav-link" href="clientes.html">Clientes</a>
</li>
<li class="nav-item">
<a class="nav-link" href="materiais.html">Materiais</a>
</li>
<li class="nav-item">
<a class="nav-link" href="projetos.html">Projetos</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="itemprojeto.html">Itens do
Projeto</a>
</li>
</ul>
</div>
</div>
</nav>
<script
src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
crossorigin="anonymous"
></script>
<script src="itemprojeto.js"></script>
</body>
</html>
// itemprojeto.js
document.addEventListener("DOMContentLoaded", () => {
const URL_BASE = "http://localhost:3000";
// SELETORES
const inputIdItemProjeto = document.getElementById("inputId");
const selectProjeto = document.getElementById("inputProjeto");
const selectMaterial = document.getElementById("inputMaterial");
const inputQuantidade = document.getElementById("inputQuantidade");
itens.forEach(item => {
const tr = document.createElement("tr");
let dataProjetoDisplay = 'N/A';
if (item.Data_projeto) {
const partesData = item.Data_projeto.split('-');
if (partesData.length === 3) {
const ano = parseInt(partesData[0], 10);
const mes = parseInt(partesData[1], 10) - 1;
const dia = parseInt(partesData[2], 10);
dataProjetoDisplay = new Date(ano, mes, dia).toLocaleDateString('pt-BR');
} else {
dataProjetoDisplay = 'Data Inválida Recebida';
}
}
tr.innerHTML = `
<td>${item.id_item_projeto}</td>
<td>IDP: ${item.id_projeto} (${item.StatusProjeto || 'N/A'} em $
{dataProjetoDisplay})</td>
<td>${item.NomeMaterial || 'Material não encontrado'} (IDM: $
{item.id_material})</td>
<td>${item.quantidade}</td>
<td>R$ ${Number(item.valor_total).toFixed(2).replace('.', ',')}</td>
<td class="text-end">
<button class="btn btn-outline-secondary btn-sm me-2 btn-editar-item"
data-iditem="${item.id_item_projeto}"
data-idprojeto="${item.id_projeto}"
data-idmaterial="${item.id_material}"
data-quantidade="${item.quantidade}">Editar</button>
<button class="btn btn-outline-danger btn-sm btn-excluir-item" data-
iditem="${item.id_item_projeto}">Excluir</button>
</td>
`;
tabelaItensBody.appendChild(tr);
});
document.querySelectorAll('.btn-excluir-item').forEach(button => {
button.addEventListener('click', function () {
deletarItem(this.dataset.iditem);
});
});
}
try {
const response = await fetch(`${URL_BASE}/itemprojeto`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(item)
});
const resultado = await response.json();
if (!response.ok) throw new Error(resultado.error || `Erro $
{response.status}`);
const item = {
id_projeto: parseInt(selectProjeto.value),
id_material: parseInt(selectMaterial.value),
quantidade: parseInt(inputQuantidade.value)
};
try {
const response = await fetch(`${URL_BASE}/itemprojeto/${idItem}`, {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(item)
});
const resultado = await response.json();
if (!response.ok) throw new Error(resultado.error || `Erro $
{response.status}`);
btnAdicionar.disabled = true;
btnAtualizar.disabled = false;
selectProjeto.focus();
}
try {
const response = await fetch(`${URL_BASE}/itemprojeto/${id}`, { method:
"DELETE" });
const resultado = await response.json();
if (!response.ok) throw new Error(resultado.error || `Erro $
{response.status}`);
inicializarPagina();
});